@@ -112,8 +112,10 @@ define <2 x i64> @ashr_v2_metadata(<2 x i64> %arg0, ptr %arg1.ptr) {
112
112
; CHECK-NEXT: v_ashrrev_i32_e32 v5, 31, v1
113
113
; CHECK-NEXT: v_ashrrev_i32_e32 v4, 31, v3
114
114
; CHECK-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)
115
- ; CHECK-NEXT: v_ashrrev_i32_e32 v0, v6, v1
116
- ; CHECK-NEXT: v_ashrrev_i32_e32 v2, v8, v3
115
+ ; CHECK-NEXT: v_and_b32_e32 v2, 31, v8
116
+ ; CHECK-NEXT: v_and_b32_e32 v0, 31, v6
117
+ ; CHECK-NEXT: v_ashrrev_i32_e32 v0, v0, v1
118
+ ; CHECK-NEXT: v_ashrrev_i32_e32 v2, v2, v3
117
119
; CHECK-NEXT: v_mov_b32_e32 v1, v5
118
120
; CHECK-NEXT: v_mov_b32_e32 v3, v4
119
121
; CHECK-NEXT: s_setpc_b64 s[30:31]
@@ -145,8 +147,10 @@ define <2 x i64> @ashr_exact_v2_metadata(<2 x i64> %arg0, ptr %arg1.ptr) {
145
147
; CHECK-NEXT: v_ashrrev_i32_e32 v5, 31, v1
146
148
; CHECK-NEXT: v_ashrrev_i32_e32 v4, 31, v3
147
149
; CHECK-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)
148
- ; CHECK-NEXT: v_ashrrev_i32_e32 v0, v6, v1
149
- ; CHECK-NEXT: v_ashrrev_i32_e32 v2, v8, v3
150
+ ; CHECK-NEXT: v_and_b32_e32 v2, 31, v8
151
+ ; CHECK-NEXT: v_and_b32_e32 v0, 31, v6
152
+ ; CHECK-NEXT: v_ashrrev_i32_e32 v0, v0, v1
153
+ ; CHECK-NEXT: v_ashrrev_i32_e32 v2, v2, v3
150
154
; CHECK-NEXT: v_mov_b32_e32 v1, v5
151
155
; CHECK-NEXT: v_mov_b32_e32 v3, v4
152
156
; CHECK-NEXT: s_setpc_b64 s[30:31]
@@ -390,9 +394,11 @@ define <2 x i64> @ashr_v2_or32(<2 x i64> %arg0, <2 x i64> %shift_amt) {
390
394
; CHECK-LABEL: ashr_v2_or32:
391
395
; CHECK: ; %bb.0:
392
396
; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
393
- ; CHECK-NEXT: v_ashrrev_i32_e32 v0, v4, v1
397
+ ; CHECK-NEXT: v_and_b32_e32 v2, 31, v6
398
+ ; CHECK-NEXT: v_and_b32_e32 v0, 31, v4
399
+ ; CHECK-NEXT: v_ashrrev_i32_e32 v0, v0, v1
400
+ ; CHECK-NEXT: v_ashrrev_i32_e32 v2, v2, v3
394
401
; CHECK-NEXT: v_ashrrev_i32_e32 v1, 31, v1
395
- ; CHECK-NEXT: v_ashrrev_i32_e32 v2, v6, v3
396
402
; CHECK-NEXT: v_ashrrev_i32_e32 v3, 31, v3
397
403
; CHECK-NEXT: s_setpc_b64 s[30:31]
398
404
%or = or <2 x i64 > %shift_amt , splat (i64 32 )
@@ -465,13 +471,17 @@ define <2 x i64> @ashr_v2_or32_sgpr(<2 x i64> inreg %arg0, <2 x i64> inreg %shif
465
471
; CHECK-LABEL: ashr_v2_or32_sgpr:
466
472
; CHECK: ; %bb.0:
467
473
; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
468
- ; CHECK-NEXT: s_ashr_i32 s4, s17, s20
469
- ; CHECK-NEXT: s_ashr_i32 s5, s17, 31
470
- ; CHECK-NEXT: s_ashr_i32 s6, s19, s22
474
+ ; CHECK-NEXT: s_mov_b32 s4, 31
475
+ ; CHECK-NEXT: s_mov_b32 s21, s22
476
+ ; CHECK-NEXT: s_mov_b32 s5, s4
477
+ ; CHECK-NEXT: s_and_b64 s[4:5], s[20:21], s[4:5]
478
+ ; CHECK-NEXT: s_ashr_i32 s6, s17, 31
471
479
; CHECK-NEXT: s_ashr_i32 s7, s19, 31
480
+ ; CHECK-NEXT: s_ashr_i32 s4, s17, s4
481
+ ; CHECK-NEXT: s_ashr_i32 s5, s19, s5
472
482
; CHECK-NEXT: v_mov_b32_e32 v0, s4
473
- ; CHECK-NEXT: v_mov_b32_e32 v1, s5
474
- ; CHECK-NEXT: v_mov_b32_e32 v2, s6
483
+ ; CHECK-NEXT: v_mov_b32_e32 v1, s6
484
+ ; CHECK-NEXT: v_mov_b32_e32 v2, s5
475
485
; CHECK-NEXT: v_mov_b32_e32 v3, s7
476
486
; CHECK-NEXT: s_setpc_b64 s[30:31]
477
487
%or = or <2 x i64 > %shift_amt , splat (i64 32 )
0 commit comments