peepmatic: Make peepmatic optional to enable
Rather than outright replacing parts of our existing peephole optimizations passes, this makes peepmatic an optional cargo feature that can be enabled. This allows us to take a conservative approach with enabling peepmatic everywhere, while also allowing us to get it in-tree and make it easier to collaborate on improving it quickly.
This commit is contained in:
@@ -7,13 +7,14 @@ function %indir_udiv32(i32) -> i32 {
|
||||
block0(v0: i32):
|
||||
v1 = iconst.i32 7
|
||||
v2 = udiv v0, v1
|
||||
; check: v4 = iconst.i32 0x2492_4925
|
||||
; nextln: v5 = umulhi v0, v4
|
||||
; nextln: v6 = isub v0, v5
|
||||
; nextln: v7 = ushr_imm v6, 1
|
||||
; nextln: v8 = iadd v7, v5
|
||||
; nextln: v9 = ushr_imm v8, 2
|
||||
; nextln: v2 -> v9
|
||||
; check: iconst.i32 7
|
||||
; check: iconst.i32 0x2492_4925
|
||||
; check: umulhi v0, v3
|
||||
; check: isub v0, v4
|
||||
; check: ushr_imm v5, 1
|
||||
; check: iadd v6, v4
|
||||
; check: v8 = ushr_imm v7, 2
|
||||
; check: v2 -> v8
|
||||
return v2
|
||||
}
|
||||
|
||||
@@ -21,12 +22,13 @@ function %indir_sdiv32(i32) -> i32 {
|
||||
block0(v0: i32):
|
||||
v1 = iconst.i32 -17
|
||||
v2 = sdiv v0, v1
|
||||
; check: v4 = iconst.i32 0xffff_ffff_8787_8787
|
||||
; nextln: v5 = smulhi v0, v4
|
||||
; nextln: v6 = sshr_imm v5, 3
|
||||
; nextln: v7 = ushr_imm v6, 31
|
||||
; nextln: v8 = iadd v6, v7
|
||||
; nextln: v2 -> v8
|
||||
; check: iconst.i32 -17
|
||||
; check: iconst.i32 0xffff_ffff_8787_8787
|
||||
; check: smulhi v0, v3
|
||||
; check: sshr_imm v4, 3
|
||||
; check: ushr_imm v5, 31
|
||||
; check: v7 = iadd v5, v6
|
||||
; check: v2 -> v7
|
||||
return v2
|
||||
}
|
||||
|
||||
@@ -34,10 +36,11 @@ function %indir_udiv64(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
v1 = iconst.i64 1337
|
||||
v2 = udiv v0, v1
|
||||
; check: v4 = iconst.i64 0xc411_9d95_2866_a139
|
||||
; nextln: v5 = umulhi v0, v4
|
||||
; nextln: v6 = ushr_imm v5, 10
|
||||
; nextln: v2 -> v6
|
||||
; check: iconst.i64 1337
|
||||
; check: iconst.i64 0xc411_9d95_2866_a139
|
||||
; check: umulhi v0, v3
|
||||
; check: v5 = ushr_imm v4, 10
|
||||
; check: v2 -> v5
|
||||
return v2
|
||||
}
|
||||
|
||||
@@ -45,11 +48,12 @@ function %indir_sdiv64(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
v1 = iconst.i64 -90210
|
||||
v2 = sdiv v0, v1
|
||||
; check: v4 = iconst.i64 0xd181_4ee8_939c_b8bb
|
||||
; nextln: v5 = smulhi v0, v4
|
||||
; nextln: v6 = sshr_imm v5, 14
|
||||
; nextln: v7 = ushr_imm v6, 63
|
||||
; nextln: v8 = iadd v6, v7
|
||||
; nextln: v2 -> v8
|
||||
; check: iconst.i64 0xffff_ffff_fffe_9f9e
|
||||
; check: iconst.i64 0xd181_4ee8_939c_b8bb
|
||||
; check: smulhi v0, v3
|
||||
; check: sshr_imm v4, 14
|
||||
; check: ushr_imm v5, 63
|
||||
; check: v7 = iadd v5, v6
|
||||
; check: v2 -> v7
|
||||
return v2
|
||||
}
|
||||
|
||||
@@ -58,3 +58,4 @@ block0(v0: i64):
|
||||
; nextln: v2 = iadd v0, v1
|
||||
; nextln: return v2
|
||||
; nextln: }
|
||||
|
||||
|
||||
@@ -44,37 +44,6 @@ block0(v0: i32):
|
||||
; nextln: return v3
|
||||
; nextln: }
|
||||
|
||||
function %ifcmp_imm(i32) -> i32 {
|
||||
block0(v0: i32):
|
||||
v1 = iconst.i32 2
|
||||
v2 = ifcmp v0, v1
|
||||
brif eq v2, block1
|
||||
jump block2
|
||||
|
||||
block1:
|
||||
v3 = iconst.i32 1
|
||||
return v3
|
||||
|
||||
block2:
|
||||
v4 = iconst.i32 2
|
||||
return v4
|
||||
}
|
||||
; sameln: function %ifcmp_imm
|
||||
; nextln: block0(v0: i32):
|
||||
; nextln: v1 = iconst.i32 2
|
||||
; nextln: v2 = ifcmp_imm v0, 2
|
||||
; nextln: brif eq v2, block1
|
||||
; nextln: jump block2
|
||||
; nextln:
|
||||
; nextln: block1:
|
||||
; nextln: v3 = iconst.i32 1
|
||||
; nextln: return v3
|
||||
; nextln:
|
||||
; nextln: block2:
|
||||
; nextln: v4 = iconst.i32 2
|
||||
; nextln: return v4
|
||||
; nextln: }
|
||||
|
||||
function %brz_bint(i32) {
|
||||
block0(v0: i32):
|
||||
v3 = icmp_imm slt v0, 0
|
||||
|
||||
Reference in New Issue
Block a user