[OptTable] Fix typo VALUE => VALUES (NFCI) (#121523)
[llvm-project.git] / llvm / test / CodeGen / X86 / GlobalISel / x86_64-legalize-zext.mir
blobe3074c3e01f5475fccd2d3179521ebcd0ef58a4b
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=x86_64-linux-gnu -run-pass=legalizer -verify-machineinstrs %s -o - | FileCheck %s
4 --- |
6   define i8 @zext_i1_to_i8(i1 %val) {
7     %res = zext i1 %val to i8
8     ret i8 %res
9   }
11   define i16 @zext_i1_to_i16(i1 %val) {
12     %res = zext i1 %val to i16
13     ret i16 %res
14   }
16   define i32 @zext_i1_to_i32(i1 %val) {
17     %res = zext i1 %val to i32
18     ret i32 %res
19   }
21   define i64 @zext_i1_to_i64(i1 %val) {
22     %res = zext i1 %val to i64
23     ret i64 %res
24   }
26   define i16 @zext_i8_to_i16(i8 %val) {
27     %res = zext i8 %val to i16
28     ret i16 %res
29   }
31   define i32 @zext_i8_to_i32(i8 %val) {
32     %res = zext i8 %val to i32
33     ret i32 %res
34   }
36   define i64 @zext_i8_to_i64(i8 %val) {
37     %res = zext i8 %val to i64
38     ret i64 %res
39   }
41   define i32 @zext_i16_to_i32(i16 %val) {
42     %res = zext i16 %val to i32
43     ret i32 %res
44   }
46   define i64 @zext_i16_to_i64(i16 %val) {
47     %res = zext i16 %val to i64
48     ret i64 %res
49   }
51   define i64 @zext_i32_to_i64(i32 %val) {
52     %res = zext i32 %val to i64
53     ret i64 %res
54   }
56 ...
57 ---
58 name:            zext_i1_to_i8
59 alignment:       16
60 tracksRegLiveness: true
61 registers:
62   - { id: 0, class: _ }
63   - { id: 1, class: _ }
64   - { id: 2, class: _ }
65 body:             |
66   bb.1 (%ir-block.0):
67     liveins: $edi
69     ; CHECK-LABEL: name: zext_i1_to_i8
70     ; CHECK: liveins: $edi
71     ; CHECK-NEXT: {{  $}}
72     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $edi
73     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[COPY]](s32)
74     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 1
75     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s8) = G_AND [[TRUNC]], [[C]]
76     ; CHECK-NEXT: $al = COPY [[AND]](s8)
77     ; CHECK-NEXT: RET 0, implicit $al
78     %1:_(s32) = COPY $edi
79     %0:_(s1) = G_TRUNC %1(s32)
80     %2:_(s8) = G_ZEXT %0(s1)
81     $al = COPY %2(s8)
82     RET 0, implicit $al
84 ...
85 ---
86 name:            zext_i1_to_i16
87 alignment:       16
88 tracksRegLiveness: true
89 registers:
90   - { id: 0, class: _ }
91   - { id: 1, class: _ }
92   - { id: 2, class: _ }
93 body:             |
94   bb.1 (%ir-block.0):
95     liveins: $edi
97     ; CHECK-LABEL: name: zext_i1_to_i16
98     ; CHECK: liveins: $edi
99     ; CHECK-NEXT: {{  $}}
100     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $edi
101     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
102     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 1
103     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC]], [[C]]
104     ; CHECK-NEXT: $ax = COPY [[AND]](s16)
105     ; CHECK-NEXT: RET 0, implicit $ax
106     %1:_(s32) = COPY $edi
107     %0:_(s1) = G_TRUNC %1(s32)
108     %2:_(s16) = G_ZEXT %0(s1)
109     $ax = COPY %2(s16)
110     RET 0, implicit $ax
114 name:            zext_i1_to_i32
115 alignment:       16
116 tracksRegLiveness: true
117 registers:
118   - { id: 0, class: _ }
119   - { id: 1, class: _ }
120   - { id: 2, class: _ }
121 body:             |
122   bb.1 (%ir-block.0):
123     liveins: $edi
125     ; CHECK-LABEL: name: zext_i1_to_i32
126     ; CHECK: liveins: $edi
127     ; CHECK-NEXT: {{  $}}
128     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $edi
129     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
130     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
131     ; CHECK-NEXT: $eax = COPY [[AND]](s32)
132     ; CHECK-NEXT: RET 0, implicit $eax
133     %1:_(s32) = COPY $edi
134     %0:_(s1) = G_TRUNC %1(s32)
135     %2:_(s32) = G_ZEXT %0(s1)
136     $eax = COPY %2(s32)
137     RET 0, implicit $eax
141 name:            zext_i1_to_i64
142 alignment:       16
143 tracksRegLiveness: true
144 registers:
145   - { id: 0, class: _ }
146   - { id: 1, class: _ }
147   - { id: 2, class: _ }
148 body:             |
149   bb.1 (%ir-block.0):
150     liveins: $edi
152     ; CHECK-LABEL: name: zext_i1_to_i64
153     ; CHECK: liveins: $edi
154     ; CHECK-NEXT: {{  $}}
155     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $edi
156     ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[COPY]](s32)
157     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
158     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[ANYEXT]], [[C]]
159     ; CHECK-NEXT: $rax = COPY [[AND]](s64)
160     ; CHECK-NEXT: RET 0, implicit $rax
161     %1:_(s32) = COPY $edi
162     %0:_(s1) = G_TRUNC %1(s32)
163     %2:_(s64) = G_ZEXT %0(s1)
164     $rax = COPY %2(s64)
165     RET 0, implicit $rax
169 name:            zext_i8_to_i16
170 alignment:       16
171 tracksRegLiveness: true
172 registers:
173   - { id: 0, class: _ }
174   - { id: 1, class: _ }
175   - { id: 2, class: _ }
176 body:             |
177   bb.1 (%ir-block.0):
178     liveins: $edi
180     ; CHECK-LABEL: name: zext_i8_to_i16
181     ; CHECK: liveins: $edi
182     ; CHECK-NEXT: {{  $}}
183     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $edi
184     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
185     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 255
186     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC]], [[C]]
187     ; CHECK-NEXT: $ax = COPY [[AND]](s16)
188     ; CHECK-NEXT: RET 0, implicit $ax
189     %1:_(s32) = COPY $edi
190     %0:_(s8) = G_TRUNC %1(s32)
191     %2:_(s16) = G_ZEXT %0(s8)
192     $ax = COPY %2(s16)
193     RET 0, implicit $ax
197 name:            zext_i8_to_i32
198 alignment:       16
199 tracksRegLiveness: true
200 registers:
201   - { id: 0, class: _ }
202   - { id: 1, class: _ }
203   - { id: 2, class: _ }
204 body:             |
205   bb.1 (%ir-block.0):
206     liveins: $edi
208     ; CHECK-LABEL: name: zext_i8_to_i32
209     ; CHECK: liveins: $edi
210     ; CHECK-NEXT: {{  $}}
211     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $edi
212     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
213     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
214     ; CHECK-NEXT: $eax = COPY [[AND]](s32)
215     ; CHECK-NEXT: RET 0, implicit $eax
216     %1:_(s32) = COPY $edi
217     %0:_(s8) = G_TRUNC %1(s32)
218     %2:_(s32) = G_ZEXT %0(s8)
219     $eax = COPY %2(s32)
220     RET 0, implicit $eax
224 name:            zext_i8_to_i64
225 alignment:       16
226 tracksRegLiveness: true
227 registers:
228   - { id: 0, class: _ }
229   - { id: 1, class: _ }
230   - { id: 2, class: _ }
231 body:             |
232   bb.1 (%ir-block.0):
233     liveins: $edi
235     ; CHECK-LABEL: name: zext_i8_to_i64
236     ; CHECK: liveins: $edi
237     ; CHECK-NEXT: {{  $}}
238     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $edi
239     ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[COPY]](s32)
240     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 255
241     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[ANYEXT]], [[C]]
242     ; CHECK-NEXT: $rax = COPY [[AND]](s64)
243     ; CHECK-NEXT: RET 0, implicit $rax
244     %1:_(s32) = COPY $edi
245     %0:_(s8) = G_TRUNC %1(s32)
246     %2:_(s64) = G_ZEXT %0(s8)
247     $rax = COPY %2(s64)
248     RET 0, implicit $rax
252 name:            zext_i16_to_i32
253 alignment:       16
254 tracksRegLiveness: true
255 registers:
256   - { id: 0, class: _ }
257   - { id: 1, class: _ }
258   - { id: 2, class: _ }
259 body:             |
260   bb.1 (%ir-block.0):
261     liveins: $edi
263     ; CHECK-LABEL: name: zext_i16_to_i32
264     ; CHECK: liveins: $edi
265     ; CHECK-NEXT: {{  $}}
266     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $edi
267     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
268     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
269     ; CHECK-NEXT: $eax = COPY [[AND]](s32)
270     ; CHECK-NEXT: RET 0, implicit $eax
271     %1:_(s32) = COPY $edi
272     %0:_(s16) = G_TRUNC %1(s32)
273     %2:_(s32) = G_ZEXT %0(s16)
274     $eax = COPY %2(s32)
275     RET 0, implicit $eax
279 name:            zext_i16_to_i64
280 alignment:       16
281 tracksRegLiveness: true
282 registers:
283   - { id: 0, class: _ }
284   - { id: 1, class: _ }
285   - { id: 2, class: _ }
286 body:             |
287   bb.1 (%ir-block.0):
288     liveins: $edi
290     ; CHECK-LABEL: name: zext_i16_to_i64
291     ; CHECK: liveins: $edi
292     ; CHECK-NEXT: {{  $}}
293     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $edi
294     ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[COPY]](s32)
295     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 65535
296     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[ANYEXT]], [[C]]
297     ; CHECK-NEXT: $rax = COPY [[AND]](s64)
298     ; CHECK-NEXT: RET 0, implicit $rax
299     %1:_(s32) = COPY $edi
300     %0:_(s16) = G_TRUNC %1(s32)
301     %2:_(s64) = G_ZEXT %0(s16)
302     $rax = COPY %2(s64)
303     RET 0, implicit $rax
307 name:            zext_i32_to_i64
308 alignment:       16
309 tracksRegLiveness: true
310 registers:
311   - { id: 0, class: _ }
312   - { id: 1, class: _ }
313 body:             |
314   bb.1 (%ir-block.0):
315     liveins: $edi
317     ; CHECK-LABEL: name: zext_i32_to_i64
318     ; CHECK: liveins: $edi
319     ; CHECK-NEXT: {{  $}}
320     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $edi
321     ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[COPY]](s32)
322     ; CHECK-NEXT: $rax = COPY [[ZEXT]](s64)
323     ; CHECK-NEXT: RET 0, implicit $rax
324     %0:_(s32) = COPY $edi
325     %1:_(s64) = G_ZEXT %0(s32)
326     $rax = COPY %1(s64)
327     RET 0, implicit $rax