Skip to content

Commit ddf8b3a

Browse files
committed
Add optimizations for urem
1 parent 0d79d4a commit ddf8b3a

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

cranelift/codegen/src/opts/cprop.isle

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,12 @@
4747
(if-let d (u64_checked_div k1 k2))
4848
(iconst ty (imm64_masked ty d)))
4949

50+
(rule (simplify_skeleton
51+
(urem (iconst_u ty k1)
52+
(iconst_u ty k2)))
53+
(if-let d (u64_checked_rem k1 k2))
54+
(iconst ty (imm64_masked ty d)))
55+
5056
(rule (simplify
5157
(bor (fits_in_64 ty)
5258
(iconst ty (u64_from_imm64 k1))

cranelift/filetests/filetests/egraph/skeleton.clif

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,21 @@ block0:
9595
; return v18 ; v18 = 1
9696
; }
9797

98+
function %cprop_urem() -> i32 {
99+
block0:
100+
v0 = iconst.i32 13
101+
v1 = iconst.i32 7
102+
v2 = urem v0, v1
103+
return v2
104+
}
105+
106+
; function %cprop_urem() -> i32 fast {
107+
; block0:
108+
; v37 = iconst.i32 6
109+
; v2 -> v37
110+
; return v37 ; v37 = 6
111+
; }
112+
98113
function %cprop_sdiv() -> i32 {
99114
block0:
100115
v0 = iconst.i32 -7

0 commit comments

Comments
 (0)