Legalize bnot using xor with -1.

This commit is contained in:
Dan Gohman
2018-05-05 11:01:49 -05:00
parent bb612af37a
commit 5b69930e03
2 changed files with 10 additions and 1 deletions

View File

@@ -32,7 +32,8 @@ ebb0(v0: i32):
function %bitclear(i32, i32) -> i32 {
ebb0(v0: i32, v1: i32):
v2 = band_not v0, v1
; check: bnot
; check: iconst.i32 -1
; check: bxor
; check: band
return v2
}

View File

@@ -252,6 +252,14 @@ for inst_not, inst in [
a << inst(x, a1)
))
# Expand bnot using xor.
expand.legalize(
a << bnot(x),
Rtl(
y << iconst(imm64(-1)),
a << bxor(x, y)
))
# Floating-point sign manipulations.
for ty, minus_zero in [
(types.f32, f32const(ieee32.bits(0x80000000))),