[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