[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / legalize-itofp.mir
blob8c6a30aaed048366e5d30d854a35a635af23c0fd
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -O0 -run-pass=legalizer %s -o - | FileCheck %s
4 --- |
5   target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
6   target triple = "aarch64--"
8   define void @test_sitofp_s32_s32() { ret void }
9   define void @test_uitofp_s32_s32() { ret void }
10   define void @test_sitofp_s32_s64() { ret void }
11   define void @test_uitofp_s32_s64() { ret void }
13   define void @test_sitofp_s64_s32() { ret void }
14   define void @test_uitofp_s64_s32() { ret void }
15   define void @test_sitofp_s64_s64() { ret void }
16   define void @test_uitofp_s64_s64() { ret void }
18   define void @test_sitofp_s32_s1() { ret void }
19   define void @test_uitofp_s32_s1() { ret void }
21   define void @test_sitofp_s64_s8() { ret void }
22   define void @test_uitofp_s64_s8() { ret void }
24   define void @test_sitofp_v4s32() { ret void }
25   define void @test_uitofp_v4s32() { ret void }
27   define void @test_uitofp_v2s64_v2i1() { ret void }
28   define void @test_sitofp_v2s64_v2i1() { ret void }
30   define void @test_sitofp_s32_s16() { ret void }
31   define void @test_uitofp_s32_s16() { ret void }
32 ...
34 ---
35 name:            test_sitofp_s32_s32
36 body: |
37   bb.0:
38     liveins: $w0
39     ; CHECK-LABEL: name: test_sitofp_s32_s32
40     ; CHECK: liveins: $w0
41     ; CHECK-NEXT: {{  $}}
42     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
43     ; CHECK-NEXT: [[SITOFP:%[0-9]+]]:_(s32) = G_SITOFP [[COPY]](s32)
44     ; CHECK-NEXT: $w0 = COPY [[SITOFP]](s32)
45     %0:_(s32) = COPY $w0
46     %1:_(s32) = G_SITOFP %0
47     $w0 = COPY %1
48 ...
50 ---
51 name:            test_uitofp_s32_s32
52 body: |
53   bb.0:
54     liveins: $w0
55     ; CHECK-LABEL: name: test_uitofp_s32_s32
56     ; CHECK: liveins: $w0
57     ; CHECK-NEXT: {{  $}}
58     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
59     ; CHECK-NEXT: [[UITOFP:%[0-9]+]]:_(s32) = G_UITOFP [[COPY]](s32)
60     ; CHECK-NEXT: $w0 = COPY [[UITOFP]](s32)
61     %0:_(s32) = COPY $w0
62     %1:_(s32) = G_UITOFP %0
63     $w0 = COPY %1
64 ...
66 ---
67 name:            test_sitofp_s32_s64
68 body: |
69   bb.0:
70     liveins: $x0
71     ; CHECK-LABEL: name: test_sitofp_s32_s64
72     ; CHECK: liveins: $x0
73     ; CHECK-NEXT: {{  $}}
74     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
75     ; CHECK-NEXT: [[SITOFP:%[0-9]+]]:_(s32) = G_SITOFP [[COPY]](s64)
76     ; CHECK-NEXT: $w0 = COPY [[SITOFP]](s32)
77     %0:_(s64) = COPY $x0
78     %1:_(s32) = G_SITOFP %0
79     $w0 = COPY %1
80 ...
82 ---
83 name:            test_uitofp_s32_s64
84 body: |
85   bb.0:
86     liveins: $x0
87     ; CHECK-LABEL: name: test_uitofp_s32_s64
88     ; CHECK: liveins: $x0
89     ; CHECK-NEXT: {{  $}}
90     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
91     ; CHECK-NEXT: [[UITOFP:%[0-9]+]]:_(s32) = G_UITOFP [[COPY]](s64)
92     ; CHECK-NEXT: $w0 = COPY [[UITOFP]](s32)
93     %0:_(s64) = COPY $x0
94     %1:_(s32) = G_UITOFP %0
95     $w0 = COPY %1
96 ...
98 ---
99 name:            test_sitofp_s64_s32
100 body: |
101   bb.0:
102     liveins: $w0
103     ; CHECK-LABEL: name: test_sitofp_s64_s32
104     ; CHECK: liveins: $w0
105     ; CHECK-NEXT: {{  $}}
106     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
107     ; CHECK-NEXT: [[SITOFP:%[0-9]+]]:_(s64) = G_SITOFP [[COPY]](s32)
108     ; CHECK-NEXT: $x0 = COPY [[SITOFP]](s64)
109     %0:_(s32) = COPY $w0
110     %1:_(s64) = G_SITOFP %0
111     $x0 = COPY %1
115 name:            test_uitofp_s64_s32
116 body: |
117   bb.0:
118     liveins: $w0
119     ; CHECK-LABEL: name: test_uitofp_s64_s32
120     ; CHECK: liveins: $w0
121     ; CHECK-NEXT: {{  $}}
122     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
123     ; CHECK-NEXT: [[UITOFP:%[0-9]+]]:_(s64) = G_UITOFP [[COPY]](s32)
124     ; CHECK-NEXT: $x0 = COPY [[UITOFP]](s64)
125     %0:_(s32) = COPY $w0
126     %1:_(s64) = G_UITOFP %0
127     $x0 = COPY %1
131 name:            test_sitofp_s64_s64
132 body: |
133   bb.0:
134     liveins: $x0
135     ; CHECK-LABEL: name: test_sitofp_s64_s64
136     ; CHECK: liveins: $x0
137     ; CHECK-NEXT: {{  $}}
138     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
139     ; CHECK-NEXT: [[SITOFP:%[0-9]+]]:_(s64) = G_SITOFP [[COPY]](s64)
140     ; CHECK-NEXT: $x0 = COPY [[SITOFP]](s64)
141     %0:_(s64) = COPY $x0
142     %1:_(s64) = G_SITOFP %0
143     $x0 = COPY %1
147 name:            test_uitofp_s64_s64
148 body: |
149   bb.0:
150     liveins: $x0
151     ; CHECK-LABEL: name: test_uitofp_s64_s64
152     ; CHECK: liveins: $x0
153     ; CHECK-NEXT: {{  $}}
154     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
155     ; CHECK-NEXT: [[UITOFP:%[0-9]+]]:_(s64) = G_UITOFP [[COPY]](s64)
156     ; CHECK-NEXT: $x0 = COPY [[UITOFP]](s64)
157     %0:_(s64) = COPY $x0
158     %1:_(s64) = G_UITOFP %0
159     $x0 = COPY %1
164 name:            test_sitofp_s32_s1
165 body: |
166   bb.0:
167     liveins: $w0
168     ; CHECK-LABEL: name: test_sitofp_s32_s1
169     ; CHECK: liveins: $w0
170     ; CHECK-NEXT: {{  $}}
171     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
172     ; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY]], 1
173     ; CHECK-NEXT: [[SITOFP:%[0-9]+]]:_(s32) = G_SITOFP [[SEXT_INREG]](s32)
174     ; CHECK-NEXT: $w0 = COPY [[SITOFP]](s32)
175     %0:_(s32) = COPY $w0
176     %1:_(s1) = G_TRUNC %0
177     %2:_(s32) = G_SITOFP %1
178     $w0 = COPY %2
182 name:            test_uitofp_s32_s1
183 body: |
184   bb.0:
185     liveins: $w0
186     ; CHECK-LABEL: name: test_uitofp_s32_s1
187     ; CHECK: liveins: $w0
188     ; CHECK-NEXT: {{  $}}
189     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
190     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
191     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
192     ; CHECK-NEXT: [[UITOFP:%[0-9]+]]:_(s32) = G_UITOFP [[AND]](s32)
193     ; CHECK-NEXT: $w0 = COPY [[UITOFP]](s32)
194     %0:_(s32) = COPY $w0
195     %1:_(s1) = G_TRUNC %0
196     %2:_(s32) = G_UITOFP %1
197     $w0 = COPY %2
201 name:            test_sitofp_s64_s8
202 body: |
203   bb.0:
204     liveins: $w0
205     ; CHECK-LABEL: name: test_sitofp_s64_s8
206     ; CHECK: liveins: $w0
207     ; CHECK-NEXT: {{  $}}
208     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
209     ; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY]], 8
210     ; CHECK-NEXT: [[SITOFP:%[0-9]+]]:_(s64) = G_SITOFP [[SEXT_INREG]](s32)
211     ; CHECK-NEXT: $x0 = COPY [[SITOFP]](s64)
212     %0:_(s32) = COPY $w0
213     %1:_(s8) = G_TRUNC %0
214     %2:_(s64) = G_SITOFP %1
215     $x0 = COPY %2
219 name:            test_uitofp_s64_s8
220 body: |
221   bb.0:
222     liveins: $w0
223     ; CHECK-LABEL: name: test_uitofp_s64_s8
224     ; CHECK: liveins: $w0
225     ; CHECK-NEXT: {{  $}}
226     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
227     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
228     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
229     ; CHECK-NEXT: [[UITOFP:%[0-9]+]]:_(s64) = G_UITOFP [[AND]](s32)
230     ; CHECK-NEXT: $x0 = COPY [[UITOFP]](s64)
231     %0:_(s32) = COPY $w0
232     %1:_(s8) = G_TRUNC %0
233     %2:_(s64) = G_UITOFP %1
234     $x0 = COPY %2
238 name:            test_sitofp_v4s32
239 body: |
240   bb.0:
241     liveins: $q0
242     ; CHECK-LABEL: name: test_sitofp_v4s32
243     ; CHECK: liveins: $q0
244     ; CHECK-NEXT: {{  $}}
245     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0
246     ; CHECK-NEXT: [[SITOFP:%[0-9]+]]:_(<4 x s32>) = G_SITOFP [[SITOFP]](<4 x s32>)
247     ; CHECK-NEXT: $q0 = COPY [[SITOFP]](<4 x s32>)
248     %0:_(<4 x s32>) = COPY $q0
249     %1:_(<4 x s32>) = G_SITOFP %1
250     $q0 = COPY %1
254 name:            test_uitofp_v4s32
255 body: |
256   bb.0:
257     liveins: $q0
258     ; CHECK-LABEL: name: test_uitofp_v4s32
259     ; CHECK: liveins: $q0
260     ; CHECK-NEXT: {{  $}}
261     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0
262     ; CHECK-NEXT: [[UITOFP:%[0-9]+]]:_(<4 x s32>) = G_UITOFP [[UITOFP]](<4 x s32>)
263     ; CHECK-NEXT: $q0 = COPY [[UITOFP]](<4 x s32>)
264     %0:_(<4 x s32>) = COPY $q0
265     %1:_(<4 x s32>) = G_UITOFP %1
266     $q0 = COPY %1
270 name:            test_uitofp_v2s64_v2i1
271 body: |
272   bb.0:
273     liveins: $q0
274     ; CHECK-LABEL: name: test_uitofp_v2s64_v2i1
275     ; CHECK: liveins: $q0
276     ; CHECK-NEXT: {{  $}}
277     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
278     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64)
279     ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s64) = G_IMPLICIT_DEF
280     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY [[DEF]](s64)
281     ; CHECK-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[DEF]](s64), [[COPY]](s64)
282     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(<2 x s64>) = G_AND [[BUILD_VECTOR1]], [[BUILD_VECTOR]]
283     ; CHECK-NEXT: [[UITOFP:%[0-9]+]]:_(<2 x s64>) = G_UITOFP [[AND]](<2 x s64>)
284     ; CHECK-NEXT: $q0 = COPY [[UITOFP]](<2 x s64>)
285     %0:_(<2 x s1>) = G_IMPLICIT_DEF
286     %1:_(<2 x s64>) = G_UITOFP %0
287     $q0 = COPY %1
291 name:            test_sitofp_v2s64_v2i1
292 body: |
293   bb.0:
294     liveins: $q0
295     ; CHECK-LABEL: name: test_sitofp_v2s64_v2i1
296     ; CHECK: liveins: $q0
297     ; CHECK-NEXT: {{  $}}
298     ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s64) = G_IMPLICIT_DEF
299     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY [[DEF]](s64)
300     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[DEF]](s64), [[COPY]](s64)
301     ; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(<2 x s64>) = G_SEXT_INREG [[BUILD_VECTOR]], 1
302     ; CHECK-NEXT: [[SITOFP:%[0-9]+]]:_(<2 x s64>) = G_SITOFP [[SEXT_INREG]](<2 x s64>)
303     ; CHECK-NEXT: $q0 = COPY [[SITOFP]](<2 x s64>)
304     %0:_(<2 x s1>) = G_IMPLICIT_DEF
305     %1:_(<2 x s64>) = G_SITOFP %0
306     $q0 = COPY %1
310 name:            test_sitofp_s32_s16
311 body: |
312   bb.0:
313     liveins: $w0
314     ; CHECK-LABEL: name: test_sitofp_s32_s16
315     ; CHECK: liveins: $w0
316     ; CHECK-NEXT: {{  $}}
317     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
318     ; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY]], 16
319     ; CHECK-NEXT: [[SITOFP:%[0-9]+]]:_(s32) = G_SITOFP [[SEXT_INREG]](s32)
320     ; CHECK-NEXT: $w0 = COPY [[SITOFP]](s32)
321     %0:_(s32) = COPY $w0
322     %1:_(s16) = G_TRUNC %0
323     %2:_(s32) = G_SITOFP %1
324     $w0 = COPY %2
328 name:            test_uitofp_s32_s16
329 body: |
330   bb.0:
331     liveins: $w0
332     ; CHECK-LABEL: name: test_uitofp_s32_s16
333     ; CHECK: liveins: $w0
334     ; CHECK-NEXT: {{  $}}
335     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
336     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
337     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
338     ; CHECK-NEXT: [[UITOFP:%[0-9]+]]:_(s32) = G_UITOFP [[AND]](s32)
339     ; CHECK-NEXT: $w0 = COPY [[UITOFP]](s32)
340     %0:_(s32) = COPY $w0
341     %1:_(s16) = G_TRUNC %0
342     %2:_(s32) = G_UITOFP %1
343     $w0 = COPY %2