xref: /llvm-project/llvm/test/CodeGen/RISCV/GlobalISel/legalizer/legalize-extload-rv32.mir (revision 0154e53bf307aa501a6d9d6a1bafa6a6fcb2a7ad)
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -mtriple=riscv32 -run-pass=legalizer %s -o - \
3# RUN: | FileCheck %s
4
5---
6name:            zextload_i8_i16
7body:             |
8  bb.0:
9    liveins: $x10
10
11    ; CHECK-LABEL: name: zextload_i8_i16
12    ; CHECK: liveins: $x10
13    ; CHECK-NEXT: {{  $}}
14    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
15    ; CHECK-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p0) :: (load (s8))
16    ; CHECK-NEXT: $x10 = COPY [[ZEXTLOAD]](s32)
17    ; CHECK-NEXT: PseudoRET implicit $x10
18    %0:_(p0) = COPY $x10
19    %2:_(s16) = G_ZEXTLOAD %0(p0) :: (load (s8))
20    %3:_(s32) = G_ANYEXT %2(s16)
21    $x10 = COPY %3(s32)
22    PseudoRET implicit $x10
23
24...
25---
26name:            zextload_i8_i32
27body:             |
28  bb.0:
29    liveins: $x10
30
31    ; CHECK-LABEL: name: zextload_i8_i32
32    ; CHECK: liveins: $x10
33    ; CHECK-NEXT: {{  $}}
34    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
35    ; CHECK-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p0) :: (load (s8))
36    ; CHECK-NEXT: $x10 = COPY [[ZEXTLOAD]](s32)
37    ; CHECK-NEXT: PseudoRET implicit $x10
38    %0:_(p0) = COPY $x10
39    %2:_(s32) = G_ZEXTLOAD %0(p0) :: (load (s8))
40    $x10 = COPY %2(s32)
41    PseudoRET implicit $x10
42
43...
44---
45name:            zextload_i16_i32
46body:             |
47  bb.0:
48    liveins: $x10
49
50    ; CHECK-LABEL: name: zextload_i16_i32
51    ; CHECK: liveins: $x10
52    ; CHECK-NEXT: {{  $}}
53    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
54    ; CHECK-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p0) :: (load (s16))
55    ; CHECK-NEXT: $x10 = COPY [[ZEXTLOAD]](s32)
56    ; CHECK-NEXT: PseudoRET implicit $x10
57    %0:_(p0) = COPY $x10
58    %2:_(s32) = G_ZEXTLOAD %0(p0) :: (load (s16))
59    $x10 = COPY %2(s32)
60    PseudoRET implicit $x10
61
62...
63---
64name:            zextload_i8_i64
65body:             |
66  bb.0:
67    liveins: $x10
68
69    ; CHECK-LABEL: name: zextload_i8_i64
70    ; CHECK: liveins: $x10
71    ; CHECK-NEXT: {{  $}}
72    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
73    ; CHECK-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p0) :: (load (s8))
74    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
75    ; CHECK-NEXT: $x10 = COPY [[ZEXTLOAD]](s32)
76    ; CHECK-NEXT: $x11 = COPY [[C]](s32)
77    ; CHECK-NEXT: PseudoRET implicit $x10, implicit $x11
78    %0:_(p0) = COPY $x10
79    %2:_(s64) = G_ZEXTLOAD %0(p0) :: (load (s8))
80    %3:_(s32), %4:_(s32) = G_UNMERGE_VALUES %2(s64)
81    $x10 = COPY %3(s32)
82    $x11 = COPY %4(s32)
83    PseudoRET implicit $x10, implicit $x11
84
85...
86---
87name:            zextload_i16_i64
88body:             |
89  bb.0:
90    liveins: $x10
91
92    ; CHECK-LABEL: name: zextload_i16_i64
93    ; CHECK: liveins: $x10
94    ; CHECK-NEXT: {{  $}}
95    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
96    ; CHECK-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p0) :: (load (s16))
97    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
98    ; CHECK-NEXT: $x10 = COPY [[ZEXTLOAD]](s32)
99    ; CHECK-NEXT: $x11 = COPY [[C]](s32)
100    ; CHECK-NEXT: PseudoRET implicit $x10, implicit $x11
101    %0:_(p0) = COPY $x10
102    %2:_(s64) = G_ZEXTLOAD %0(p0) :: (load (s16))
103    %3:_(s32), %4:_(s32) = G_UNMERGE_VALUES %2(s64)
104    $x10 = COPY %3(s32)
105    $x11 = COPY %4(s32)
106    PseudoRET implicit $x10, implicit $x11
107
108...
109---
110name:            zextload_i32_i64
111body:             |
112  bb.0:
113    liveins: $x10
114
115    ; CHECK-LABEL: name: zextload_i32_i64
116    ; CHECK: liveins: $x10
117    ; CHECK-NEXT: {{  $}}
118    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
119    ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load (s32))
120    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
121    ; CHECK-NEXT: $x10 = COPY [[LOAD]](s32)
122    ; CHECK-NEXT: $x11 = COPY [[C]](s32)
123    ; CHECK-NEXT: PseudoRET implicit $x10, implicit $x11
124    %0:_(p0) = COPY $x10
125    %2:_(s64) = G_ZEXTLOAD %0(p0) :: (load (s32))
126    %3:_(s32), %4:_(s32) = G_UNMERGE_VALUES %2(s64)
127    $x10 = COPY %3(s32)
128    $x11 = COPY %4(s32)
129    PseudoRET implicit $x10, implicit $x11
130
131...
132---
133name:            sextload_i8_i16
134body:             |
135  bb.0:
136    liveins: $x10
137
138    ; CHECK-LABEL: name: sextload_i8_i16
139    ; CHECK: liveins: $x10
140    ; CHECK-NEXT: {{  $}}
141    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
142    ; CHECK-NEXT: [[SEXTLOAD:%[0-9]+]]:_(s32) = G_SEXTLOAD [[COPY]](p0) :: (load (s8))
143    ; CHECK-NEXT: $x10 = COPY [[SEXTLOAD]](s32)
144    ; CHECK-NEXT: PseudoRET implicit $x10
145    %0:_(p0) = COPY $x10
146    %2:_(s16) = G_SEXTLOAD %0(p0) :: (load (s8))
147    %3:_(s32) = G_ANYEXT %2(s16)
148    $x10 = COPY %3(s32)
149    PseudoRET implicit $x10
150
151...
152---
153name:            sextload_i8_i32
154body:             |
155  bb.0:
156    liveins: $x10
157
158    ; CHECK-LABEL: name: sextload_i8_i32
159    ; CHECK: liveins: $x10
160    ; CHECK-NEXT: {{  $}}
161    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
162    ; CHECK-NEXT: [[SEXTLOAD:%[0-9]+]]:_(s32) = G_SEXTLOAD [[COPY]](p0) :: (load (s8))
163    ; CHECK-NEXT: $x10 = COPY [[SEXTLOAD]](s32)
164    ; CHECK-NEXT: PseudoRET implicit $x10
165    %0:_(p0) = COPY $x10
166    %2:_(s32) = G_SEXTLOAD %0(p0) :: (load (s8))
167    $x10 = COPY %2(s32)
168    PseudoRET implicit $x10
169
170...
171---
172name:            sextload_i16_i32
173body:             |
174  bb.0:
175    liveins: $x10
176
177    ; CHECK-LABEL: name: sextload_i16_i32
178    ; CHECK: liveins: $x10
179    ; CHECK-NEXT: {{  $}}
180    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
181    ; CHECK-NEXT: [[SEXTLOAD:%[0-9]+]]:_(s32) = G_SEXTLOAD [[COPY]](p0) :: (load (s16))
182    ; CHECK-NEXT: $x10 = COPY [[SEXTLOAD]](s32)
183    ; CHECK-NEXT: PseudoRET implicit $x10
184    %0:_(p0) = COPY $x10
185    %2:_(s32) = G_SEXTLOAD %0(p0) :: (load (s16))
186    $x10 = COPY %2(s32)
187    PseudoRET implicit $x10
188
189...
190---
191name:            sextload_i8_i64
192body:             |
193  bb.0:
194    liveins: $x10
195
196    ; CHECK-LABEL: name: sextload_i8_i64
197    ; CHECK: liveins: $x10
198    ; CHECK-NEXT: {{  $}}
199    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
200    ; CHECK-NEXT: [[SEXTLOAD:%[0-9]+]]:_(s32) = G_SEXTLOAD [[COPY]](p0) :: (load (s8))
201    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 31
202    ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SEXTLOAD]], [[C]](s32)
203    ; CHECK-NEXT: $x10 = COPY [[SEXTLOAD]](s32)
204    ; CHECK-NEXT: $x11 = COPY [[ASHR]](s32)
205    ; CHECK-NEXT: PseudoRET implicit $x10, implicit $x11
206    %0:_(p0) = COPY $x10
207    %2:_(s64) = G_SEXTLOAD %0(p0) :: (load (s8))
208    %3:_(s32), %4:_(s32) = G_UNMERGE_VALUES %2(s64)
209    $x10 = COPY %3(s32)
210    $x11 = COPY %4(s32)
211    PseudoRET implicit $x10, implicit $x11
212
213...
214---
215name:            sextload_i16_i64
216body:             |
217  bb.0:
218    liveins: $x10
219
220    ; CHECK-LABEL: name: sextload_i16_i64
221    ; CHECK: liveins: $x10
222    ; CHECK-NEXT: {{  $}}
223    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
224    ; CHECK-NEXT: [[SEXTLOAD:%[0-9]+]]:_(s32) = G_SEXTLOAD [[COPY]](p0) :: (load (s16))
225    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 31
226    ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SEXTLOAD]], [[C]](s32)
227    ; CHECK-NEXT: $x10 = COPY [[SEXTLOAD]](s32)
228    ; CHECK-NEXT: $x11 = COPY [[ASHR]](s32)
229    ; CHECK-NEXT: PseudoRET implicit $x10, implicit $x11
230    %0:_(p0) = COPY $x10
231    %2:_(s64) = G_SEXTLOAD %0(p0) :: (load (s16))
232    %3:_(s32), %4:_(s32) = G_UNMERGE_VALUES %2(s64)
233    $x10 = COPY %3(s32)
234    $x11 = COPY %4(s32)
235    PseudoRET implicit $x10, implicit $x11
236
237...
238---
239name:            sextload_i32_i64
240body:             |
241  bb.0:
242    liveins: $x10
243
244    ; CHECK-LABEL: name: sextload_i32_i64
245    ; CHECK: liveins: $x10
246    ; CHECK-NEXT: {{  $}}
247    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
248    ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load (s32))
249    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 31
250    ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[LOAD]], [[C]](s32)
251    ; CHECK-NEXT: $x10 = COPY [[LOAD]](s32)
252    ; CHECK-NEXT: $x11 = COPY [[ASHR]](s32)
253    ; CHECK-NEXT: PseudoRET implicit $x10, implicit $x11
254    %0:_(p0) = COPY $x10
255    %2:_(s64) = G_SEXTLOAD %0(p0) :: (load (s32))
256    %3:_(s32), %4:_(s32) = G_UNMERGE_VALUES %2(s64)
257    $x10 = COPY %3(s32)
258    $x11 = COPY %4(s32)
259    PseudoRET implicit $x10, implicit $x11
260
261...
262