cranelift: Remove brz and brnz (#5630)

Remove the brz and brnz instructions, as their behavior is now redundant with brif.
This commit is contained in:
Trevor Elliott
2023-01-30 12:34:56 -08:00
committed by GitHub
parent 77cf547f41
commit a5698cedf8
247 changed files with 2947 additions and 3754 deletions

View File

@@ -351,7 +351,7 @@ impl DominatorTree {
/// post-order. Split-invariant means that if a block is split in two, we get the same
/// post-order except for the insertion of the new block header at the split point.
fn push_successors(&mut self, func: &Function, block: Block) {
for inst in func.layout.block_likely_branches(block) {
if let Some(inst) = func.layout.last_inst(block) {
match func.dfg.analyze_branch(inst) {
BranchInfo::SingleDest(succ) => {
self.push_if_unseen(succ.block(&func.dfg.value_lists))
@@ -653,11 +653,14 @@ mod tests {
let v0 = func.dfg.append_block_param(block0, I32);
let block1 = func.dfg.make_block();
let block2 = func.dfg.make_block();
let trap_block = func.dfg.make_block();
let mut cur = FuncCursor::new(&mut func);
cur.insert_block(block0);
cur.ins().brnz(v0, block2, &[]);
cur.ins().brif(v0, block2, &[], trap_block, &[]);
cur.insert_block(trap_block);
cur.ins().trap(TrapCode::User(0));
cur.insert_block(block1);
@@ -674,13 +677,13 @@ mod tests {
// Fall-through-first, prune-at-source DFT:
//
// block0 {
// brnz block2 {
// brif block2 {
// trap
// block2 {
// return
// } block2
// } block0
assert_eq!(dt.cfg_postorder(), &[block2, block0]);
assert_eq!(dt.cfg_postorder(), &[trap_block, block2, block0]);
let v2_def = cur.func.dfg.value_def(v2).unwrap_inst();
assert!(!dt.dominates(v2_def, block0, &cur.func.layout));
@@ -714,8 +717,7 @@ mod tests {
let jmp_block3_block1 = cur.ins().jump(block1, &[]);
cur.insert_block(block1);
let br_block1_block0 = cur.ins().brnz(cond, block0, &[]);
let jmp_block1_block2 = cur.ins().jump(block2, &[]);
let br_block1_block0_block2 = cur.ins().brif(cond, block0, &[], block2, &[]);
cur.insert_block(block2);
cur.ins().jump(block0, &[]);
@@ -730,7 +732,7 @@ mod tests {
// block3 {
// block3:jump block1 {
// block1 {
// block1:brnz block0 {
// block1:brif block0 {
// block1:jump block2 {
// block2 {
// block2:jump block0 (seen)
@@ -738,7 +740,7 @@ mod tests {
// } block1:jump block2
// block0 {
// } block0
// } block1:brnz block0
// } block1:brif block0
// } block1
// } block3:jump block1
// } block3
@@ -748,12 +750,16 @@ mod tests {
assert_eq!(cur.func.layout.entry_block().unwrap(), block3);
assert_eq!(dt.idom(block3), None);
assert_eq!(dt.idom(block1).unwrap(), jmp_block3_block1);
assert_eq!(dt.idom(block2).unwrap(), jmp_block1_block2);
assert_eq!(dt.idom(block0).unwrap(), br_block1_block0);
assert_eq!(dt.idom(block2).unwrap(), br_block1_block0_block2);
assert_eq!(dt.idom(block0).unwrap(), br_block1_block0_block2);
assert!(dt.dominates(br_block1_block0, br_block1_block0, &cur.func.layout));
assert!(!dt.dominates(br_block1_block0, jmp_block3_block1, &cur.func.layout));
assert!(dt.dominates(jmp_block3_block1, br_block1_block0, &cur.func.layout));
assert!(dt.dominates(
br_block1_block0_block2,
br_block1_block0_block2,
&cur.func.layout
));
assert!(!dt.dominates(br_block1_block0_block2, jmp_block3_block1, &cur.func.layout));
assert!(dt.dominates(jmp_block3_block1, br_block1_block0_block2, &cur.func.layout));
assert_eq!(
dt.rpo_cmp(block3, block3, &cur.func.layout),
@@ -765,7 +771,7 @@ mod tests {
Ordering::Less
);
assert_eq!(
dt.rpo_cmp(jmp_block3_block1, jmp_block1_block2, &cur.func.layout),
dt.rpo_cmp(jmp_block3_block1, br_block1_block0_block2, &cur.func.layout),
Ordering::Less
);
}