[llvm] [LegalizeIntegerTypes] Add `PromoteIntOp_ANY_EXTEND_VECTOR_INREG` (PR #178144)
Abhishek Kaushik via llvm-commits
llvm-commits at lists.llvm.org
Tue Jan 27 01:42:32 PST 2026
abhishek-kaushik22 wrote:
If we just disable the combine for illegal types, the generated assembly is a lot cleaner for both X86 and AArch64
```diff
diff --git a/llvm/test/CodeGen/AArch64/pr161013.ll b/llvm/test/CodeGen/AArch64/pr161013.ll
index 5dd4df61aceb..c70611fb5f4d 100644
--- a/llvm/test/CodeGen/AArch64/pr161013.ll
+++ b/llvm/test/CodeGen/AArch64/pr161013.ll
@@ -4,44 +4,8 @@
define <16 x i4> @avir_v2i4_v16i4(<2 x i4> %arg) {
; CHECK-LABEL: avir_v2i4_v16i4:
; CHECK: // %bb.0:
-; CHECK-NEXT: sub sp, sp, #16
-; CHECK-NEXT: .cfi_def_cfa_offset 16
-; CHECK-NEXT: uzp1 v0.4h, v0.4h, v0.4h
-; CHECK-NEXT: str d0, [sp, #8]
-; CHECK-NEXT: ldr x8, [sp, #8]
-; CHECK-NEXT: and w10, w8, #0xf
-; CHECK-NEXT: ubfx w9, w8, #4, #4
-; CHECK-NEXT: fmov s0, w10
-; CHECK-NEXT: mov v0.b[1], w9
-; CHECK-NEXT: ubfx w9, w8, #8, #4
-; CHECK-NEXT: mov v0.b[2], w9
-; CHECK-NEXT: ubfx w9, w8, #12, #4
-; CHECK-NEXT: mov v0.b[3], w9
-; CHECK-NEXT: ubfx w9, w8, #16, #4
-; CHECK-NEXT: mov v0.b[4], w9
-; CHECK-NEXT: ubfx w9, w8, #20, #4
-; CHECK-NEXT: mov v0.b[5], w9
-; CHECK-NEXT: ubfx w9, w8, #24, #4
-; CHECK-NEXT: mov v0.b[6], w9
-; CHECK-NEXT: lsr w9, w8, #28
-; CHECK-NEXT: mov v0.b[7], w9
-; CHECK-NEXT: ubfx x9, x8, #32, #4
-; CHECK-NEXT: mov v0.b[8], w9
-; CHECK-NEXT: ubfx x9, x8, #36, #4
-; CHECK-NEXT: mov v0.b[9], w9
-; CHECK-NEXT: ubfx x9, x8, #40, #4
-; CHECK-NEXT: mov v0.b[10], w9
-; CHECK-NEXT: ubfx x9, x8, #44, #4
-; CHECK-NEXT: mov v0.b[11], w9
-; CHECK-NEXT: ubfx x9, x8, #48, #4
-; CHECK-NEXT: mov v0.b[12], w9
-; CHECK-NEXT: ubfx x9, x8, #52, #4
-; CHECK-NEXT: mov v0.b[13], w9
-; CHECK-NEXT: ubfx x9, x8, #56, #4
-; CHECK-NEXT: lsr x8, x8, #60
-; CHECK-NEXT: mov v0.b[14], w9
-; CHECK-NEXT: mov v0.b[15], w8
-; CHECK-NEXT: add sp, sp, #16
+; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
+; CHECK-NEXT: dup v0.16b, v0.b[4]
; CHECK-NEXT: ret
%res = shufflevector <2 x i4> %arg, <2 x i4> poison,
<16 x i32> <i32 poison, i32 poison, i32 poison, i32 poison, i32 1 , i32 poison, i32 poison, i32 poison,
```
https://github.com/llvm/llvm-project/pull/178144
More information about the llvm-commits
mailing list