Skip to content

Commit c9b533d

Browse files
committed
Reduce 64-bit shl to 32-bit based on range metadata
Signed-off-by: John Lu <[email protected]>
1 parent 8a5fdc1 commit c9b533d

File tree

1 file changed

+34
-4
lines changed

1 file changed

+34
-4
lines changed

llvm/test/CodeGen/AMDGPU/shl64_reduce.ll

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,39 @@ define i64 @shl_metadata(i64 %arg0, ptr %arg1.ptr) {
2121
; CHECK-LABEL: shl_metadata:
2222
; CHECK: ; %bb.0:
2323
; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24+
; CHECK-NEXT: flat_load_dword v1, v[2:3]
25+
; CHECK-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)
26+
; CHECK-NEXT: v_lshlrev_b32_e32 v1, v1, v0
27+
; CHECK-NEXT: v_mov_b32_e32 v0, 0
28+
; CHECK-NEXT: s_setpc_b64 s[30:31]
29+
%shift.amt = load i64, ptr %arg1.ptr, !range !0, !noundef !{}
30+
%shl = shl i64 %arg0, %shift.amt
31+
ret i64 %shl
32+
}
33+
34+
define i64 @shl_metadata_two_ranges(i64 %arg0, ptr %arg1.ptr) {
35+
; CHECK-LABEL: shl_metadata_two_ranges:
36+
; CHECK: ; %bb.0:
37+
; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
38+
; CHECK-NEXT: flat_load_dword v1, v[2:3]
39+
; CHECK-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)
40+
; CHECK-NEXT: v_lshlrev_b32_e32 v1, v1, v0
41+
; CHECK-NEXT: v_mov_b32_e32 v0, 0
42+
; CHECK-NEXT: s_setpc_b64 s[30:31]
43+
%shift.amt = load i64, ptr %arg1.ptr, !range !1, !noundef !{}
44+
%shl = shl i64 %arg0, %shift.amt
45+
ret i64 %shl
46+
}
47+
48+
define i64 @shl_metadata_out_of_range(i64 %arg0, ptr %arg1.ptr) {
49+
; CHECK-LABEL: shl_metadata_out_of_range:
50+
; CHECK: ; %bb.0:
51+
; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2452
; CHECK-NEXT: flat_load_dword v2, v[2:3]
2553
; CHECK-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)
2654
; CHECK-NEXT: v_lshlrev_b64 v[0:1], v2, v[0:1]
2755
; CHECK-NEXT: s_setpc_b64 s[30:31]
28-
%shift.amt = load i64, ptr %arg1.ptr, !range !0
56+
%shift.amt = load i64, ptr %arg1.ptr, !range !2, !noundef !{}
2957
%shl = shl i64 %arg0, %shift.amt
3058
ret i64 %shl
3159
}
@@ -39,7 +67,7 @@ define <2 x i64> @shl_v2_metadata(<2 x i64> %arg0, ptr %arg1.ptr) {
3967
; CHECK-NEXT: v_lshlrev_b64 v[0:1], v4, v[0:1]
4068
; CHECK-NEXT: v_lshlrev_b64 v[2:3], v6, v[2:3]
4169
; CHECK-NEXT: s_setpc_b64 s[30:31]
42-
%shift.amt = load <2 x i64>, ptr %arg1.ptr, !range !0
70+
%shift.amt = load <2 x i64>, ptr %arg1.ptr, !range !0, !noundef !{}
4371
%shl = shl <2 x i64> %arg0, %shift.amt
4472
ret <2 x i64> %shl
4573
}
@@ -55,7 +83,7 @@ define <3 x i64> @shl_v3_metadata(<3 x i64> %arg0, ptr %arg1.ptr) {
5583
; CHECK-NEXT: v_lshlrev_b64 v[0:1], v8, v[0:1]
5684
; CHECK-NEXT: v_lshlrev_b64 v[2:3], v10, v[2:3]
5785
; CHECK-NEXT: s_setpc_b64 s[30:31]
58-
%shift.amt = load <3 x i64>, ptr %arg1.ptr, !range !0
86+
%shift.amt = load <3 x i64>, ptr %arg1.ptr, !range !0, !noundef !{}
5987
%shl = shl <3 x i64> %arg0, %shift.amt
6088
ret <3 x i64> %shl
6189
}
@@ -74,12 +102,14 @@ define <4 x i64> @shl_v4_metadata(<4 x i64> %arg0, ptr %arg1.ptr) {
74102
; CHECK-NEXT: v_lshlrev_b64 v[4:5], v13, v[4:5]
75103
; CHECK-NEXT: v_lshlrev_b64 v[6:7], v15, v[6:7]
76104
; CHECK-NEXT: s_setpc_b64 s[30:31]
77-
%shift.amt = load <4 x i64>, ptr %arg1.ptr, !range !0
105+
%shift.amt = load <4 x i64>, ptr %arg1.ptr, !range !0, !noundef !{}
78106
%shl = shl <4 x i64> %arg0, %shift.amt
79107
ret <4 x i64> %shl
80108
}
81109

82110
!0 = !{i64 32, i64 64}
111+
!1 = !{i64 32, i64 38, i64 42, i64 48}
112+
!2 = !{i64 31, i64 38, i64 42, i64 48}
83113

84114
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
85115
; Test range with an "or X, 16"

0 commit comments

Comments
 (0)