|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
2 |
| -; RUN: llc < %s --mattr=+sve -o - | FileCheck %s -check-prefixes=CHECK,SHUFFLE_SPLAT |
3 |
| -; RUN: llc -use-constant-int-for-scalable-splat -use-constant-fp-for-scalable-splat < %s --mattr=+sve -o - | FileCheck %s -check-prefixes=CHECK,CONST_SPLAT |
| 2 | +; RUN: llc < %s --mattr=+sve -o - | FileCheck %s |
| 3 | +; RUN: llc -use-constant-int-for-scalable-splat -use-constant-fp-for-scalable-splat < %s --mattr=+sve -o - | FileCheck %s |
4 | 4 |
|
5 | 5 | target triple = "aarch64"
|
6 | 6 |
|
7 | 7 | ; a[i] * b[i] * (11.0 + 3.0.i);
|
8 | 8 | ;
|
9 | 9 | define <vscale x 4 x double> @complex_mul_const(<vscale x 4 x double> %a, <vscale x 4 x double> %b) {
|
10 |
| -; SHUFFLE_SPLAT-LABEL: complex_mul_const: |
11 |
| -; SHUFFLE_SPLAT: // %bb.0: // %entry |
12 |
| -; SHUFFLE_SPLAT-NEXT: movi v4.2d, #0000000000000000 |
13 |
| -; SHUFFLE_SPLAT-NEXT: movi v5.2d, #0000000000000000 |
14 |
| -; SHUFFLE_SPLAT-NEXT: ptrue p0.d |
15 |
| -; SHUFFLE_SPLAT-NEXT: fmov z6.d, #3.00000000 |
16 |
| -; SHUFFLE_SPLAT-NEXT: fmov z7.d, #11.00000000 |
17 |
| -; SHUFFLE_SPLAT-NEXT: fcmla z4.d, p0/m, z0.d, z2.d, #0 |
18 |
| -; SHUFFLE_SPLAT-NEXT: fcmla z5.d, p0/m, z1.d, z3.d, #0 |
19 |
| -; SHUFFLE_SPLAT-NEXT: fcmla z4.d, p0/m, z0.d, z2.d, #90 |
20 |
| -; SHUFFLE_SPLAT-NEXT: movi v2.2d, #0000000000000000 |
21 |
| -; SHUFFLE_SPLAT-NEXT: fcmla z5.d, p0/m, z1.d, z3.d, #90 |
22 |
| -; SHUFFLE_SPLAT-NEXT: zip2 z1.d, z7.d, z6.d |
23 |
| -; SHUFFLE_SPLAT-NEXT: movi v0.2d, #0000000000000000 |
24 |
| -; SHUFFLE_SPLAT-NEXT: zip1 z3.d, z7.d, z6.d |
25 |
| -; SHUFFLE_SPLAT-NEXT: fcmla z2.d, p0/m, z5.d, z1.d, #0 |
26 |
| -; SHUFFLE_SPLAT-NEXT: fcmla z0.d, p0/m, z4.d, z3.d, #0 |
27 |
| -; SHUFFLE_SPLAT-NEXT: fcmla z2.d, p0/m, z5.d, z1.d, #90 |
28 |
| -; SHUFFLE_SPLAT-NEXT: fcmla z0.d, p0/m, z4.d, z3.d, #90 |
29 |
| -; SHUFFLE_SPLAT-NEXT: mov z1.d, z2.d |
30 |
| -; SHUFFLE_SPLAT-NEXT: ret |
31 |
| -; |
32 |
| -; CONST_SPLAT-LABEL: complex_mul_const: |
33 |
| -; CONST_SPLAT: // %bb.0: // %entry |
34 |
| -; CONST_SPLAT-NEXT: uzp1 z4.d, z2.d, z3.d |
35 |
| -; CONST_SPLAT-NEXT: uzp2 z5.d, z0.d, z1.d |
36 |
| -; CONST_SPLAT-NEXT: uzp2 z2.d, z2.d, z3.d |
37 |
| -; CONST_SPLAT-NEXT: uzp1 z0.d, z0.d, z1.d |
38 |
| -; CONST_SPLAT-NEXT: ptrue p0.d |
39 |
| -; CONST_SPLAT-NEXT: fmul z3.d, z4.d, z5.d |
40 |
| -; CONST_SPLAT-NEXT: fmul z1.d, z2.d, z5.d |
41 |
| -; CONST_SPLAT-NEXT: fmov z5.d, #11.00000000 |
42 |
| -; CONST_SPLAT-NEXT: fmad z2.d, p0/m, z0.d, z3.d |
43 |
| -; CONST_SPLAT-NEXT: fmov z3.d, #3.00000000 |
44 |
| -; CONST_SPLAT-NEXT: fnmsb z0.d, p0/m, z4.d, z1.d |
45 |
| -; CONST_SPLAT-NEXT: fmul z1.d, z2.d, z5.d |
46 |
| -; CONST_SPLAT-NEXT: fmul z2.d, z2.d, z3.d |
47 |
| -; CONST_SPLAT-NEXT: fmla z1.d, p0/m, z0.d, z3.d |
48 |
| -; CONST_SPLAT-NEXT: fnmls z2.d, p0/m, z0.d, z5.d |
49 |
| -; CONST_SPLAT-NEXT: zip1 z0.d, z2.d, z1.d |
50 |
| -; CONST_SPLAT-NEXT: zip2 z1.d, z2.d, z1.d |
51 |
| -; CONST_SPLAT-NEXT: ret |
| 10 | +; CHECK-LABEL: complex_mul_const: |
| 11 | +; CHECK: // %bb.0: // %entry |
| 12 | +; CHECK-NEXT: movi v4.2d, #0000000000000000 |
| 13 | +; CHECK-NEXT: movi v5.2d, #0000000000000000 |
| 14 | +; CHECK-NEXT: ptrue p0.d |
| 15 | +; CHECK-NEXT: fmov z6.d, #3.00000000 |
| 16 | +; CHECK-NEXT: fmov z7.d, #11.00000000 |
| 17 | +; CHECK-NEXT: fcmla z4.d, p0/m, z0.d, z2.d, #0 |
| 18 | +; CHECK-NEXT: fcmla z5.d, p0/m, z1.d, z3.d, #0 |
| 19 | +; CHECK-NEXT: fcmla z4.d, p0/m, z0.d, z2.d, #90 |
| 20 | +; CHECK-NEXT: movi v2.2d, #0000000000000000 |
| 21 | +; CHECK-NEXT: fcmla z5.d, p0/m, z1.d, z3.d, #90 |
| 22 | +; CHECK-NEXT: zip2 z1.d, z7.d, z6.d |
| 23 | +; CHECK-NEXT: movi v0.2d, #0000000000000000 |
| 24 | +; CHECK-NEXT: zip1 z3.d, z7.d, z6.d |
| 25 | +; CHECK-NEXT: fcmla z2.d, p0/m, z5.d, z1.d, #0 |
| 26 | +; CHECK-NEXT: fcmla z0.d, p0/m, z4.d, z3.d, #0 |
| 27 | +; CHECK-NEXT: fcmla z2.d, p0/m, z5.d, z1.d, #90 |
| 28 | +; CHECK-NEXT: fcmla z0.d, p0/m, z4.d, z3.d, #90 |
| 29 | +; CHECK-NEXT: mov z1.d, z2.d |
| 30 | +; CHECK-NEXT: ret |
52 | 31 | entry:
|
53 | 32 | %strided.vec = tail call { <vscale x 2 x double>, <vscale x 2 x double> } @llvm.vector.deinterleave2.nxv4f64(<vscale x 4 x double> %a)
|
54 | 33 | %0 = extractvalue { <vscale x 2 x double>, <vscale x 2 x double> } %strided.vec, 0
|
|
0 commit comments