Skip to content

Commit b45c78b

Browse files
committed
R600: Add checks for urem/srem by a constant
Make sure this uses the faster expansion using magic constants to avoid the full division path. llvm-svn: 226734
1 parent c1988f3 commit b45c78b

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

llvm/test/CodeGen/R600/srem.ll

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
; RUN: llc -march=amdgcn -mcpu=SI < %s
1+
; RUN: llc -march=amdgcn -mcpu=SI < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
22
; RUN: llc -march=r600 -mcpu=redwood < %s
33

44
define void @srem_i32(i32 addrspace(1)* %out, i32 addrspace(1)* %in) {
@@ -17,6 +17,19 @@ define void @srem_i32_4(i32 addrspace(1)* %out, i32 addrspace(1)* %in) {
1717
ret void
1818
}
1919

20+
; FUNC-LABEL: {{^}}srem_i32_7:
21+
; SI: v_mov_b32_e32 [[MAGIC:v[0-9]+]], 0x92492493
22+
; SI: v_mul_hi_i32 {{v[0-9]+}}, [[MAGIC]],
23+
; SI: v_mul_lo_i32
24+
; SI: v_sub_i32
25+
; SI: s_endpgm
26+
define void @srem_i32_7(i32 addrspace(1)* %out, i32 addrspace(1)* %in) {
27+
%num = load i32 addrspace(1) * %in
28+
%result = srem i32 %num, 7
29+
store i32 %result, i32 addrspace(1)* %out
30+
ret void
31+
}
32+
2033
define void @srem_v2i32(<2 x i32> addrspace(1)* %out, <2 x i32> addrspace(1)* %in) {
2134
%den_ptr = getelementptr <2 x i32> addrspace(1)* %in, i32 1
2235
%num = load <2 x i32> addrspace(1) * %in

llvm/test/CodeGen/R600/urem.ll

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,21 @@ define void @test_urem_i32(i32 addrspace(1)* %out, i32 addrspace(1)* %in) {
1717
ret void
1818
}
1919

20+
; FUNC-LABEL: {{^}}test_urem_i32_7:
21+
; SI: v_mov_b32_e32 [[MAGIC:v[0-9]+]], 0x24924925
22+
; SI: v_mul_hi_u32 {{v[0-9]+}}, [[MAGIC]]
23+
; SI: v_subrev_i32
24+
; SI: v_mul_lo_i32
25+
; SI: v_sub_i32
26+
; SI: buffer_store_dword
27+
; SI: s_endpgm
28+
define void @test_urem_i32_7(i32 addrspace(1)* %out, i32 addrspace(1)* %in) {
29+
%num = load i32 addrspace(1) * %in
30+
%result = urem i32 %num, 7
31+
store i32 %result, i32 addrspace(1)* %out
32+
ret void
33+
}
34+
2035
; FUNC-LABEL: {{^}}test_urem_v2i32:
2136
; SI: s_endpgm
2237
; EG: CF_END

0 commit comments

Comments
 (0)