|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
2 |
| -; RUN: llc < %s --mattr=+mve.fp,+fp64 -o - | FileCheck %s |
| 2 | +; RUN: llc < %s --mattr=+mve.fp,+fp64 -o - -verify-machineinstrs | FileCheck %s |
3 | 3 |
|
4 | 4 | target triple = "thumbv8.1m.main-none-none-eabi"
|
5 | 5 |
|
@@ -60,68 +60,3 @@ entry:
|
60 | 60 | %interleaved.vec = shufflevector <2 x double> %5, <2 x double> %2, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
|
61 | 61 | ret <4 x double> %interleaved.vec
|
62 | 62 | }
|
63 |
| - |
64 |
| -; Expected to not transform |
65 |
| -define arm_aapcs_vfpcc <8 x double> @complex_mul_v8f64(<8 x double> %a, <8 x double> %b) { |
66 |
| -; CHECK-LABEL: complex_mul_v8f64: |
67 |
| -; CHECK: @ %bb.0: @ %entry |
68 |
| -; CHECK-NEXT: .vsave {d8, d9, d10, d11, d12, d13, d14, d15} |
69 |
| -; CHECK-NEXT: vpush {d8, d9, d10, d11, d12, d13, d14, d15} |
70 |
| -; CHECK-NEXT: .pad #64 |
71 |
| -; CHECK-NEXT: sub sp, #64 |
72 |
| -; CHECK-NEXT: add r0, sp, #128 |
73 |
| -; CHECK-NEXT: vmov q7, q1 |
74 |
| -; CHECK-NEXT: vldrw.u32 q4, [r0] |
75 |
| -; CHECK-NEXT: add r0, sp, #160 |
76 |
| -; CHECK-NEXT: vldrw.u32 q1, [r0] |
77 |
| -; CHECK-NEXT: vmov q6, q0 |
78 |
| -; CHECK-NEXT: vmov q0, q2 |
79 |
| -; CHECK-NEXT: add r0, sp, #176 |
80 |
| -; CHECK-NEXT: vmov q5, q3 |
81 |
| -; CHECK-NEXT: vstrw.32 q2, [sp, #32] @ 16-byte Spill |
82 |
| -; CHECK-NEXT: vmul.f64 d5, d3, d0 |
83 |
| -; CHECK-NEXT: vstrw.32 q1, [sp, #48] @ 16-byte Spill |
84 |
| -; CHECK-NEXT: vstrw.32 q5, [sp] @ 16-byte Spill |
85 |
| -; CHECK-NEXT: vmul.f64 d4, d1, d3 |
86 |
| -; CHECK-NEXT: vldrw.u32 q1, [r0] |
87 |
| -; CHECK-NEXT: vmov q0, q5 |
88 |
| -; CHECK-NEXT: add r0, sp, #144 |
89 |
| -; CHECK-NEXT: vstrw.32 q1, [sp, #16] @ 16-byte Spill |
90 |
| -; CHECK-NEXT: vmul.f64 d11, d3, d0 |
91 |
| -; CHECK-NEXT: vmul.f64 d10, d1, d3 |
92 |
| -; CHECK-NEXT: vldrw.u32 q0, [r0] |
93 |
| -; CHECK-NEXT: vmul.f64 d7, d9, d12 |
94 |
| -; CHECK-NEXT: vmul.f64 d2, d15, d1 |
95 |
| -; CHECK-NEXT: vmul.f64 d3, d1, d14 |
96 |
| -; CHECK-NEXT: vmul.f64 d6, d13, d9 |
97 |
| -; CHECK-NEXT: vfma.f64 d7, d8, d13 |
98 |
| -; CHECK-NEXT: vfnms.f64 d6, d8, d12 |
99 |
| -; CHECK-NEXT: vldrw.u32 q4, [sp, #32] @ 16-byte Reload |
100 |
| -; CHECK-NEXT: vfma.f64 d3, d0, d15 |
101 |
| -; CHECK-NEXT: vfnms.f64 d2, d0, d14 |
102 |
| -; CHECK-NEXT: vldrw.u32 q0, [sp, #48] @ 16-byte Reload |
103 |
| -; CHECK-NEXT: vfma.f64 d5, d0, d9 |
104 |
| -; CHECK-NEXT: vfnms.f64 d4, d0, d8 |
105 |
| -; CHECK-NEXT: vldrw.u32 q0, [sp, #16] @ 16-byte Reload |
106 |
| -; CHECK-NEXT: vldrw.u32 q4, [sp] @ 16-byte Reload |
107 |
| -; CHECK-NEXT: vfma.f64 d11, d0, d9 |
108 |
| -; CHECK-NEXT: vfnms.f64 d10, d0, d8 |
109 |
| -; CHECK-NEXT: vmov q0, q3 |
110 |
| -; CHECK-NEXT: vmov q3, q5 |
111 |
| -; CHECK-NEXT: add sp, #64 |
112 |
| -; CHECK-NEXT: vpop {d8, d9, d10, d11, d12, d13, d14, d15} |
113 |
| -; CHECK-NEXT: bx lr |
114 |
| -entry: |
115 |
| - %a.real = shufflevector <8 x double> %a, <8 x double> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6> |
116 |
| - %a.imag = shufflevector <8 x double> %a, <8 x double> poison, <4 x i32> <i32 1, i32 3, i32 5, i32 7> |
117 |
| - %b.real = shufflevector <8 x double> %b, <8 x double> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6> |
118 |
| - %b.imag = shufflevector <8 x double> %b, <8 x double> poison, <4 x i32> <i32 1, i32 3, i32 5, i32 7> |
119 |
| - %0 = fmul fast <4 x double> %b.imag, %a.real |
120 |
| - %1 = fmul fast <4 x double> %b.real, %a.imag |
121 |
| - %2 = fadd fast <4 x double> %1, %0 |
122 |
| - %3 = fmul fast <4 x double> %b.real, %a.real |
123 |
| - %4 = fmul fast <4 x double> %a.imag, %b.imag |
124 |
| - %5 = fsub fast <4 x double> %3, %4 |
125 |
| - %interleaved.vec = shufflevector <4 x double> %5, <4 x double> %2, <8 x i32> <i32 0, i32 4, i32 1, i32 5, i32 2, i32 6, i32 3, i32 7> |
126 |
| - ret <8 x double> %interleaved.vec |
127 |
| -} |
0 commit comments