[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