Skip to content

Commit 6c9bc2d

Browse files
author
Jessica Paquette
committed
[GlobalISel] NFC: Add test coverage for s144 and s142
144 = 16 * 9 For types where s16 is legal. It may be interesting to break these down into 16-bit chunks rather than 32 or 64 bits. Add tests for some opcodes, just so we get some test coverage drawing attention to this.
1 parent 70984dd commit 6c9bc2d

File tree

3 files changed

+203
-78
lines changed

3 files changed

+203
-78
lines changed

llvm/test/CodeGen/AArch64/GlobalISel/legalize-constant.mir

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,3 +141,35 @@ body: |
141141
G_STORE %cst(s158), %ptr(p0) :: (store (s158))
142142
RET_ReallyLR implicit $w0
143143
...
144+
---
145+
name: s142
146+
registers:
147+
body: |
148+
bb.0:
149+
liveins: $x0
150+
151+
; CHECK-LABEL: name: s142
152+
; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1234
153+
; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
154+
; CHECK-NEXT: %ptr:_(p0) = COPY $x0
155+
; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
156+
; CHECK-NEXT: [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 16383
157+
; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[C]], [[C2]]
158+
; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s64) = G_AND [[C1]], [[C2]]
159+
; CHECK-NEXT: [[AND2:%[0-9]+]]:_(s64) = G_AND [[C1]], [[C3]]
160+
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY [[AND]](s64)
161+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY [[AND1]](s64)
162+
; CHECK-NEXT: [[EXTRACT:%[0-9]+]]:_(s16) = G_EXTRACT [[AND2]](s64), 0
163+
; CHECK-NEXT: G_STORE [[COPY]](s64), %ptr(p0) :: (store (s64), align 32)
164+
; CHECK-NEXT: [[C4:%[0-9]+]]:_(s64) = G_CONSTANT i64 8
165+
; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD %ptr, [[C4]](s64)
166+
; CHECK-NEXT: G_STORE [[COPY1]](s64), [[PTR_ADD]](p0) :: (store (s64) into unknown-address + 8)
167+
; CHECK-NEXT: [[C5:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
168+
; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD %ptr, [[C5]](s64)
169+
; CHECK-NEXT: G_STORE [[EXTRACT]](s16), [[PTR_ADD1]](p0) :: (store (s16) into unknown-address + 16, align 16)
170+
; CHECK-NEXT: RET_ReallyLR implicit $w0
171+
%cst:_(s142) = G_CONSTANT i142 1234
172+
%ptr:_(p0) = COPY $x0
173+
G_STORE %cst(s142), %ptr(p0) :: (store (s142))
174+
RET_ReallyLR implicit $w0
175+
...

llvm/test/CodeGen/AArch64/GlobalISel/legalize-extracts.mir

Lines changed: 138 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,11 @@ body: |
1212
1313
; CHECK-LABEL: name: test_extracts_4
1414
; CHECK: liveins: $x0, $x1, $x2
15-
; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
16-
; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s64), 32
17-
; CHECK: $w0 = COPY [[EXTRACT]](s32)
18-
; CHECK: RET_ReallyLR implicit $w0
15+
; CHECK-NEXT: {{ $}}
16+
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
17+
; CHECK-NEXT: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s64), 32
18+
; CHECK-NEXT: $w0 = COPY [[EXTRACT]](s32)
19+
; CHECK-NEXT: RET_ReallyLR implicit $w0
1920
%0:_(s64) = COPY $x0
2021
%1:_(s64) = COPY $x1
2122
%2:_(s128) = G_MERGE_VALUES %0, %1
@@ -31,10 +32,11 @@ body: |
3132
liveins: $x0, $q0
3233
; CHECK-LABEL: name: p0_from_s128
3334
; CHECK: liveins: $x0, $q0
34-
; CHECK: %val:_(s128) = COPY $q0
35-
; CHECK: %extract:_(p0) = G_EXTRACT %val(s128), 0
36-
; CHECK: $x0 = COPY %extract(p0)
37-
; CHECK: RET_ReallyLR implicit $x0
35+
; CHECK-NEXT: {{ $}}
36+
; CHECK-NEXT: %val:_(s128) = COPY $q0
37+
; CHECK-NEXT: %extract:_(p0) = G_EXTRACT %val(s128), 0
38+
; CHECK-NEXT: $x0 = COPY %extract(p0)
39+
; CHECK-NEXT: RET_ReallyLR implicit $x0
3840
%val:_(s128) = COPY $q0
3941
%extract:_(p0) = G_EXTRACT %val, 0
4042
$x0 = COPY %extract
@@ -48,10 +50,11 @@ body: |
4850
liveins: $x0, $q0
4951
; CHECK-LABEL: name: s64_from_s128
5052
; CHECK: liveins: $x0, $q0
51-
; CHECK: %val:_(s128) = COPY $q0
52-
; CHECK: %extract:_(s64) = G_EXTRACT %val(s128), 0
53-
; CHECK: $x0 = COPY %extract(s64)
54-
; CHECK: RET_ReallyLR implicit $x0
53+
; CHECK-NEXT: {{ $}}
54+
; CHECK-NEXT: %val:_(s128) = COPY $q0
55+
; CHECK-NEXT: %extract:_(s64) = G_EXTRACT %val(s128), 0
56+
; CHECK-NEXT: $x0 = COPY %extract(s64)
57+
; CHECK-NEXT: RET_ReallyLR implicit $x0
5558
%val:_(s128) = COPY $q0
5659
%extract:_(s64) = G_EXTRACT %val, 0
5760
$x0 = COPY %extract
@@ -65,10 +68,11 @@ body: |
6568
liveins: $w0, $q0
6669
; CHECK-LABEL: name: s32_from_s128
6770
; CHECK: liveins: $w0, $q0
68-
; CHECK: %val:_(s128) = COPY $q0
69-
; CHECK: %extract:_(s32) = G_EXTRACT %val(s128), 0
70-
; CHECK: $w0 = COPY %extract(s32)
71-
; CHECK: RET_ReallyLR implicit $w0
71+
; CHECK-NEXT: {{ $}}
72+
; CHECK-NEXT: %val:_(s128) = COPY $q0
73+
; CHECK-NEXT: %extract:_(s32) = G_EXTRACT %val(s128), 0
74+
; CHECK-NEXT: $w0 = COPY %extract(s32)
75+
; CHECK-NEXT: RET_ReallyLR implicit $w0
7276
%val:_(s128) = COPY $q0
7377
%extract:_(s32) = G_EXTRACT %val, 0
7478
$w0 = COPY %extract
@@ -82,10 +86,11 @@ body: |
8286
liveins: $w0
8387
; CHECK-LABEL: name: s32_from_s64
8488
; CHECK: liveins: $w0
85-
; CHECK: %val:_(s64) = COPY $x0
86-
; CHECK: %extract:_(s32) = G_EXTRACT %val(s64), 0
87-
; CHECK: $w0 = COPY %extract(s32)
88-
; CHECK: RET_ReallyLR implicit $w0
89+
; CHECK-NEXT: {{ $}}
90+
; CHECK-NEXT: %val:_(s64) = COPY $x0
91+
; CHECK-NEXT: %extract:_(s32) = G_EXTRACT %val(s64), 0
92+
; CHECK-NEXT: $w0 = COPY %extract(s32)
93+
; CHECK-NEXT: RET_ReallyLR implicit $w0
8994
%val:_(s64) = COPY $x0
9095
%extract:_(s32) = G_EXTRACT %val, 0
9196
$w0 = COPY %extract
@@ -99,10 +104,11 @@ body: |
99104
liveins: $w0
100105
; CHECK-LABEL: name: s32_from_p0
101106
; CHECK: liveins: $w0
102-
; CHECK: %val:_(p0) = COPY $x0
103-
; CHECK: %extract:_(s32) = G_EXTRACT %val(p0), 0
104-
; CHECK: $w0 = COPY %extract(s32)
105-
; CHECK: RET_ReallyLR implicit $w0
107+
; CHECK-NEXT: {{ $}}
108+
; CHECK-NEXT: %val:_(p0) = COPY $x0
109+
; CHECK-NEXT: %extract:_(s32) = G_EXTRACT %val(p0), 0
110+
; CHECK-NEXT: $w0 = COPY %extract(s32)
111+
; CHECK-NEXT: RET_ReallyLR implicit $w0
106112
%val:_(p0) = COPY $x0
107113
%extract:_(s32) = G_EXTRACT %val, 0
108114
$w0 = COPY %extract
@@ -116,10 +122,11 @@ body: |
116122
liveins: $h0, $q0
117123
; CHECK-LABEL: name: s16_from_s128
118124
; CHECK: liveins: $h0, $q0
119-
; CHECK: %val:_(s128) = COPY $q0
120-
; CHECK: %extract:_(s16) = G_EXTRACT %val(s128), 0
121-
; CHECK: $h0 = COPY %extract(s16)
122-
; CHECK: RET_ReallyLR implicit $h0
125+
; CHECK-NEXT: {{ $}}
126+
; CHECK-NEXT: %val:_(s128) = COPY $q0
127+
; CHECK-NEXT: %extract:_(s16) = G_EXTRACT %val(s128), 0
128+
; CHECK-NEXT: $h0 = COPY %extract(s16)
129+
; CHECK-NEXT: RET_ReallyLR implicit $h0
123130
%val:_(s128) = COPY $q0
124131
%extract:_(s16) = G_EXTRACT %val, 0
125132
$h0 = COPY %extract
@@ -133,10 +140,11 @@ body: |
133140
liveins: $h0, $x0
134141
; CHECK-LABEL: name: s16_from_s64
135142
; CHECK: liveins: $h0, $x0
136-
; CHECK: %val:_(s64) = COPY $x0
137-
; CHECK: %extract:_(s16) = G_EXTRACT %val(s64), 0
138-
; CHECK: $h0 = COPY %extract(s16)
139-
; CHECK: RET_ReallyLR implicit $h0
143+
; CHECK-NEXT: {{ $}}
144+
; CHECK-NEXT: %val:_(s64) = COPY $x0
145+
; CHECK-NEXT: %extract:_(s16) = G_EXTRACT %val(s64), 0
146+
; CHECK-NEXT: $h0 = COPY %extract(s16)
147+
; CHECK-NEXT: RET_ReallyLR implicit $h0
140148
%val:_(s64) = COPY $x0
141149
%extract:_(s16) = G_EXTRACT %val, 0
142150
$h0 = COPY %extract
@@ -150,10 +158,11 @@ body: |
150158
liveins: $h0, $w0
151159
; CHECK-LABEL: name: s16_from_s32
152160
; CHECK: liveins: $h0, $w0
153-
; CHECK: %val:_(s32) = COPY $w0
154-
; CHECK: %extract:_(s16) = G_EXTRACT %val(s32), 0
155-
; CHECK: $h0 = COPY %extract(s16)
156-
; CHECK: RET_ReallyLR implicit $h0
161+
; CHECK-NEXT: {{ $}}
162+
; CHECK-NEXT: %val:_(s32) = COPY $w0
163+
; CHECK-NEXT: %extract:_(s16) = G_EXTRACT %val(s32), 0
164+
; CHECK-NEXT: $h0 = COPY %extract(s16)
165+
; CHECK-NEXT: RET_ReallyLR implicit $h0
157166
%val:_(s32) = COPY $w0
158167
%extract:_(s16) = G_EXTRACT %val, 0
159168
$h0 = COPY %extract
@@ -167,10 +176,11 @@ body: |
167176
liveins: $b0, $q0
168177
; CHECK-LABEL: name: s8_from_s128
169178
; CHECK: liveins: $b0, $q0
170-
; CHECK: %val:_(s128) = COPY $q0
171-
; CHECK: %extract:_(s8) = G_TRUNC %val(s128)
172-
; CHECK: $b0 = COPY %extract(s8)
173-
; CHECK: RET_ReallyLR implicit $b0
179+
; CHECK-NEXT: {{ $}}
180+
; CHECK-NEXT: %val:_(s128) = COPY $q0
181+
; CHECK-NEXT: %extract:_(s8) = G_TRUNC %val(s128)
182+
; CHECK-NEXT: $b0 = COPY %extract(s8)
183+
; CHECK-NEXT: RET_ReallyLR implicit $b0
174184
%val:_(s128) = COPY $q0
175185
%extract:_(s8) = G_EXTRACT %val, 0
176186
$b0 = COPY %extract
@@ -184,10 +194,11 @@ body: |
184194
liveins: $b0, $x0
185195
; CHECK-LABEL: name: s8_from_s64
186196
; CHECK: liveins: $b0, $x0
187-
; CHECK: %val:_(s64) = COPY $x0
188-
; CHECK: %extract:_(s8) = G_TRUNC %val(s64)
189-
; CHECK: $b0 = COPY %extract(s8)
190-
; CHECK: RET_ReallyLR implicit $b0
197+
; CHECK-NEXT: {{ $}}
198+
; CHECK-NEXT: %val:_(s64) = COPY $x0
199+
; CHECK-NEXT: %extract:_(s8) = G_TRUNC %val(s64)
200+
; CHECK-NEXT: $b0 = COPY %extract(s8)
201+
; CHECK-NEXT: RET_ReallyLR implicit $b0
191202
%val:_(s64) = COPY $x0
192203
%extract:_(s8) = G_EXTRACT %val, 0
193204
$b0 = COPY %extract
@@ -201,10 +212,11 @@ body: |
201212
liveins: $b0, $w0
202213
; CHECK-LABEL: name: s8_from_s32
203214
; CHECK: liveins: $b0, $w0
204-
; CHECK: %val:_(s32) = COPY $w0
205-
; CHECK: %extract:_(s8) = G_TRUNC %val(s32)
206-
; CHECK: $b0 = COPY %extract(s8)
207-
; CHECK: RET_ReallyLR implicit $b0
215+
; CHECK-NEXT: {{ $}}
216+
; CHECK-NEXT: %val:_(s32) = COPY $w0
217+
; CHECK-NEXT: %extract:_(s8) = G_TRUNC %val(s32)
218+
; CHECK-NEXT: $b0 = COPY %extract(s8)
219+
; CHECK-NEXT: RET_ReallyLR implicit $b0
208220
%val:_(s32) = COPY $w0
209221
%extract:_(s8) = G_EXTRACT %val, 0
210222
$b0 = COPY %extract
@@ -218,11 +230,12 @@ body: |
218230
liveins: $b0, $h0
219231
; CHECK-LABEL: name: s8_from_s16
220232
; CHECK: liveins: $b0, $h0
221-
; CHECK: %val:_(s16) = COPY $h0
222-
; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT %val(s16)
223-
; CHECK: %extract:_(s8) = G_TRUNC [[ANYEXT]](s32)
224-
; CHECK: $b0 = COPY %extract(s8)
225-
; CHECK: RET_ReallyLR implicit $b0
233+
; CHECK-NEXT: {{ $}}
234+
; CHECK-NEXT: %val:_(s16) = COPY $h0
235+
; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT %val(s16)
236+
; CHECK-NEXT: %extract:_(s8) = G_TRUNC [[ANYEXT]](s32)
237+
; CHECK-NEXT: $b0 = COPY %extract(s8)
238+
; CHECK-NEXT: RET_ReallyLR implicit $b0
226239
%val:_(s16) = COPY $h0
227240
%extract:_(s8) = G_EXTRACT %val, 0
228241
$b0 = COPY %extract
@@ -236,11 +249,12 @@ body: |
236249
liveins: $w0
237250
; CHECK-LABEL: name: s1_from_s32
238251
; CHECK: liveins: $w0
239-
; CHECK: %val:_(s32) = COPY $w0
240-
; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
241-
; CHECK: %ext:_(s32) = G_AND %val, [[C]]
242-
; CHECK: $w0 = COPY %ext(s32)
243-
; CHECK: RET_ReallyLR implicit $w0
252+
; CHECK-NEXT: {{ $}}
253+
; CHECK-NEXT: %val:_(s32) = COPY $w0
254+
; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
255+
; CHECK-NEXT: %ext:_(s32) = G_AND %val, [[C]]
256+
; CHECK-NEXT: $w0 = COPY %ext(s32)
257+
; CHECK-NEXT: RET_ReallyLR implicit $w0
244258
%val:_(s32) = COPY $w0
245259
%extract:_(s1) = G_EXTRACT %val, 0
246260
%ext:_(s32) = G_ZEXT %extract
@@ -255,11 +269,12 @@ body: |
255269
liveins: $w0
256270
; CHECK-LABEL: name: s3_from_s32
257271
; CHECK: liveins: $w0
258-
; CHECK: %val:_(s32) = COPY $w0
259-
; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 7
260-
; CHECK: %ext:_(s32) = G_AND %val, [[C]]
261-
; CHECK: $w0 = COPY %ext(s32)
262-
; CHECK: RET_ReallyLR implicit $w0
272+
; CHECK-NEXT: {{ $}}
273+
; CHECK-NEXT: %val:_(s32) = COPY $w0
274+
; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 7
275+
; CHECK-NEXT: %ext:_(s32) = G_AND %val, [[C]]
276+
; CHECK-NEXT: $w0 = COPY %ext(s32)
277+
; CHECK-NEXT: RET_ReallyLR implicit $w0
263278
%val:_(s32) = COPY $w0
264279
%extract:_(s3) = G_EXTRACT %val, 0
265280
%ext:_(s32) = G_ZEXT %extract
@@ -274,12 +289,13 @@ body: |
274289
liveins: $w0
275290
; CHECK-LABEL: name: s3_from_s35
276291
; CHECK: liveins: $w0
277-
; CHECK: [[DEF:%[0-9]+]]:_(s64) = G_IMPLICIT_DEF
278-
; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 7
279-
; CHECK: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[DEF]](s64)
280-
; CHECK: %ext:_(s32) = G_AND [[TRUNC]], [[C]]
281-
; CHECK: $w0 = COPY %ext(s32)
282-
; CHECK: RET_ReallyLR implicit $w0
292+
; CHECK-NEXT: {{ $}}
293+
; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s64) = G_IMPLICIT_DEF
294+
; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 7
295+
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[DEF]](s64)
296+
; CHECK-NEXT: %ext:_(s32) = G_AND [[TRUNC]], [[C]]
297+
; CHECK-NEXT: $w0 = COPY %ext(s32)
298+
; CHECK-NEXT: RET_ReallyLR implicit $w0
283299
%val:_(s35) = G_IMPLICIT_DEF
284300
%extract:_(s3) = G_EXTRACT %val, 0
285301
%ext:_(s32) = G_ZEXT %extract
@@ -294,11 +310,12 @@ body: |
294310
liveins: $w0
295311
; CHECK-LABEL: name: s4_from_s32
296312
; CHECK: liveins: $w0
297-
; CHECK: %val:_(s32) = COPY $w0
298-
; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 15
299-
; CHECK: %ext:_(s32) = G_AND %val, [[C]]
300-
; CHECK: $w0 = COPY %ext(s32)
301-
; CHECK: RET_ReallyLR implicit $w0
313+
; CHECK-NEXT: {{ $}}
314+
; CHECK-NEXT: %val:_(s32) = COPY $w0
315+
; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 15
316+
; CHECK-NEXT: %ext:_(s32) = G_AND %val, [[C]]
317+
; CHECK-NEXT: $w0 = COPY %ext(s32)
318+
; CHECK-NEXT: RET_ReallyLR implicit $w0
302319
%val:_(s32) = COPY $w0
303320
%extract:_(s4) = G_EXTRACT %val, 0
304321
%ext:_(s32) = G_ZEXT %extract
@@ -313,11 +330,54 @@ body: |
313330
liveins: $x0
314331
; CHECK-LABEL: name: s64_from_s264
315332
; CHECK: liveins: $x0
316-
; CHECK: [[DEF:%[0-9]+]]:_(s64) = G_IMPLICIT_DEF
317-
; CHECK: %extract:_(s64) = COPY [[DEF]](s64)
318-
; CHECK: $x0 = COPY %extract(s64)
319-
; CHECK: RET_ReallyLR implicit $x0
333+
; CHECK-NEXT: {{ $}}
334+
; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s64) = G_IMPLICIT_DEF
335+
; CHECK-NEXT: %extract:_(s64) = COPY [[DEF]](s64)
336+
; CHECK-NEXT: $x0 = COPY %extract(s64)
337+
; CHECK-NEXT: RET_ReallyLR implicit $x0
320338
%val:_(s264) = G_IMPLICIT_DEF
321339
%extract:_(s64) = G_EXTRACT %val, 0
322340
$x0 = COPY %extract
323341
RET_ReallyLR implicit $x0
342+
...
343+
---
344+
name: s16_from_s144
345+
tracksRegLiveness: true
346+
body: |
347+
bb.0:
348+
liveins: $h0
349+
; CHECK-LABEL: name: s16_from_s144
350+
; CHECK: liveins: $h0
351+
; CHECK-NEXT: {{ $}}
352+
; CHECK-NEXT: %h0:_(s16) = COPY $h0
353+
; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES %h0(s16), %h0(s16), %h0(s16), %h0(s16)
354+
; CHECK-NEXT: [[EXTRACT:%[0-9]+]]:_(s16) = G_EXTRACT [[MV]](s64), 1
355+
; CHECK-NEXT: %extract:_(s16) = COPY [[EXTRACT]](s16)
356+
; CHECK-NEXT: $h0 = COPY %extract(s16)
357+
; CHECK-NEXT: RET_ReallyLR implicit $h0
358+
%h0:_(s16) = COPY $h0
359+
%val:_(s144) = G_MERGE_VALUES %h0, %h0, %h0, %h0, %h0, %h0, %h0, %h0, %h0
360+
%extract:_(s16) = G_EXTRACT %val, 1
361+
$h0 = COPY %extract
362+
RET_ReallyLR implicit $h0
363+
...
364+
---
365+
name: s32_from_s144
366+
tracksRegLiveness: true
367+
body: |
368+
bb.0:
369+
liveins: $h0, $w0
370+
; CHECK-LABEL: name: s32_from_s144
371+
; CHECK: liveins: $h0, $w0
372+
; CHECK-NEXT: {{ $}}
373+
; CHECK-NEXT: %h0:_(s16) = COPY $h0
374+
; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES %h0(s16), %h0(s16), %h0(s16), %h0(s16)
375+
; CHECK-NEXT: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[MV]](s64), 1
376+
; CHECK-NEXT: %extract:_(s32) = COPY [[EXTRACT]](s32)
377+
; CHECK-NEXT: $w0 = COPY %extract(s32)
378+
; CHECK-NEXT: RET_ReallyLR implicit $w0
379+
%h0:_(s16) = COPY $h0
380+
%val:_(s144) = G_MERGE_VALUES %h0, %h0, %h0, %h0, %h0, %h0, %h0, %h0, %h0
381+
%extract:_(s32) = G_EXTRACT %val, 1
382+
$w0 = COPY %extract
383+
RET_ReallyLR implicit $w0

0 commit comments

Comments
 (0)