• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
3
4--- |
5
6  define i8 @zext_i1_to_i8(i1 %val) {
7    %res = zext i1 %val to i8
8    ret i8 %res
9  }
10
11  define i16 @zext_i1_to_i16(i1 %val) {
12    %res = zext i1 %val to i16
13    ret i16 %res
14  }
15
16  define i32 @zext_i1_to_i32(i1 %val) {
17    %res = zext i1 %val to i32
18    ret i32 %res
19  }
20
21  define i64 @zext_i1_to_i64(i1 %val) {
22    %res = zext i1 %val to i64
23    ret i64 %res
24  }
25
26  define i16 @zext_i8_to_i16(i8 %val) {
27    %res = zext i8 %val to i16
28    ret i16 %res
29  }
30
31  define i32 @zext_i8_to_i32(i8 %val) {
32    %res = zext i8 %val to i32
33    ret i32 %res
34  }
35
36  define i64 @zext_i8_to_i64(i8 %val) {
37    %res = zext i8 %val to i64
38    ret i64 %res
39  }
40
41  define i32 @zext_i16_to_i32(i16 %val) {
42    %res = zext i16 %val to i32
43    ret i32 %res
44  }
45
46  define i64 @zext_i16_to_i64(i16 %val) {
47    %res = zext i16 %val to i64
48    ret i64 %res
49  }
50
51  define i64 @zext_i32_to_i64(i32 %val) {
52    %res = zext i32 %val to i64
53    ret i64 %res
54  }
55
56...
57---
58name:            zext_i1_to_i8
59alignment:       16
60tracksRegLiveness: true
61registers:
62  - { id: 0, class: _ }
63  - { id: 1, class: _ }
64  - { id: 2, class: _ }
65body:             |
66  bb.1 (%ir-block.0):
67    liveins: $edi
68
69    ; CHECK-LABEL: name: zext_i1_to_i8
70    ; CHECK: liveins: $edi
71    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $edi
72    ; CHECK: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 1
73    ; CHECK: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[COPY]](s32)
74    ; CHECK: [[AND:%[0-9]+]]:_(s8) = G_AND [[TRUNC]], [[C]]
75    ; CHECK: $al = COPY [[AND]](s8)
76    ; CHECK: RET 0, implicit $al
77    %1:_(s32) = COPY $edi
78    %0:_(s1) = G_TRUNC %1(s32)
79    %2:_(s8) = G_ZEXT %0(s1)
80    $al = COPY %2(s8)
81    RET 0, implicit $al
82
83...
84---
85name:            zext_i1_to_i16
86alignment:       16
87tracksRegLiveness: true
88registers:
89  - { id: 0, class: _ }
90  - { id: 1, class: _ }
91  - { id: 2, class: _ }
92body:             |
93  bb.1 (%ir-block.0):
94    liveins: $edi
95
96    ; CHECK-LABEL: name: zext_i1_to_i16
97    ; CHECK: liveins: $edi
98    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $edi
99    ; CHECK: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 1
100    ; CHECK: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
101    ; CHECK: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC]], [[C]]
102    ; CHECK: $ax = COPY [[AND]](s16)
103    ; CHECK: RET 0, implicit $ax
104    %1:_(s32) = COPY $edi
105    %0:_(s1) = G_TRUNC %1(s32)
106    %2:_(s16) = G_ZEXT %0(s1)
107    $ax = COPY %2(s16)
108    RET 0, implicit $ax
109
110...
111---
112name:            zext_i1_to_i32
113alignment:       16
114tracksRegLiveness: true
115registers:
116  - { id: 0, class: _ }
117  - { id: 1, class: _ }
118  - { id: 2, class: _ }
119body:             |
120  bb.1 (%ir-block.0):
121    liveins: $edi
122
123    ; CHECK-LABEL: name: zext_i1_to_i32
124    ; CHECK: liveins: $edi
125    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $edi
126    ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
127    ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY [[COPY]](s32)
128    ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C]]
129    ; CHECK: $eax = COPY [[AND]](s32)
130    ; CHECK: RET 0, implicit $eax
131    %1:_(s32) = COPY $edi
132    %0:_(s1) = G_TRUNC %1(s32)
133    %2:_(s32) = G_ZEXT %0(s1)
134    $eax = COPY %2(s32)
135    RET 0, implicit $eax
136
137...
138---
139name:            zext_i1_to_i64
140alignment:       16
141tracksRegLiveness: true
142registers:
143  - { id: 0, class: _ }
144  - { id: 1, class: _ }
145  - { id: 2, class: _ }
146body:             |
147  bb.1 (%ir-block.0):
148    liveins: $edi
149
150    ; CHECK-LABEL: name: zext_i1_to_i64
151    ; CHECK: liveins: $edi
152    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $edi
153    ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
154    ; CHECK: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[COPY]](s32)
155    ; CHECK: [[AND:%[0-9]+]]:_(s64) = G_AND [[ANYEXT]], [[C]]
156    ; CHECK: $rax = COPY [[AND]](s64)
157    ; CHECK: RET 0, implicit $rax
158    %1:_(s32) = COPY $edi
159    %0:_(s1) = G_TRUNC %1(s32)
160    %2:_(s64) = G_ZEXT %0(s1)
161    $rax = COPY %2(s64)
162    RET 0, implicit $rax
163
164...
165---
166name:            zext_i8_to_i16
167alignment:       16
168tracksRegLiveness: true
169registers:
170  - { id: 0, class: _ }
171  - { id: 1, class: _ }
172  - { id: 2, class: _ }
173body:             |
174  bb.1 (%ir-block.0):
175    liveins: $edi
176
177    ; CHECK-LABEL: name: zext_i8_to_i16
178    ; CHECK: liveins: $edi
179    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $edi
180    ; CHECK: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 255
181    ; CHECK: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
182    ; CHECK: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC]], [[C]]
183    ; CHECK: $ax = COPY [[AND]](s16)
184    ; CHECK: RET 0, implicit $ax
185    %1:_(s32) = COPY $edi
186    %0:_(s8) = G_TRUNC %1(s32)
187    %2:_(s16) = G_ZEXT %0(s8)
188    $ax = COPY %2(s16)
189    RET 0, implicit $ax
190
191...
192---
193name:            zext_i8_to_i32
194alignment:       16
195tracksRegLiveness: true
196registers:
197  - { id: 0, class: _ }
198  - { id: 1, class: _ }
199  - { id: 2, class: _ }
200body:             |
201  bb.1 (%ir-block.0):
202    liveins: $edi
203
204    ; CHECK-LABEL: name: zext_i8_to_i32
205    ; CHECK: liveins: $edi
206    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $edi
207    ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
208    ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY [[COPY]](s32)
209    ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C]]
210    ; CHECK: $eax = COPY [[AND]](s32)
211    ; CHECK: RET 0, implicit $eax
212    %1:_(s32) = COPY $edi
213    %0:_(s8) = G_TRUNC %1(s32)
214    %2:_(s32) = G_ZEXT %0(s8)
215    $eax = COPY %2(s32)
216    RET 0, implicit $eax
217
218...
219---
220name:            zext_i8_to_i64
221alignment:       16
222tracksRegLiveness: true
223registers:
224  - { id: 0, class: _ }
225  - { id: 1, class: _ }
226  - { id: 2, class: _ }
227body:             |
228  bb.1 (%ir-block.0):
229    liveins: $edi
230
231    ; CHECK-LABEL: name: zext_i8_to_i64
232    ; CHECK: liveins: $edi
233    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $edi
234    ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 255
235    ; CHECK: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[COPY]](s32)
236    ; CHECK: [[AND:%[0-9]+]]:_(s64) = G_AND [[ANYEXT]], [[C]]
237    ; CHECK: $rax = COPY [[AND]](s64)
238    ; CHECK: RET 0, implicit $rax
239    %1:_(s32) = COPY $edi
240    %0:_(s8) = G_TRUNC %1(s32)
241    %2:_(s64) = G_ZEXT %0(s8)
242    $rax = COPY %2(s64)
243    RET 0, implicit $rax
244
245...
246---
247name:            zext_i16_to_i32
248alignment:       16
249tracksRegLiveness: true
250registers:
251  - { id: 0, class: _ }
252  - { id: 1, class: _ }
253  - { id: 2, class: _ }
254body:             |
255  bb.1 (%ir-block.0):
256    liveins: $edi
257
258    ; CHECK-LABEL: name: zext_i16_to_i32
259    ; CHECK: liveins: $edi
260    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $edi
261    ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
262    ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY [[COPY]](s32)
263    ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C]]
264    ; CHECK: $eax = COPY [[AND]](s32)
265    ; CHECK: RET 0, implicit $eax
266    %1:_(s32) = COPY $edi
267    %0:_(s16) = G_TRUNC %1(s32)
268    %2:_(s32) = G_ZEXT %0(s16)
269    $eax = COPY %2(s32)
270    RET 0, implicit $eax
271
272...
273---
274name:            zext_i16_to_i64
275alignment:       16
276tracksRegLiveness: true
277registers:
278  - { id: 0, class: _ }
279  - { id: 1, class: _ }
280  - { id: 2, class: _ }
281body:             |
282  bb.1 (%ir-block.0):
283    liveins: $edi
284
285    ; CHECK-LABEL: name: zext_i16_to_i64
286    ; CHECK: liveins: $edi
287    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $edi
288    ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 65535
289    ; CHECK: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[COPY]](s32)
290    ; CHECK: [[AND:%[0-9]+]]:_(s64) = G_AND [[ANYEXT]], [[C]]
291    ; CHECK: $rax = COPY [[AND]](s64)
292    ; CHECK: RET 0, implicit $rax
293    %1:_(s32) = COPY $edi
294    %0:_(s16) = G_TRUNC %1(s32)
295    %2:_(s64) = G_ZEXT %0(s16)
296    $rax = COPY %2(s64)
297    RET 0, implicit $rax
298
299...
300---
301name:            zext_i32_to_i64
302alignment:       16
303tracksRegLiveness: true
304registers:
305  - { id: 0, class: _ }
306  - { id: 1, class: _ }
307body:             |
308  bb.1 (%ir-block.0):
309    liveins: $edi
310
311    ; CHECK-LABEL: name: zext_i32_to_i64
312    ; CHECK: liveins: $edi
313    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $edi
314    ; CHECK: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[COPY]](s32)
315    ; CHECK: $rax = COPY [[ZEXT]](s64)
316    ; CHECK: RET 0, implicit $rax
317    %0:_(s32) = COPY $edi
318    %1:_(s64) = G_ZEXT %0(s32)
319    $rax = COPY %1(s64)
320    RET 0, implicit $rax
321
322...
323