@@ -158,6 +158,44 @@ entry:
158
158
ret <2 x i64 > %out
159
159
}
160
160
161
+ define <2 x i32 > @dupzext_v2i32_v2i64_trunc (i32 %src , <2 x i32 > %b ) {
162
+ ; CHECK-SD-LABEL: dupzext_v2i32_v2i64_trunc:
163
+ ; CHECK-SD: // %bb.0: // %entry
164
+ ; CHECK-SD-NEXT: ushll v0.2d, v0.2s, #0
165
+ ; CHECK-SD-NEXT: fmov x9, d0
166
+ ; CHECK-SD-NEXT: mov x8, v0.d[1]
167
+ ; CHECK-SD-NEXT: mul w9, w0, w9
168
+ ; CHECK-SD-NEXT: mul w8, w0, w8
169
+ ; CHECK-SD-NEXT: fmov d0, x9
170
+ ; CHECK-SD-NEXT: mov v0.d[1], x8
171
+ ; CHECK-SD-NEXT: xtn v0.2s, v0.2d
172
+ ; CHECK-SD-NEXT: ret
173
+ ;
174
+ ; CHECK-GI-LABEL: dupzext_v2i32_v2i64_trunc:
175
+ ; CHECK-GI: // %bb.0: // %entry
176
+ ; CHECK-GI-NEXT: mov w8, w0
177
+ ; CHECK-GI-NEXT: ushll v0.2d, v0.2s, #0
178
+ ; CHECK-GI-NEXT: dup v1.2d, x8
179
+ ; CHECK-GI-NEXT: fmov x9, d0
180
+ ; CHECK-GI-NEXT: mov x11, v0.d[1]
181
+ ; CHECK-GI-NEXT: fmov x8, d1
182
+ ; CHECK-GI-NEXT: mov x10, v1.d[1]
183
+ ; CHECK-GI-NEXT: mul x8, x8, x9
184
+ ; CHECK-GI-NEXT: mul x9, x10, x11
185
+ ; CHECK-GI-NEXT: mov v0.d[0], x8
186
+ ; CHECK-GI-NEXT: mov v0.d[1], x9
187
+ ; CHECK-GI-NEXT: xtn v0.2s, v0.2d
188
+ ; CHECK-GI-NEXT: ret
189
+ entry:
190
+ %in = zext i32 %src to i64
191
+ %ext.b = zext <2 x i32 > %b to <2 x i64 >
192
+ %broadcast.splatinsert = insertelement <2 x i64 > undef , i64 %in , i64 0
193
+ %broadcast.splat = shufflevector <2 x i64 > %broadcast.splatinsert , <2 x i64 > undef , <2 x i32 > zeroinitializer
194
+ %prod = mul nuw <2 x i64 > %broadcast.splat , %ext.b
195
+ %out = trunc <2 x i64 > %prod to <2 x i32 >
196
+ ret <2 x i32 > %out
197
+ }
198
+
161
199
; Unsupported combines
162
200
163
201
define <2 x i16 > @dupsext_v2i8_v2i16 (i8 %src , <2 x i8 > %b ) {
@@ -407,10 +445,10 @@ define <8 x i16> @shufsext_v8i8_v8i16(<8 x i8> %src, <8 x i8> %b) {
407
445
;
408
446
; CHECK-GI-LABEL: shufsext_v8i8_v8i16:
409
447
; CHECK-GI: // %bb.0: // %entry
410
- ; CHECK-GI-NEXT: adrp x8, .LCPI13_0
448
+ ; CHECK-GI-NEXT: adrp x8, .LCPI14_0
411
449
; CHECK-GI-NEXT: sshll v2.8h, v0.8b, #0
412
450
; CHECK-GI-NEXT: sshll v1.8h, v1.8b, #0
413
- ; CHECK-GI-NEXT: ldr q0, [x8, :lo12:.LCPI13_0 ]
451
+ ; CHECK-GI-NEXT: ldr q0, [x8, :lo12:.LCPI14_0 ]
414
452
; CHECK-GI-NEXT: tbl v0.16b, { v2.16b, v3.16b }, v0.16b
415
453
; CHECK-GI-NEXT: mul v0.8h, v0.8h, v1.8h
416
454
; CHECK-GI-NEXT: ret
@@ -460,10 +498,10 @@ define <8 x i16> @shufzext_v8i8_v8i16(<8 x i8> %src, <8 x i8> %b) {
460
498
;
461
499
; CHECK-GI-LABEL: shufzext_v8i8_v8i16:
462
500
; CHECK-GI: // %bb.0: // %entry
463
- ; CHECK-GI-NEXT: adrp x8, .LCPI15_0
501
+ ; CHECK-GI-NEXT: adrp x8, .LCPI16_0
464
502
; CHECK-GI-NEXT: ushll v2.8h, v0.8b, #0
465
503
; CHECK-GI-NEXT: ushll v1.8h, v1.8b, #0
466
- ; CHECK-GI-NEXT: ldr q0, [x8, :lo12:.LCPI15_0 ]
504
+ ; CHECK-GI-NEXT: ldr q0, [x8, :lo12:.LCPI16_0 ]
467
505
; CHECK-GI-NEXT: tbl v0.16b, { v2.16b, v3.16b }, v0.16b
468
506
; CHECK-GI-NEXT: mul v0.8h, v0.8h, v1.8h
469
507
; CHECK-GI-NEXT: ret
0 commit comments