[llvm] [AArch64] Enabled and regenerate clmul-fixed.ll. NFC (PR #184628)

via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 4 06:52:41 PST 2026


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-backend-aarch64

Author: David Green (davemgreen)

<details>
<summary>Changes</summary>

The v2i64 tests are now fixed. The disabled ones in clmul-scalable.ll require i128 vectors which are generally not supported.

---

Patch is 163.84 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/184628.diff


1 Files Affected:

- (modified) llvm/test/CodeGen/AArch64/clmul-fixed.ll (+3707-46) 


``````````diff
diff --git a/llvm/test/CodeGen/AArch64/clmul-fixed.ll b/llvm/test/CodeGen/AArch64/clmul-fixed.ll
index 23692dc456fc2..234270d9e80b2 100644
--- a/llvm/test/CodeGen/AArch64/clmul-fixed.ll
+++ b/llvm/test/CodeGen/AArch64/clmul-fixed.ll
@@ -432,16 +432,1227 @@ define <2 x i32> @clmul_v2i32_neon(<2 x i32> %x, <2 x i32> %y) {
   ret <2 x i32> %a
 }
 
-; TODO: Fix
-; define <2 x i64> @clmul_v2i64_neon(<2 x i64> %x, <2 x i64> %y) {
-;   %a = call <2 x i64> @llvm.clmul.v2i64(<2 x i64> %x, <2 x i64> %y)
-;   ret <2 x i64> %a
-; }
-; TODO: Fix
-; define <1 x i64> @clmul_v1i64_neon(<1 x i64> %x, <1 x i64> %y) {
-;   %a = call <1 x i64> @llvm.clmul.v1i64(<1 x i64> %x, <1 x i64> %y)
-;   ret <1 x i64> %a
-; }
+define <2 x i64> @clmul_v2i64_neon(<2 x i64> %x, <2 x i64> %y) {
+; CHECK-NEON-LABEL: clmul_v2i64_neon:
+; CHECK-NEON:       // %bb.0:
+; CHECK-NEON-NEXT:    sub sp, sp, #432
+; CHECK-NEON-NEXT:    stp d13, d12, [sp, #288] // 16-byte Folded Spill
+; CHECK-NEON-NEXT:    stp d11, d10, [sp, #304] // 16-byte Folded Spill
+; CHECK-NEON-NEXT:    stp d9, d8, [sp, #320] // 16-byte Folded Spill
+; CHECK-NEON-NEXT:    stp x29, x30, [sp, #336] // 16-byte Folded Spill
+; CHECK-NEON-NEXT:    stp x28, x27, [sp, #352] // 16-byte Folded Spill
+; CHECK-NEON-NEXT:    stp x26, x25, [sp, #368] // 16-byte Folded Spill
+; CHECK-NEON-NEXT:    stp x24, x23, [sp, #384] // 16-byte Folded Spill
+; CHECK-NEON-NEXT:    stp x22, x21, [sp, #400] // 16-byte Folded Spill
+; CHECK-NEON-NEXT:    stp x20, x19, [sp, #416] // 16-byte Folded Spill
+; CHECK-NEON-NEXT:    .cfi_def_cfa_offset 432
+; CHECK-NEON-NEXT:    .cfi_offset w19, -8
+; CHECK-NEON-NEXT:    .cfi_offset w20, -16
+; CHECK-NEON-NEXT:    .cfi_offset w21, -24
+; CHECK-NEON-NEXT:    .cfi_offset w22, -32
+; CHECK-NEON-NEXT:    .cfi_offset w23, -40
+; CHECK-NEON-NEXT:    .cfi_offset w24, -48
+; CHECK-NEON-NEXT:    .cfi_offset w25, -56
+; CHECK-NEON-NEXT:    .cfi_offset w26, -64
+; CHECK-NEON-NEXT:    .cfi_offset w27, -72
+; CHECK-NEON-NEXT:    .cfi_offset w28, -80
+; CHECK-NEON-NEXT:    .cfi_offset w30, -88
+; CHECK-NEON-NEXT:    .cfi_offset w29, -96
+; CHECK-NEON-NEXT:    .cfi_offset b8, -104
+; CHECK-NEON-NEXT:    .cfi_offset b9, -112
+; CHECK-NEON-NEXT:    .cfi_offset b10, -120
+; CHECK-NEON-NEXT:    .cfi_offset b11, -128
+; CHECK-NEON-NEXT:    .cfi_offset b12, -136
+; CHECK-NEON-NEXT:    .cfi_offset b13, -144
+; CHECK-NEON-NEXT:    mov w8, #2 // =0x2
+; CHECK-NEON-NEXT:    fmov x9, d0
+; CHECK-NEON-NEXT:    mov w10, #8 // =0x8
+; CHECK-NEON-NEXT:    dup v2.2d, x8
+; CHECK-NEON-NEXT:    mov w8, #1 // =0x1
+; CHECK-NEON-NEXT:    mov w15, #1073741824 // =0x40000000
+; CHECK-NEON-NEXT:    dup v3.2d, x8
+; CHECK-NEON-NEXT:    mov w8, #4 // =0x4
+; CHECK-NEON-NEXT:    dup v4.2d, x8
+; CHECK-NEON-NEXT:    and v2.16b, v1.16b, v2.16b
+; CHECK-NEON-NEXT:    and v3.16b, v1.16b, v3.16b
+; CHECK-NEON-NEXT:    and v4.16b, v1.16b, v4.16b
+; CHECK-NEON-NEXT:    fmov x8, d2
+; CHECK-NEON-NEXT:    mov x12, v2.d[1]
+; CHECK-NEON-NEXT:    fmov x11, d3
+; CHECK-NEON-NEXT:    mov x13, v4.d[1]
+; CHECK-NEON-NEXT:    mul x17, x9, x8
+; CHECK-NEON-NEXT:    mov x8, v0.d[1]
+; CHECK-NEON-NEXT:    dup v0.2d, x10
+; CHECK-NEON-NEXT:    fmov x10, d4
+; CHECK-NEON-NEXT:    mul x5, x9, x11
+; CHECK-NEON-NEXT:    mov x11, v3.d[1]
+; CHECK-NEON-NEXT:    and v0.16b, v1.16b, v0.16b
+; CHECK-NEON-NEXT:    mul x4, x9, x10
+; CHECK-NEON-NEXT:    mov w10, #16 // =0x10
+; CHECK-NEON-NEXT:    dup v2.2d, x10
+; CHECK-NEON-NEXT:    mul x11, x8, x11
+; CHECK-NEON-NEXT:    mov x10, v0.d[1]
+; CHECK-NEON-NEXT:    fmov d5, x5
+; CHECK-NEON-NEXT:    mov x5, #274877906944 // =0x4000000000
+; CHECK-NEON-NEXT:    and v2.16b, v1.16b, v2.16b
+; CHECK-NEON-NEXT:    mul x24, x8, x12
+; CHECK-NEON-NEXT:    mov w12, #64 // =0x40
+; CHECK-NEON-NEXT:    fmov d16, x4
+; CHECK-NEON-NEXT:    mov x4, #17179869184 // =0x400000000
+; CHECK-NEON-NEXT:    mul x10, x8, x10
+; CHECK-NEON-NEXT:    str x11, [sp, #264] // 8-byte Spill
+; CHECK-NEON-NEXT:    mov w11, #32 // =0x20
+; CHECK-NEON-NEXT:    dup v3.2d, x11
+; CHECK-NEON-NEXT:    mul x11, x8, x13
+; CHECK-NEON-NEXT:    mov w13, #268435456 // =0x10000000
+; CHECK-NEON-NEXT:    stp x10, x11, [sp, #272] // 16-byte Folded Spill
+; CHECK-NEON-NEXT:    mov x10, v2.d[1]
+; CHECK-NEON-NEXT:    fmov x11, d0
+; CHECK-NEON-NEXT:    and v0.16b, v1.16b, v3.16b
+; CHECK-NEON-NEXT:    dup v3.2d, x12
+; CHECK-NEON-NEXT:    mov w12, #128 // =0x80
+; CHECK-NEON-NEXT:    mul x11, x9, x11
+; CHECK-NEON-NEXT:    mul x26, x8, x10
+; CHECK-NEON-NEXT:    mov x10, v0.d[1]
+; CHECK-NEON-NEXT:    str x11, [sp, #248] // 8-byte Spill
+; CHECK-NEON-NEXT:    fmov x11, d2
+; CHECK-NEON-NEXT:    and v2.16b, v1.16b, v3.16b
+; CHECK-NEON-NEXT:    mul x10, x8, x10
+; CHECK-NEON-NEXT:    dup v3.2d, x12
+; CHECK-NEON-NEXT:    mov w12, #256 // =0x100
+; CHECK-NEON-NEXT:    ldr d19, [sp, #248] // 8-byte Reload
+; CHECK-NEON-NEXT:    mul x11, x9, x11
+; CHECK-NEON-NEXT:    str x10, [sp, #256] // 8-byte Spill
+; CHECK-NEON-NEXT:    mov x10, v2.d[1]
+; CHECK-NEON-NEXT:    str x11, [sp, #224] // 8-byte Spill
+; CHECK-NEON-NEXT:    fmov x11, d0
+; CHECK-NEON-NEXT:    and v0.16b, v1.16b, v3.16b
+; CHECK-NEON-NEXT:    dup v3.2d, x12
+; CHECK-NEON-NEXT:    mov w12, #512 // =0x200
+; CHECK-NEON-NEXT:    ldr d17, [sp, #224] // 8-byte Reload
+; CHECK-NEON-NEXT:    mul x10, x8, x10
+; CHECK-NEON-NEXT:    mov v17.d[1], x26
+; CHECK-NEON-NEXT:    mov x26, #34359738368 // =0x800000000
+; CHECK-NEON-NEXT:    mul x11, x9, x11
+; CHECK-NEON-NEXT:    str x10, [sp, #232] // 8-byte Spill
+; CHECK-NEON-NEXT:    mov x10, v0.d[1]
+; CHECK-NEON-NEXT:    str x11, [sp, #200] // 8-byte Spill
+; CHECK-NEON-NEXT:    fmov x11, d2
+; CHECK-NEON-NEXT:    and v2.16b, v1.16b, v3.16b
+; CHECK-NEON-NEXT:    dup v3.2d, x12
+; CHECK-NEON-NEXT:    mov w12, #1024 // =0x400
+; CHECK-NEON-NEXT:    mul x10, x8, x10
+; CHECK-NEON-NEXT:    mul x11, x9, x11
+; CHECK-NEON-NEXT:    str x10, [sp, #240] // 8-byte Spill
+; CHECK-NEON-NEXT:    mov x10, v2.d[1]
+; CHECK-NEON-NEXT:    str x11, [sp, #192] // 8-byte Spill
+; CHECK-NEON-NEXT:    fmov x11, d0
+; CHECK-NEON-NEXT:    and v0.16b, v1.16b, v3.16b
+; CHECK-NEON-NEXT:    dup v3.2d, x12
+; CHECK-NEON-NEXT:    mov w12, #2048 // =0x800
+; CHECK-NEON-NEXT:    mul x10, x8, x10
+; CHECK-NEON-NEXT:    mul x11, x9, x11
+; CHECK-NEON-NEXT:    str x10, [sp, #208] // 8-byte Spill
+; CHECK-NEON-NEXT:    mov x10, v0.d[1]
+; CHECK-NEON-NEXT:    str x11, [sp, #176] // 8-byte Spill
+; CHECK-NEON-NEXT:    fmov x11, d2
+; CHECK-NEON-NEXT:    and v2.16b, v1.16b, v3.16b
+; CHECK-NEON-NEXT:    dup v3.2d, x12
+; CHECK-NEON-NEXT:    mov w12, #4096 // =0x1000
+; CHECK-NEON-NEXT:    mul x10, x8, x10
+; CHECK-NEON-NEXT:    mul x11, x9, x11
+; CHECK-NEON-NEXT:    str x10, [sp, #216] // 8-byte Spill
+; CHECK-NEON-NEXT:    mov x10, v2.d[1]
+; CHECK-NEON-NEXT:    str x11, [sp, #168] // 8-byte Spill
+; CHECK-NEON-NEXT:    fmov x11, d0
+; CHECK-NEON-NEXT:    and v0.16b, v1.16b, v3.16b
+; CHECK-NEON-NEXT:    dup v3.2d, x12
+; CHECK-NEON-NEXT:    mov w12, #8192 // =0x2000
+; CHECK-NEON-NEXT:    mul x10, x8, x10
+; CHECK-NEON-NEXT:    ldp d28, d22, [sp, #168] // 16-byte Folded Reload
+; CHECK-NEON-NEXT:    mul x11, x9, x11
+; CHECK-NEON-NEXT:    str x10, [sp, #184] // 8-byte Spill
+; CHECK-NEON-NEXT:    mov x10, v0.d[1]
+; CHECK-NEON-NEXT:    str x11, [sp, #144] // 8-byte Spill
+; CHECK-NEON-NEXT:    fmov x11, d2
+; CHECK-NEON-NEXT:    and v2.16b, v1.16b, v3.16b
+; CHECK-NEON-NEXT:    dup v3.2d, x12
+; CHECK-NEON-NEXT:    mov w12, #16384 // =0x4000
+; CHECK-NEON-NEXT:    ldr d23, [sp, #144] // 8-byte Reload
+; CHECK-NEON-NEXT:    mul x10, x8, x10
+; CHECK-NEON-NEXT:    mul x11, x9, x11
+; CHECK-NEON-NEXT:    str x10, [sp, #152] // 8-byte Spill
+; CHECK-NEON-NEXT:    mov x10, v2.d[1]
+; CHECK-NEON-NEXT:    str x11, [sp, #120] // 8-byte Spill
+; CHECK-NEON-NEXT:    fmov x11, d0
+; CHECK-NEON-NEXT:    and v0.16b, v1.16b, v3.16b
+; CHECK-NEON-NEXT:    dup v3.2d, x12
+; CHECK-NEON-NEXT:    mov w12, #32768 // =0x8000
+; CHECK-NEON-NEXT:    ldr d7, [sp, #120] // 8-byte Reload
+; CHECK-NEON-NEXT:    mul x10, x8, x10
+; CHECK-NEON-NEXT:    mul x27, x9, x11
+; CHECK-NEON-NEXT:    fmov x11, d2
+; CHECK-NEON-NEXT:    and v2.16b, v1.16b, v3.16b
+; CHECK-NEON-NEXT:    dup v3.2d, x12
+; CHECK-NEON-NEXT:    mov w12, #65536 // =0x10000
+; CHECK-NEON-NEXT:    str x10, [sp, #160] // 8-byte Spill
+; CHECK-NEON-NEXT:    mov x10, v0.d[1]
+; CHECK-NEON-NEXT:    mul x11, x9, x11
+; CHECK-NEON-NEXT:    fmov d27, x27
+; CHECK-NEON-NEXT:    mul x10, x8, x10
+; CHECK-NEON-NEXT:    str x11, [sp, #104] // 8-byte Spill
+; CHECK-NEON-NEXT:    fmov x11, d0
+; CHECK-NEON-NEXT:    and v0.16b, v1.16b, v3.16b
+; CHECK-NEON-NEXT:    dup v3.2d, x12
+; CHECK-NEON-NEXT:    mov w12, #131072 // =0x20000
+; CHECK-NEON-NEXT:    mul x11, x9, x11
+; CHECK-NEON-NEXT:    str x10, [sp, #128] // 8-byte Spill
+; CHECK-NEON-NEXT:    mov x10, v2.d[1]
+; CHECK-NEON-NEXT:    mul x10, x8, x10
+; CHECK-NEON-NEXT:    str x11, [sp, #96] // 8-byte Spill
+; CHECK-NEON-NEXT:    fmov x11, d2
+; CHECK-NEON-NEXT:    and v2.16b, v1.16b, v3.16b
+; CHECK-NEON-NEXT:    dup v3.2d, x12
+; CHECK-NEON-NEXT:    mov w12, #262144 // =0x40000
+; CHECK-NEON-NEXT:    ldp d25, d30, [sp, #96] // 16-byte Folded Reload
+; CHECK-NEON-NEXT:    mul x11, x9, x11
+; CHECK-NEON-NEXT:    and v3.16b, v1.16b, v3.16b
+; CHECK-NEON-NEXT:    str x10, [sp, #136] // 8-byte Spill
+; CHECK-NEON-NEXT:    mov x10, v0.d[1]
+; CHECK-NEON-NEXT:    str x11, [sp, #72] // 8-byte Spill
+; CHECK-NEON-NEXT:    fmov x11, d0
+; CHECK-NEON-NEXT:    dup v0.2d, x12
+; CHECK-NEON-NEXT:    mul x10, x8, x10
+; CHECK-NEON-NEXT:    mov w12, #524288 // =0x80000
+; CHECK-NEON-NEXT:    ldr d21, [sp, #72] // 8-byte Reload
+; CHECK-NEON-NEXT:    and v0.16b, v1.16b, v0.16b
+; CHECK-NEON-NEXT:    mul x11, x9, x11
+; CHECK-NEON-NEXT:    str x10, [sp, #112] // 8-byte Spill
+; CHECK-NEON-NEXT:    mov x10, v2.d[1]
+; CHECK-NEON-NEXT:    str x11, [sp, #48] // 8-byte Spill
+; CHECK-NEON-NEXT:    fmov x11, d2
+; CHECK-NEON-NEXT:    dup v2.2d, x12
+; CHECK-NEON-NEXT:    mov w12, #1048576 // =0x100000
+; CHECK-NEON-NEXT:    mul x10, x8, x10
+; CHECK-NEON-NEXT:    and v2.16b, v1.16b, v2.16b
+; CHECK-NEON-NEXT:    mul x28, x9, x11
+; CHECK-NEON-NEXT:    fmov x11, d3
+; CHECK-NEON-NEXT:    str x10, [sp, #80] // 8-byte Spill
+; CHECK-NEON-NEXT:    mov x10, v3.d[1]
+; CHECK-NEON-NEXT:    dup v3.2d, x12
+; CHECK-NEON-NEXT:    mov w12, #2097152 // =0x200000
+; CHECK-NEON-NEXT:    mul x25, x9, x11
+; CHECK-NEON-NEXT:    fmov x11, d0
+; CHECK-NEON-NEXT:    fmov d24, x28
+; CHECK-NEON-NEXT:    and v3.16b, v1.16b, v3.16b
+; CHECK-NEON-NEXT:    mul x10, x8, x10
+; CHECK-NEON-NEXT:    mul x21, x9, x11
+; CHECK-NEON-NEXT:    fmov x11, d2
+; CHECK-NEON-NEXT:    fmov d29, x25
+; CHECK-NEON-NEXT:    str x10, [sp, #88] // 8-byte Spill
+; CHECK-NEON-NEXT:    mov x10, v0.d[1]
+; CHECK-NEON-NEXT:    dup v0.2d, x12
+; CHECK-NEON-NEXT:    mov w12, #4194304 // =0x400000
+; CHECK-NEON-NEXT:    mul x29, x9, x11
+; CHECK-NEON-NEXT:    fmov x11, d3
+; CHECK-NEON-NEXT:    fmov d26, x21
+; CHECK-NEON-NEXT:    and v0.16b, v1.16b, v0.16b
+; CHECK-NEON-NEXT:    mul x10, x8, x10
+; CHECK-NEON-NEXT:    mul x19, x9, x11
+; CHECK-NEON-NEXT:    fmov x11, d0
+; CHECK-NEON-NEXT:    str x10, [sp, #56] // 8-byte Spill
+; CHECK-NEON-NEXT:    mov x10, v2.d[1]
+; CHECK-NEON-NEXT:    dup v2.2d, x12
+; CHECK-NEON-NEXT:    mov w12, #8388608 // =0x800000
+; CHECK-NEON-NEXT:    mul x6, x9, x11
+; CHECK-NEON-NEXT:    and v2.16b, v1.16b, v2.16b
+; CHECK-NEON-NEXT:    mul x10, x8, x10
+; CHECK-NEON-NEXT:    fmov x11, d2
+; CHECK-NEON-NEXT:    str x10, [sp, #64] // 8-byte Spill
+; CHECK-NEON-NEXT:    mov x10, v3.d[1]
+; CHECK-NEON-NEXT:    dup v3.2d, x12
+; CHECK-NEON-NEXT:    mov w12, #16777216 // =0x1000000
+; CHECK-NEON-NEXT:    mul x1, x9, x11
+; CHECK-NEON-NEXT:    and v3.16b, v1.16b, v3.16b
+; CHECK-NEON-NEXT:    mul x10, x8, x10
+; CHECK-NEON-NEXT:    fmov x11, d3
+; CHECK-NEON-NEXT:    str x10, [sp, #40] // 8-byte Spill
+; CHECK-NEON-NEXT:    mov x10, v0.d[1]
+; CHECK-NEON-NEXT:    dup v0.2d, x12
+; CHECK-NEON-NEXT:    mov w12, #33554432 // =0x2000000
+; CHECK-NEON-NEXT:    mul x18, x9, x11
+; CHECK-NEON-NEXT:    and v0.16b, v1.16b, v0.16b
+; CHECK-NEON-NEXT:    mul x30, x8, x10
+; CHECK-NEON-NEXT:    mov x10, v2.d[1]
+; CHECK-NEON-NEXT:    dup v2.2d, x12
+; CHECK-NEON-NEXT:    mov w12, #67108864 // =0x4000000
+; CHECK-NEON-NEXT:    fmov x11, d0
+; CHECK-NEON-NEXT:    and v2.16b, v1.16b, v2.16b
+; CHECK-NEON-NEXT:    mul x10, x8, x10
+; CHECK-NEON-NEXT:    mul x14, x9, x11
+; CHECK-NEON-NEXT:    fmov x11, d2
+; CHECK-NEON-NEXT:    str x10, [sp, #16] // 8-byte Spill
+; CHECK-NEON-NEXT:    mov x10, v3.d[1]
+; CHECK-NEON-NEXT:    dup v3.2d, x12
+; CHECK-NEON-NEXT:    mov w12, #134217728 // =0x8000000
+; CHECK-NEON-NEXT:    mul x16, x9, x11
+; CHECK-NEON-NEXT:    and v3.16b, v1.16b, v3.16b
+; CHECK-NEON-NEXT:    mul x20, x8, x10
+; CHECK-NEON-NEXT:    mov x10, v0.d[1]
+; CHECK-NEON-NEXT:    dup v0.2d, x12
+; CHECK-NEON-NEXT:    and v0.16b, v1.16b, v0.16b
+; CHECK-NEON-NEXT:    mul x2, x8, x10
+; CHECK-NEON-NEXT:    mov x10, v2.d[1]
+; CHECK-NEON-NEXT:    dup v2.2d, x13
+; CHECK-NEON-NEXT:    mov x11, v0.d[1]
+; CHECK-NEON-NEXT:    and v2.16b, v1.16b, v2.16b
+; CHECK-NEON-NEXT:    mul x10, x8, x10
+; CHECK-NEON-NEXT:    mov x13, v2.d[1]
+; CHECK-NEON-NEXT:    str x10, [sp, #8] // 8-byte Spill
+; CHECK-NEON-NEXT:    mov x10, v3.d[1]
+; CHECK-NEON-NEXT:    mul x3, x8, x13
+; CHECK-NEON-NEXT:    mul x7, x8, x10
+; CHECK-NEON-NEXT:    mov w10, #536870912 // =0x20000000
+; CHECK-NEON-NEXT:    dup v4.2d, x10
+; CHECK-NEON-NEXT:    fmov x10, d3
+; CHECK-NEON-NEXT:    and v3.16b, v1.16b, v4.16b
+; CHECK-NEON-NEXT:    mul x12, x9, x10
+; CHECK-NEON-NEXT:    movi v4.4s, #128, lsl #24
+; CHECK-NEON-NEXT:    mul x10, x8, x11
+; CHECK-NEON-NEXT:    fmov x11, d0
+; CHECK-NEON-NEXT:    dup v0.2d, x15
+; CHECK-NEON-NEXT:    mov x13, v3.d[1]
+; CHECK-NEON-NEXT:    fmov x15, d2
+; CHECK-NEON-NEXT:    fneg v4.2d, v4.2d
+; CHECK-NEON-NEXT:    mul x0, x9, x11
+; CHECK-NEON-NEXT:    and v6.16b, v1.16b, v0.16b
+; CHECK-NEON-NEXT:    fmov d0, x17
+; CHECK-NEON-NEXT:    mov x17, #4294967296 // =0x100000000
+; CHECK-NEON-NEXT:    str x10, [sp, #24] // 8-byte Spill
+; CHECK-NEON-NEXT:    mul x10, x8, x13
+; CHECK-NEON-NEXT:    and v2.16b, v1.16b, v4.16b
+; CHECK-NEON-NEXT:    mov x13, v6.d[1]
+; CHECK-NEON-NEXT:    mov v0.d[1], x24
+; CHECK-NEON-NEXT:    mul x23, x9, x15
+; CHECK-NEON-NEXT:    fmov x15, d3
+; CHECK-NEON-NEXT:    dup v3.2d, x17
+; CHECK-NEON-NEXT:    mov x17, #8589934592 // =0x200000000
+; CHECK-NEON-NEXT:    str x10, [sp, #32] // 8-byte Spill
+; CHECK-NEON-NEXT:    ldr x10, [sp, #264] // 8-byte Reload
+; CHECK-NEON-NEXT:    mul x22, x9, x15
+; CHECK-NEON-NEXT:    mov x15, v2.d[1]
+; CHECK-NEON-NEXT:    and v4.16b, v1.16b, v3.16b
+; CHECK-NEON-NEXT:    dup v3.2d, x17
+; CHECK-NEON-NEXT:    mov v5.d[1], x10
+; CHECK-NEON-NEXT:    ldp x10, x11, [sp, #272] // 16-byte Folded Reload
+; CHECK-NEON-NEXT:    mul x24, x8, x13
+; CHECK-NEON-NEXT:    fmov x13, d6
+; CHECK-NEON-NEXT:    fmov x17, d2
+; CHECK-NEON-NEXT:    and v6.16b, v1.16b, v3.16b
+; CHECK-NEON-NEXT:    ldp d3, d18, [sp, #192] // 16-byte Folded Reload
+; CHECK-NEON-NEXT:    mov v19.d[1], x10
+; CHECK-NEON-NEXT:    mul x10, x8, x15
+; CHECK-NEON-NEXT:    mov x15, v4.d[1]
+; CHECK-NEON-NEXT:    dup v2.2d, x4
+; CHECK-NEON-NEXT:    mov v16.d[1], x11
+; CHECK-NEON-NEXT:    mov x11, #137438953472 // =0x2000000000
+; CHECK-NEON-NEXT:    mul x4, x9, x17
+; CHECK-NEON-NEXT:    mov x17, v6.d[1]
+; CHECK-NEON-NEXT:    eor v13.16b, v5.16b, v0.16b
+; CHECK-NEON-NEXT:    fmov d0, x12
+; CHECK-NEON-NEXT:    fmov d5, x16
+; CHECK-NEON-NEXT:    and v2.16b, v1.16b, v2.16b
+; CHECK-NEON-NEXT:    mul x13, x9, x13
+; CHECK-NEON-NEXT:    str x10, [sp, #272] // 8-byte Spill
+; CHECK-NEON-NEXT:    ldr x10, [sp, #256] // 8-byte Reload
+; CHECK-NEON-NEXT:    eor v16.16b, v16.16b, v19.16b
+; CHECK-NEON-NEXT:    mov v0.d[1], x7
+; CHECK-NEON-NEXT:    mov v18.d[1], x10
+; CHECK-NEON-NEXT:    ldr x10, [sp, #232] // 8-byte Reload
+; CHECK-NEON-NEXT:    mov v3.d[1], x10
+; CHECK-NEON-NEXT:    mul x10, x8, x15
+; CHECK-NEON-NEXT:    fmov x15, d4
+; CHECK-NEON-NEXT:    dup v4.2d, x26
+; CHECK-NEON-NEXT:    fmov x26, d6
+; CHECK-NEON-NEXT:    mul x15, x9, x15
+; CHECK-NEON-NEXT:    and v4.16b, v1.16b, v4.16b
+; CHECK-NEON-NEXT:    str x10, [sp, #256] // 8-byte Spill
+; CHECK-NEON-NEXT:    ldr x10, [sp, #240] // 8-byte Reload
+; CHECK-NEON-NEXT:    mul x27, x9, x26
+; CHECK-NEON-NEXT:    mov v22.d[1], x10
+; CHECK-NEON-NEXT:    ldr x10, [sp, #208] // 8-byte Reload
+; CHECK-NEON-NEXT:    mov v28.d[1], x10
+; CHECK-NEON-NEXT:    mul x10, x8, x17
+; CHECK-NEON-NEXT:    mov x17, v2.d[1]
+; CHECK-NEON-NEXT:    mul x26, x8, x17
+; CHECK-NEON-NEXT:    fmov x17, d2
+; CHECK-NEON-NEXT:    dup v2.2d, x11
+; CHECK-NEON-NEXT:    str x10, [sp, #280] // 8-byte Spill
+; CHECK-NEON-NEXT:    mov x10, #68719476736 // =0x1000000000
+; CHECK-NEON-NEXT:    ldr x11, [sp, #160] // 8-byte Reload
+; CHECK-NEON-NEXT:    dup v6.2d, x10
+; CHECK-NEON-NEXT:    ldr x10, [sp, #216] // 8-byte Reload
+; CHECK-NEON-NEXT:    mov v30.d[1], x11
+; CHECK-NEON-NEXT:    ldr x11, [sp, #128] // 8-byte Reload
+; CHECK-NEON-NEXT:    and v2.16b, v1.16b, v2.16b
+; CHECK-NEON-NEXT:    mov v23.d[1], x10
+; CHECK-NEON-NEXT:    ldr x10, [sp, #184] // 8-byte Reload
+; CHECK-NEON-NEXT:    mul x17, x9, x17
+; CHECK-NEON-NEXT:    and v20.16b, v1.16b, v6.16b
+; CHECK-NEON-NEXT:    mov v25.d[1], x11
+; CHECK-NEON-NEXT:    fmov x11, d4
+; CHECK-NEON-NEXT:    mov v7.d[1], x10
+; CHECK-NEON-NEXT:    ldr x10, [sp, #152] // 8-byte Reload
+; CHECK-NEON-NEXT:    ldr d6, [sp, #48] // 8-byte Reload
+; CHECK-NEON-NEXT:    mov v27.d[1], x10
+; CHECK-NEON-NEXT:    mov x10, v4.d[1]
+; CHECK-NEON-NEXT:    mul x28, x9, x11
+; CHECK-NEON-NEXT:    ldr x11, [sp, #136] // 8-byte Reload
+; CHECK-NEON-NEXT:    dup v4.2d, x5
+; CHECK-NEON-NEXT:    mov x5, #549755813888 // =0x8000000000
+; CHECK-NEON-NEXT:    dup v8.2d, x5
+; CHECK-NEON-NEXT:    mov v21.d[1], x11
+; CHECK-NEON-NEXT:    ldr x11, [sp, #112] // 8-byte Reload
+; CHECK-NEON-NEXT:    mul x10, x8, x10
+; CHECK-NEON-NEXT:    and v31.16b, v1.16b, v4.16b
+; CHECK-NEON-NEXT:    fmov d4, x19
+; CHECK-NEON-NEXT:    mov v6.d[1], x11
+; CHECK-NEON-NEXT:    ldr x11, [sp, #80] // 8-byte Reload
+; CHECK-NEON-NEXT:    and v10.16b, v1.16b, v8.16b
+; CHECK-NEON-NEXT:    mov x19, #1099511627776 // =0x10000000000
+; CHECK-NEON-NEXT:    fmov d8, x1
+; CHECK-NEON-NEXT:    mov x1, #2199023255552 // =0x20000000000
+; CHECK-NEON-NEXT:    mov v24.d[1], x11
+; CHECK-NEON-NEXT:    fmov x11, d20
+; CHECK-NEON-NEXT:    dup v9.2d, x19
+; CHECK-NEON-NEXT:    dup v12.2d, x1
+; CHECK-NEON-NEXT:    str x10, [sp, #264] // 8-byte Spill
+; CHECK-NEON-NEXT:    mov x10, v20.d[1]
+; CHECK-NEON-NEXT:    fmov d20, x29
+; CHECK-NEON-NEXT:    mul x5, x9, x11
+; CHECK-NEON-NEXT:    ldr x11, [sp, #88] // 8-byte Reload
+; CHECK-NEON-NEXT:    and v11.16b, v1.16b, v9.16b
+; CHECK-NEON-NEXT:    fmov d9, x18
+; CHECK-NEON-NEXT:    mov v29.d[1], x11
+; CHECK-NEON-NEXT:    ldr x11, [sp, #56] // 8-byte Reload
+; CHECK-NEON-NEXT:    mul x25, x8, x10
+; CHECK-NEON-NEXT:    mov x10, v2.d[1]
+; CHECK-NEON-NEXT:    mov v26.d[1], x11
+; CHECK-NEON-NEXT:    fmov x11, d2
+; CHECK-NEON-NEXT:    mov v9.d[1], x20
+; CHECK-NEON-NEXT:    fmov d2, x6
+; CHECK-NEON-NEXT:    mul x10, x8, x10
+; CHECK-NEON-NEXT:    mov v2.d[1], x30
+; CHECK-NEON-NEXT:    mul x21, x9, x11
+; CHECK-NEON-NEXT:    ldr x11, [sp, #64] // 8-byte Reload
+; CHECK-NEON-NEXT:    mov v20.d[1], x11
+; CHECK-NEON-NEXT:    ldr x11, [sp, #40] // 8-byte Reload
+; CHECK-NEON-NEXT:    str x10, [sp, #248] // 8-byte Spill
+; CHECK-NEON-NEXT:    mov x10, v31.d[1]
+; CHECK-NEON-NEXT:    mov v4.d[1], x11
+; CHECK-NEON-NEXT:    fmov x11, d31
+; CHECK-NEON-NEXT:    fmov d31, x14
+; CHECK-NEON-NEXT:    mov x14, #4398046511104 // =0x40000000000
+; CHECK-NEON-NEXT:    mul x10, x8, x10
+; CHECK-NEON-NEXT:    mov v31.d[1], x2
+; CHECK-NEON-NEXT:    mov x2, #17592186044416 // =0x100000000000
+; CHECK-NEON-NEXT:    mul x18, x9, x11
+; CHECK-NEON-NEXT:    ldr x11, [sp, #16] // 8-byte Reload
+; CHECK-NEON-NEXT:    mov v8.d[1], x11
+; CHECK-NEON-NEXT:    mov x11, v11.d[1]
+; CHECK-NEON-NEXT:    str x10, [sp, #240] // 8-byte Spill
+; CHECK-NEON-NEXT:    mov x10, v10.d[1]
+; CHECK-NEON-NEXT:    mul x20, x8, x10
+; CHECK-NEON-NEXT:    fmov x10, d10
+; CHECK-NEON-...
[truncated]

``````````

</details>


https://github.com/llvm/llvm-project/pull/184628


More information about the llvm-commits mailing list