x86_32: legalize br{z,nz}.i64.
This commit is contained in:
@@ -199,8 +199,6 @@ pub(crate) fn define(insts: &InstructionGroup, imm: &Immediates) -> TransformGro
|
|||||||
let ah = var("ah");
|
let ah = var("ah");
|
||||||
let cc = var("cc");
|
let cc = var("cc");
|
||||||
let block = var("block");
|
let block = var("block");
|
||||||
let block1 = var("block1");
|
|
||||||
let block2 = var("block2");
|
|
||||||
let ptr = var("ptr");
|
let ptr = var("ptr");
|
||||||
let flags = var("flags");
|
let flags = var("flags");
|
||||||
let offset = var("off");
|
let offset = var("off");
|
||||||
@@ -269,8 +267,13 @@ pub(crate) fn define(insts: &InstructionGroup, imm: &Immediates) -> TransformGro
|
|||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
for &ty in &[I128, I64] {
|
||||||
|
let block = var("block");
|
||||||
|
let block1 = var("block1");
|
||||||
|
let block2 = var("block2");
|
||||||
|
|
||||||
narrow.legalize(
|
narrow.legalize(
|
||||||
def!(brz.I128(x, block, vararg)),
|
def!(brz.ty(x, block, vararg)),
|
||||||
vec![
|
vec![
|
||||||
def!((xl, xh) = isplit(x)),
|
def!((xl, xh) = isplit(x)),
|
||||||
def!(
|
def!(
|
||||||
@@ -293,7 +296,7 @@ pub(crate) fn define(insts: &InstructionGroup, imm: &Immediates) -> TransformGro
|
|||||||
);
|
);
|
||||||
|
|
||||||
narrow.legalize(
|
narrow.legalize(
|
||||||
def!(brnz.I128(x, block1, vararg)),
|
def!(brnz.ty(x, block1, vararg)),
|
||||||
vec![
|
vec![
|
||||||
def!((xl, xh) = isplit(x)),
|
def!((xl, xh) = isplit(x)),
|
||||||
def!(brnz(xl, block1, vararg)),
|
def!(brnz(xl, block1, vararg)),
|
||||||
@@ -302,6 +305,7 @@ pub(crate) fn define(insts: &InstructionGroup, imm: &Immediates) -> TransformGro
|
|||||||
def!(brnz(xh, block1, vararg)),
|
def!(brnz(xh, block1, vararg)),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
narrow.legalize(
|
narrow.legalize(
|
||||||
def!(a = popcnt.I128(x)),
|
def!(a = popcnt.I128(x)),
|
||||||
|
|||||||
36
cranelift/filetests/filetests/isa/x86/brz-x86_32-i64.clif
Normal file
36
cranelift/filetests/filetests/isa/x86/brz-x86_32-i64.clif
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
test compile
|
||||||
|
target i686
|
||||||
|
|
||||||
|
function u0:0(i32, i32) -> i32 {
|
||||||
|
block0(v0: i32, v1: i32):
|
||||||
|
v2 = iconcat v0, v1
|
||||||
|
; check: v6 = fill v0
|
||||||
|
; nextln: v3 = icmp_imm eq v6, 0
|
||||||
|
; nextln: v7 = fill v1
|
||||||
|
; nextln: v4 = icmp_imm eq v7, 0
|
||||||
|
; nextln: v5 = band v3, v4
|
||||||
|
; nextln: brnz v5, block1
|
||||||
|
brz v2, block1
|
||||||
|
jump block2
|
||||||
|
block1:
|
||||||
|
trap unreachable
|
||||||
|
block2:
|
||||||
|
trap unreachable
|
||||||
|
}
|
||||||
|
|
||||||
|
function u0:1(i32, i32) -> i32 {
|
||||||
|
block0(v0: i32, v1: i32):
|
||||||
|
v2 = iconcat v0, v1
|
||||||
|
; check: v3 = fill v0
|
||||||
|
; nextln: brnz v3, block1
|
||||||
|
; nextln: fallthrough block3
|
||||||
|
; check: block3:
|
||||||
|
; nextln: v4 = fill.i32 v1
|
||||||
|
; nextln: brnz v4, block1
|
||||||
|
brnz v2, block1
|
||||||
|
jump block2
|
||||||
|
block1:
|
||||||
|
trap unreachable
|
||||||
|
block2:
|
||||||
|
trap unreachable
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user