@@ -106,10 +106,6 @@ define <16 x i8> @shl_v16i8_late(<16 x i8> %v, i8 %x) {
106
106
; CHECK-NEXT: # %bb.0:
107
107
; CHECK-NEXT: local.get 0
108
108
; CHECK-NEXT: local.get 1
109
- ; CHECK-NEXT: i8x16.splat
110
- ; CHECK-NEXT: v128.const 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
111
- ; CHECK-NEXT: v128.and
112
- ; CHECK-NEXT: i8x16.extract_lane_u 0
113
109
; CHECK-NEXT: i8x16.shl
114
110
; CHECK-NEXT: # fallthrough-return
115
111
%t = insertelement <16 x i8 > undef , i8 %x , i32 0
@@ -145,10 +141,6 @@ define <16 x i8> @ashr_v16i8_late(<16 x i8> %v, i8 %x) {
145
141
; CHECK-NEXT: # %bb.0:
146
142
; CHECK-NEXT: local.get 0
147
143
; CHECK-NEXT: local.get 1
148
- ; CHECK-NEXT: i8x16.splat
149
- ; CHECK-NEXT: v128.const 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
150
- ; CHECK-NEXT: v128.and
151
- ; CHECK-NEXT: i8x16.extract_lane_u 0
152
144
; CHECK-NEXT: i8x16.shr_s
153
145
; CHECK-NEXT: # fallthrough-return
154
146
%t = insertelement <16 x i8 > undef , i8 %x , i32 0
@@ -184,10 +176,6 @@ define <16 x i8> @lshr_v16i8_late(<16 x i8> %v, i8 %x) {
184
176
; CHECK-NEXT: # %bb.0:
185
177
; CHECK-NEXT: local.get 0
186
178
; CHECK-NEXT: local.get 1
187
- ; CHECK-NEXT: i8x16.splat
188
- ; CHECK-NEXT: v128.const 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
189
- ; CHECK-NEXT: v128.and
190
- ; CHECK-NEXT: i8x16.extract_lane_u 0
191
179
; CHECK-NEXT: i8x16.shr_u
192
180
; CHECK-NEXT: # fallthrough-return
193
181
%t = insertelement <16 x i8 > undef , i8 %x , i32 0
@@ -222,10 +210,6 @@ define <8 x i16> @shl_v8i16_late(<8 x i16> %v, i16 %x) {
222
210
; CHECK-NEXT: # %bb.0:
223
211
; CHECK-NEXT: local.get 0
224
212
; CHECK-NEXT: local.get 1
225
- ; CHECK-NEXT: i16x8.splat
226
- ; CHECK-NEXT: v128.const 15, 15, 15, 15, 15, 15, 15, 15
227
- ; CHECK-NEXT: v128.and
228
- ; CHECK-NEXT: i16x8.extract_lane_u 0
229
213
; CHECK-NEXT: i16x8.shl
230
214
; CHECK-NEXT: # fallthrough-return
231
215
%t = insertelement <8 x i16 > undef , i16 %x , i32 0
@@ -259,10 +243,6 @@ define <8 x i16> @ashr_v8i16_late(<8 x i16> %v, i16 %x) {
259
243
; CHECK-NEXT: # %bb.0:
260
244
; CHECK-NEXT: local.get 0
261
245
; CHECK-NEXT: local.get 1
262
- ; CHECK-NEXT: i16x8.splat
263
- ; CHECK-NEXT: v128.const 15, 15, 15, 15, 15, 15, 15, 15
264
- ; CHECK-NEXT: v128.and
265
- ; CHECK-NEXT: i16x8.extract_lane_u 0
266
246
; CHECK-NEXT: i16x8.shr_s
267
247
; CHECK-NEXT: # fallthrough-return
268
248
%t = insertelement <8 x i16 > undef , i16 %x , i32 0
@@ -296,10 +276,6 @@ define <8 x i16> @lshr_v8i16_late(<8 x i16> %v, i16 %x) {
296
276
; CHECK-NEXT: # %bb.0:
297
277
; CHECK-NEXT: local.get 0
298
278
; CHECK-NEXT: local.get 1
299
- ; CHECK-NEXT: i16x8.splat
300
- ; CHECK-NEXT: v128.const 15, 15, 15, 15, 15, 15, 15, 15
301
- ; CHECK-NEXT: v128.and
302
- ; CHECK-NEXT: i16x8.extract_lane_u 0
303
279
; CHECK-NEXT: i16x8.shr_u
304
280
; CHECK-NEXT: # fallthrough-return
305
281
%t = insertelement <8 x i16 > undef , i16 %x , i32 0
@@ -519,6 +495,22 @@ define <2 x i64> @shl_v2i64_i32(<2 x i64> %v, i32 %x) {
519
495
ret <2 x i64 > %a
520
496
}
521
497
498
+ define <2 x i64 > @shl_v2i64_i32_late (<2 x i64 > %v , i32 %x ) {
499
+ ; CHECK-LABEL: shl_v2i64_i32_late:
500
+ ; CHECK: .functype shl_v2i64_i32_late (v128, i32) -> (v128)
501
+ ; CHECK-NEXT: # %bb.0:
502
+ ; CHECK-NEXT: local.get 0
503
+ ; CHECK-NEXT: local.get 1
504
+ ; CHECK-NEXT: i64x2.shl
505
+ ; CHECK-NEXT: # fallthrough-return
506
+ %z = zext i32 %x to i64
507
+ %t = insertelement <2 x i64 > undef , i64 %z , i32 0
508
+ %s = shufflevector <2 x i64 > %t , <2 x i64 > undef , <2 x i32 > <i32 0 , i32 0 >
509
+ %m = and <2 x i64 > %s , <i64 63 , i64 63 >
510
+ %a = shl <2 x i64 > %v , %m
511
+ ret <2 x i64 > %a
512
+ }
513
+
522
514
define <2 x i64 > @ashr_v2i64_i32 (<2 x i64 > %v , i32 %x ) {
523
515
; CHECK-LABEL: ashr_v2i64_i32:
524
516
; CHECK: .functype ashr_v2i64_i32 (v128, i32) -> (v128)
@@ -535,6 +527,22 @@ define <2 x i64> @ashr_v2i64_i32(<2 x i64> %v, i32 %x) {
535
527
ret <2 x i64 > %a
536
528
}
537
529
530
+ define <2 x i64 > @ashr_v2i64_i32_late (<2 x i64 > %v , i32 %x ) {
531
+ ; CHECK-LABEL: ashr_v2i64_i32_late:
532
+ ; CHECK: .functype ashr_v2i64_i32_late (v128, i32) -> (v128)
533
+ ; CHECK-NEXT: # %bb.0:
534
+ ; CHECK-NEXT: local.get 0
535
+ ; CHECK-NEXT: local.get 1
536
+ ; CHECK-NEXT: i64x2.shr_s
537
+ ; CHECK-NEXT: # fallthrough-return
538
+ %z = zext i32 %x to i64
539
+ %t = insertelement <2 x i64 > undef , i64 %z , i32 0
540
+ %s = shufflevector <2 x i64 > %t , <2 x i64 > undef , <2 x i32 > <i32 0 , i32 0 >
541
+ %m = and <2 x i64 > %s , <i64 63 , i64 63 >
542
+ %a = ashr <2 x i64 > %v , %m
543
+ ret <2 x i64 > %a
544
+ }
545
+
538
546
define <2 x i64 > @lshr_v2i64_i32 (<2 x i64 > %v , i32 %x ) {
539
547
; CHECK-LABEL: lshr_v2i64_i32:
540
548
; CHECK: .functype lshr_v2i64_i32 (v128, i32) -> (v128)
@@ -551,3 +559,18 @@ define <2 x i64> @lshr_v2i64_i32(<2 x i64> %v, i32 %x) {
551
559
ret <2 x i64 > %a
552
560
}
553
561
562
+ define <2 x i64 > @lshr_v2i64_i32_late (<2 x i64 > %v , i32 %x ) {
563
+ ; CHECK-LABEL: lshr_v2i64_i32_late:
564
+ ; CHECK: .functype lshr_v2i64_i32_late (v128, i32) -> (v128)
565
+ ; CHECK-NEXT: # %bb.0:
566
+ ; CHECK-NEXT: local.get 0
567
+ ; CHECK-NEXT: local.get 1
568
+ ; CHECK-NEXT: i64x2.shr_u
569
+ ; CHECK-NEXT: # fallthrough-return
570
+ %z = zext i32 %x to i64
571
+ %t = insertelement <2 x i64 > undef , i64 %z , i32 0
572
+ %s = shufflevector <2 x i64 > %t , <2 x i64 > undef , <2 x i32 > <i32 0 , i32 0 >
573
+ %m = and <2 x i64 > %s , <i64 63 , i64 63 >
574
+ %a = lshr <2 x i64 > %v , %m
575
+ ret <2 x i64 > %a
576
+ }
0 commit comments