Skip to content

Commit b983b44

Browse files
committed
[CodeGen] Add Pre-commit tests for D146988
Differential Revision: https://reviews.llvm.org/D147659
1 parent 9041e1f commit b983b44

File tree

1 file changed

+305
-0
lines changed

1 file changed

+305
-0
lines changed
Lines changed: 305 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,305 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2+
; RUN: llc < %s --mattr=+complxnum,+neon -o - | FileCheck %s
3+
4+
target triple = "aarch64-arm-none-eabi"
5+
; Expected to not transform
6+
; *p = (a * b);
7+
; return (a * b) * a;
8+
define <4 x float> @mul_triangle(<4 x float> %a, <4 x float> %b, ptr %p) {
9+
; CHECK-LABEL: mul_triangle:
10+
; CHECK: // %bb.0: // %entry
11+
; CHECK-NEXT: ext v2.16b, v0.16b, v0.16b, #8
12+
; CHECK-NEXT: ext v3.16b, v1.16b, v1.16b, #8
13+
; CHECK-NEXT: zip2 v4.2s, v0.2s, v2.2s
14+
; CHECK-NEXT: zip1 v0.2s, v0.2s, v2.2s
15+
; CHECK-NEXT: zip2 v5.2s, v1.2s, v3.2s
16+
; CHECK-NEXT: zip1 v1.2s, v1.2s, v3.2s
17+
; CHECK-NEXT: fmul v6.2s, v5.2s, v4.2s
18+
; CHECK-NEXT: fneg v2.2s, v6.2s
19+
; CHECK-NEXT: fmla v2.2s, v0.2s, v1.2s
20+
; CHECK-NEXT: fmul v3.2s, v4.2s, v1.2s
21+
; CHECK-NEXT: fmla v3.2s, v0.2s, v5.2s
22+
; CHECK-NEXT: fmul v1.2s, v3.2s, v4.2s
23+
; CHECK-NEXT: fmul v5.2s, v3.2s, v0.2s
24+
; CHECK-NEXT: st2 { v2.2s, v3.2s }, [x0]
25+
; CHECK-NEXT: fneg v1.2s, v1.2s
26+
; CHECK-NEXT: fmla v5.2s, v4.2s, v2.2s
27+
; CHECK-NEXT: fmla v1.2s, v0.2s, v2.2s
28+
; CHECK-NEXT: zip1 v0.4s, v1.4s, v5.4s
29+
; CHECK-NEXT: ret
30+
entry:
31+
%strided.vec = shufflevector <4 x float> %a, <4 x float> poison, <2 x i32> <i32 0, i32 2>
32+
%strided.vec35 = shufflevector <4 x float> %a, <4 x float> poison, <2 x i32> <i32 1, i32 3>
33+
%strided.vec37 = shufflevector <4 x float> %b, <4 x float> poison, <2 x i32> <i32 0, i32 2>
34+
%strided.vec38 = shufflevector <4 x float> %b, <4 x float> poison, <2 x i32> <i32 1, i32 3>
35+
%0 = fmul fast <2 x float> %strided.vec37, %strided.vec
36+
%1 = fmul fast <2 x float> %strided.vec38, %strided.vec35
37+
%2 = fsub fast <2 x float> %0, %1
38+
%3 = fmul fast <2 x float> %2, %strided.vec35
39+
%4 = fmul fast <2 x float> %strided.vec38, %strided.vec
40+
%5 = fmul fast <2 x float> %strided.vec35, %strided.vec37
41+
%6 = fadd fast <2 x float> %4, %5
42+
%otheruse = shufflevector <2 x float> %2, <2 x float> %6, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
43+
store <4 x float> %otheruse, ptr %p
44+
%7 = fmul fast <2 x float> %6, %strided.vec
45+
%8 = fadd fast <2 x float> %3, %7
46+
%9 = fmul fast <2 x float> %2, %strided.vec
47+
%10 = fmul fast <2 x float> %6, %strided.vec35
48+
%11 = fsub fast <2 x float> %9, %10
49+
%interleaved.vec = shufflevector <2 x float> %11, <2 x float> %8, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
50+
ret <4 x float> %interleaved.vec
51+
}
52+
53+
; Expected to not transform. Shows that external use prevents deinterleaving.
54+
; *p = (a * b).real();
55+
; return (a * b) * a;
56+
define <4 x float> @mul_triangle_external_use(<4 x float> %a, <4 x float> %b, ptr %p) {
57+
; CHECK-LABEL: mul_triangle_external_use:
58+
; CHECK: // %bb.0: // %entry
59+
; CHECK-NEXT: ext v2.16b, v0.16b, v0.16b, #8
60+
; CHECK-NEXT: ext v3.16b, v1.16b, v1.16b, #8
61+
; CHECK-NEXT: zip2 v4.2s, v0.2s, v2.2s
62+
; CHECK-NEXT: zip1 v0.2s, v0.2s, v2.2s
63+
; CHECK-NEXT: zip1 v5.2s, v1.2s, v3.2s
64+
; CHECK-NEXT: zip2 v1.2s, v1.2s, v3.2s
65+
; CHECK-NEXT: fmul v2.2s, v4.2s, v5.2s
66+
; CHECK-NEXT: fmul v3.2s, v1.2s, v4.2s
67+
; CHECK-NEXT: fmla v2.2s, v0.2s, v1.2s
68+
; CHECK-NEXT: fneg v1.2s, v3.2s
69+
; CHECK-NEXT: fmul v3.2s, v2.2s, v4.2s
70+
; CHECK-NEXT: fmla v1.2s, v0.2s, v5.2s
71+
; CHECK-NEXT: fmul v5.2s, v2.2s, v0.2s
72+
; CHECK-NEXT: str d2, [x0]
73+
; CHECK-NEXT: fneg v3.2s, v3.2s
74+
; CHECK-NEXT: fmla v5.2s, v4.2s, v1.2s
75+
; CHECK-NEXT: fmla v3.2s, v0.2s, v1.2s
76+
; CHECK-NEXT: zip1 v0.4s, v3.4s, v5.4s
77+
; CHECK-NEXT: ret
78+
entry:
79+
%strided.vec = shufflevector <4 x float> %a, <4 x float> poison, <2 x i32> <i32 0, i32 2>
80+
%strided.vec35 = shufflevector <4 x float> %a, <4 x float> poison, <2 x i32> <i32 1, i32 3>
81+
%strided.vec37 = shufflevector <4 x float> %b, <4 x float> poison, <2 x i32> <i32 0, i32 2>
82+
%strided.vec38 = shufflevector <4 x float> %b, <4 x float> poison, <2 x i32> <i32 1, i32 3>
83+
%0 = fmul fast <2 x float> %strided.vec37, %strided.vec
84+
%1 = fmul fast <2 x float> %strided.vec38, %strided.vec35
85+
%2 = fsub fast <2 x float> %0, %1
86+
%3 = fmul fast <2 x float> %2, %strided.vec35
87+
%4 = fmul fast <2 x float> %strided.vec38, %strided.vec
88+
%5 = fmul fast <2 x float> %strided.vec35, %strided.vec37
89+
%6 = fadd fast <2 x float> %4, %5
90+
store <2 x float> %6, ptr %p
91+
%7 = fmul fast <2 x float> %6, %strided.vec
92+
%8 = fadd fast <2 x float> %3, %7
93+
%9 = fmul fast <2 x float> %2, %strided.vec
94+
%10 = fmul fast <2 x float> %6, %strided.vec35
95+
%11 = fsub fast <2 x float> %9, %10
96+
%interleaved.vec = shufflevector <2 x float> %11, <2 x float> %8, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
97+
ret <4 x float> %interleaved.vec
98+
}
99+
100+
; Expected to transform partially (only d * c). Shows that external use of shufflevector does not prevent deinterleaving.
101+
; *p1 = (a * b).real();
102+
; *p2 = (a * b) * c;
103+
; return d * c;
104+
define <4 x float> @multiple_muls_shuffle_external(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x float> %d, ptr %p1, ptr %p2) {
105+
; CHECK-LABEL: multiple_muls_shuffle_external:
106+
; CHECK: // %bb.0: // %entry
107+
; CHECK-NEXT: ext v5.16b, v0.16b, v0.16b, #8
108+
; CHECK-NEXT: ext v6.16b, v1.16b, v1.16b, #8
109+
; CHECK-NEXT: movi v4.2d, #0000000000000000
110+
; CHECK-NEXT: zip2 v7.2s, v0.2s, v5.2s
111+
; CHECK-NEXT: zip1 v0.2s, v0.2s, v5.2s
112+
; CHECK-NEXT: zip1 v16.2s, v1.2s, v6.2s
113+
; CHECK-NEXT: zip2 v1.2s, v1.2s, v6.2s
114+
; CHECK-NEXT: ext v6.16b, v2.16b, v2.16b, #8
115+
; CHECK-NEXT: fcmla v4.4s, v3.4s, v2.4s, #0
116+
; CHECK-NEXT: fmul v5.2s, v16.2s, v7.2s
117+
; CHECK-NEXT: fmul v7.2s, v1.2s, v7.2s
118+
; CHECK-NEXT: fcmla v4.4s, v3.4s, v2.4s, #90
119+
; CHECK-NEXT: fmla v5.2s, v0.2s, v1.2s
120+
; CHECK-NEXT: fneg v1.2s, v7.2s
121+
; CHECK-NEXT: zip1 v7.2s, v2.2s, v6.2s
122+
; CHECK-NEXT: zip2 v6.2s, v2.2s, v6.2s
123+
; CHECK-NEXT: fmla v1.2s, v0.2s, v16.2s
124+
; CHECK-NEXT: fmul v17.2s, v7.2s, v5.2s
125+
; CHECK-NEXT: fmul v0.2s, v6.2s, v5.2s
126+
; CHECK-NEXT: str d1, [x0]
127+
; CHECK-NEXT: fmla v17.2s, v1.2s, v6.2s
128+
; CHECK-NEXT: fneg v16.2s, v0.2s
129+
; CHECK-NEXT: mov v0.16b, v4.16b
130+
; CHECK-NEXT: fmla v16.2s, v1.2s, v7.2s
131+
; CHECK-NEXT: st2 { v16.2s, v17.2s }, [x1]
132+
; CHECK-NEXT: ret
133+
entry:
134+
%strided.vec = shufflevector <4 x float> %a, <4 x float> poison, <2 x i32> <i32 0, i32 2>
135+
%strided.vec88 = shufflevector <4 x float> %a, <4 x float> poison, <2 x i32> <i32 1, i32 3>
136+
%strided.vec90 = shufflevector <4 x float> %b, <4 x float> poison, <2 x i32> <i32 0, i32 2>
137+
%strided.vec91 = shufflevector <4 x float> %b, <4 x float> poison, <2 x i32> <i32 1, i32 3>
138+
%0 = fmul fast <2 x float> %strided.vec91, %strided.vec
139+
%1 = fmul fast <2 x float> %strided.vec90, %strided.vec88
140+
%2 = fadd fast <2 x float> %0, %1
141+
%3 = fmul fast <2 x float> %strided.vec90, %strided.vec
142+
%4 = fmul fast <2 x float> %strided.vec91, %strided.vec88
143+
%5 = fsub fast <2 x float> %3, %4
144+
store <2 x float> %5, ptr %p1
145+
%strided.vec93 = shufflevector <4 x float> %c, <4 x float> poison, <2 x i32> <i32 0, i32 2>
146+
%strided.vec94 = shufflevector <4 x float> %c, <4 x float> poison, <2 x i32> <i32 1, i32 3>
147+
%6 = fmul fast <2 x float> %strided.vec94, %5
148+
%7 = fmul fast <2 x float> %strided.vec93, %2
149+
%8 = fadd fast <2 x float> %6, %7
150+
%9 = fmul fast <2 x float> %strided.vec93, %5
151+
%10 = fmul fast <2 x float> %strided.vec94, %2
152+
%11 = fsub fast <2 x float> %9, %10
153+
%interleaved.vec = shufflevector <2 x float> %11, <2 x float> %8, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
154+
store <4 x float> %interleaved.vec, ptr %p2
155+
%strided.vec96 = shufflevector <4 x float> %d, <4 x float> poison, <2 x i32> <i32 0, i32 2>
156+
%strided.vec97 = shufflevector <4 x float> %d, <4 x float> poison, <2 x i32> <i32 1, i32 3>
157+
%12 = fmul fast <2 x float> %strided.vec96, %strided.vec94
158+
%13 = fmul fast <2 x float> %strided.vec97, %strided.vec93
159+
%14 = fadd fast <2 x float> %13, %12
160+
%15 = fmul fast <2 x float> %strided.vec96, %strided.vec93
161+
%16 = fmul fast <2 x float> %strided.vec97, %strided.vec94
162+
%17 = fsub fast <2 x float> %15, %16
163+
%interleaved.vec98 = shufflevector <2 x float> %17, <2 x float> %14, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
164+
ret <4 x float> %interleaved.vec98
165+
}
166+
167+
; Same as above but data are loaded from memory instead of being passes as arguments.
168+
; Expected to transform partially (only d * c).
169+
; Shows that ld2 is not generated for `c` although it used by both complex `d * c` and non-complex `(a * b) * c` instruction chains.
170+
define <4 x float> @multiple_muls_shuffle_external_with_loads(ptr %ptr_a, ptr %ptr_b, ptr %ptr_c, ptr %ptr_d, ptr %p1, ptr %p2) {
171+
; CHECK-LABEL: multiple_muls_shuffle_external_with_loads:
172+
; CHECK: // %bb.0: // %entry
173+
; CHECK-NEXT: ld2 { v1.2s, v2.2s }, [x0]
174+
; CHECK-NEXT: movi v0.2d, #0000000000000000
175+
; CHECK-NEXT: ld2 { v3.2s, v4.2s }, [x1]
176+
; CHECK-NEXT: fmul v5.2s, v4.2s, v2.2s
177+
; CHECK-NEXT: fmul v7.2s, v3.2s, v2.2s
178+
; CHECK-NEXT: fneg v5.2s, v5.2s
179+
; CHECK-NEXT: fmla v7.2s, v1.2s, v4.2s
180+
; CHECK-NEXT: fmla v5.2s, v1.2s, v3.2s
181+
; CHECK-NEXT: str d5, [x4]
182+
; CHECK-NEXT: ldr q6, [x2]
183+
; CHECK-NEXT: ext v16.16b, v6.16b, v6.16b, #8
184+
; CHECK-NEXT: zip1 v1.2s, v6.2s, v16.2s
185+
; CHECK-NEXT: zip2 v2.2s, v6.2s, v16.2s
186+
; CHECK-NEXT: fmul v4.2s, v1.2s, v7.2s
187+
; CHECK-NEXT: fmul v7.2s, v2.2s, v7.2s
188+
; CHECK-NEXT: fmla v4.2s, v5.2s, v2.2s
189+
; CHECK-NEXT: fneg v3.2s, v7.2s
190+
; CHECK-NEXT: fmla v3.2s, v5.2s, v1.2s
191+
; CHECK-NEXT: st2 { v3.2s, v4.2s }, [x5]
192+
; CHECK-NEXT: ldr q1, [x3]
193+
; CHECK-NEXT: fcmla v0.4s, v1.4s, v6.4s, #0
194+
; CHECK-NEXT: fcmla v0.4s, v1.4s, v6.4s, #90
195+
; CHECK-NEXT: ret
196+
entry:
197+
%a = load <4 x float>, ptr %ptr_a
198+
%strided.vec = shufflevector <4 x float> %a, <4 x float> poison, <2 x i32> <i32 0, i32 2>
199+
%strided.vec88 = shufflevector <4 x float> %a, <4 x float> poison, <2 x i32> <i32 1, i32 3>
200+
%b = load <4 x float>, ptr %ptr_b
201+
%strided.vec90 = shufflevector <4 x float> %b, <4 x float> poison, <2 x i32> <i32 0, i32 2>
202+
%strided.vec91 = shufflevector <4 x float> %b, <4 x float> poison, <2 x i32> <i32 1, i32 3>
203+
%0 = fmul fast <2 x float> %strided.vec91, %strided.vec
204+
%1 = fmul fast <2 x float> %strided.vec90, %strided.vec88
205+
%2 = fadd fast <2 x float> %0, %1
206+
%3 = fmul fast <2 x float> %strided.vec90, %strided.vec
207+
%4 = fmul fast <2 x float> %strided.vec91, %strided.vec88
208+
%5 = fsub fast <2 x float> %3, %4
209+
store <2 x float> %5, ptr %p1
210+
%c = load <4 x float>, ptr %ptr_c
211+
%strided.vec93 = shufflevector <4 x float> %c, <4 x float> poison, <2 x i32> <i32 0, i32 2>
212+
%strided.vec94 = shufflevector <4 x float> %c, <4 x float> poison, <2 x i32> <i32 1, i32 3>
213+
%6 = fmul fast <2 x float> %strided.vec94, %5
214+
%7 = fmul fast <2 x float> %strided.vec93, %2
215+
%8 = fadd fast <2 x float> %6, %7
216+
%9 = fmul fast <2 x float> %strided.vec93, %5
217+
%10 = fmul fast <2 x float> %strided.vec94, %2
218+
%11 = fsub fast <2 x float> %9, %10
219+
%interleaved.vec = shufflevector <2 x float> %11, <2 x float> %8, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
220+
store <4 x float> %interleaved.vec, ptr %p2
221+
%d = load <4 x float>, ptr %ptr_d
222+
%strided.vec96 = shufflevector <4 x float> %d, <4 x float> poison, <2 x i32> <i32 0, i32 2>
223+
%strided.vec97 = shufflevector <4 x float> %d, <4 x float> poison, <2 x i32> <i32 1, i32 3>
224+
%12 = fmul fast <2 x float> %strided.vec96, %strided.vec94
225+
%13 = fmul fast <2 x float> %strided.vec97, %strided.vec93
226+
%14 = fadd fast <2 x float> %13, %12
227+
%15 = fmul fast <2 x float> %strided.vec96, %strided.vec93
228+
%16 = fmul fast <2 x float> %strided.vec97, %strided.vec94
229+
%17 = fsub fast <2 x float> %15, %16
230+
%interleaved.vec98 = shufflevector <2 x float> %17, <2 x float> %14, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
231+
ret <4 x float> %interleaved.vec98
232+
}
233+
234+
; Expected to not transform. Shows that external use prevents deinterleaving whole chain.
235+
; *p1 = (a * b).real();
236+
; *p2 = (a * b) * (d * c);
237+
; return d * c;
238+
define <4 x float> @multiple_muls_mul_external(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x float> %d, ptr %p1, ptr %p2) {
239+
; CHECK-LABEL: multiple_muls_mul_external:
240+
; CHECK: // %bb.0: // %entry
241+
; CHECK-NEXT: ext v5.16b, v0.16b, v0.16b, #8
242+
; CHECK-NEXT: ext v6.16b, v1.16b, v1.16b, #8
243+
; CHECK-NEXT: ext v4.16b, v3.16b, v3.16b, #8
244+
; CHECK-NEXT: ext v7.16b, v2.16b, v2.16b, #8
245+
; CHECK-NEXT: zip2 v16.2s, v0.2s, v5.2s
246+
; CHECK-NEXT: zip2 v17.2s, v1.2s, v6.2s
247+
; CHECK-NEXT: zip1 v0.2s, v0.2s, v5.2s
248+
; CHECK-NEXT: zip1 v1.2s, v1.2s, v6.2s
249+
; CHECK-NEXT: zip1 v18.2s, v2.2s, v7.2s
250+
; CHECK-NEXT: zip2 v2.2s, v2.2s, v7.2s
251+
; CHECK-NEXT: zip2 v7.2s, v3.2s, v4.2s
252+
; CHECK-NEXT: zip1 v3.2s, v3.2s, v4.2s
253+
; CHECK-NEXT: fmul v19.2s, v16.2s, v17.2s
254+
; CHECK-NEXT: fmul v5.2s, v18.2s, v7.2s
255+
; CHECK-NEXT: fmul v6.2s, v2.2s, v7.2s
256+
; CHECK-NEXT: fneg v4.2s, v19.2s
257+
; CHECK-NEXT: fmul v7.2s, v0.2s, v17.2s
258+
; CHECK-NEXT: fmla v5.2s, v3.2s, v2.2s
259+
; CHECK-NEXT: fneg v2.2s, v6.2s
260+
; CHECK-NEXT: fmla v4.2s, v1.2s, v0.2s
261+
; CHECK-NEXT: fmla v7.2s, v1.2s, v16.2s
262+
; CHECK-NEXT: fmla v2.2s, v3.2s, v18.2s
263+
; CHECK-NEXT: fmul v17.2s, v4.2s, v5.2s
264+
; CHECK-NEXT: fmul v0.2s, v7.2s, v5.2s
265+
; CHECK-NEXT: str d4, [x0]
266+
; CHECK-NEXT: fmla v17.2s, v2.2s, v7.2s
267+
; CHECK-NEXT: fneg v16.2s, v0.2s
268+
; CHECK-NEXT: zip1 v0.4s, v2.4s, v5.4s
269+
; CHECK-NEXT: fmla v16.2s, v2.2s, v4.2s
270+
; CHECK-NEXT: st2 { v16.2s, v17.2s }, [x1]
271+
; CHECK-NEXT: ret
272+
entry:
273+
%strided.vec = shufflevector <4 x float> %a, <4 x float> poison, <2 x i32> <i32 0, i32 2>
274+
%strided.vec126 = shufflevector <4 x float> %a, <4 x float> poison, <2 x i32> <i32 1, i32 3>
275+
%strided.vec128 = shufflevector <4 x float> %b, <4 x float> poison, <2 x i32> <i32 0, i32 2>
276+
%strided.vec129 = shufflevector <4 x float> %b, <4 x float> poison, <2 x i32> <i32 1, i32 3>
277+
%0 = fmul nnan ninf contract <2 x float> %strided.vec, %strided.vec129
278+
%1 = fmul nnan ninf contract <2 x float> %strided.vec126, %strided.vec128
279+
%2 = fadd nnan ninf contract <2 x float> %1, %0
280+
%3 = fmul nnan ninf contract <2 x float> %strided.vec, %strided.vec128
281+
%4 = fmul nnan ninf contract <2 x float> %strided.vec126, %strided.vec129
282+
%5 = fsub nnan ninf contract <2 x float> %3, %4
283+
store <2 x float> %5, ptr %p1
284+
%strided.vec131 = shufflevector <4 x float> %c, <4 x float> poison, <2 x i32> <i32 0, i32 2>
285+
%strided.vec132 = shufflevector <4 x float> %c, <4 x float> poison, <2 x i32> <i32 1, i32 3>
286+
%strided.vec134 = shufflevector <4 x float> %d, <4 x float> poison, <2 x i32> <i32 0, i32 2>
287+
%strided.vec135 = shufflevector <4 x float> %d, <4 x float> poison, <2 x i32> <i32 1, i32 3>
288+
%6 = fmul nnan ninf contract <2 x float> %strided.vec131, %strided.vec135
289+
%7 = fmul nnan ninf contract <2 x float> %strided.vec132, %strided.vec134
290+
%8 = fadd nnan ninf contract <2 x float> %7, %6
291+
%9 = fmul nnan ninf contract <2 x float> %strided.vec131, %strided.vec134
292+
%10 = fmul nnan ninf contract <2 x float> %strided.vec132, %strided.vec135
293+
%11 = fsub nnan ninf contract <2 x float> %9, %10
294+
%12 = fmul nnan ninf contract <2 x float> %5, %8
295+
%13 = fmul nnan ninf contract <2 x float> %2, %11
296+
%14 = fadd nnan ninf contract <2 x float> %13, %12
297+
%15 = fmul nnan ninf contract <2 x float> %5, %11
298+
%16 = fmul nnan ninf contract <2 x float> %2, %8
299+
%17 = fsub nnan ninf contract <2 x float> %15, %16
300+
%interleaved.vec = shufflevector <2 x float> %17, <2 x float> %14, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
301+
store <4 x float> %interleaved.vec, ptr %p2
302+
%interleaved.vec136 = shufflevector <2 x float> %11, <2 x float> %8, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
303+
ret <4 x float> %interleaved.vec136
304+
}
305+

0 commit comments

Comments
 (0)