Handle isplit when it is not the result of a legalization

This commit is contained in:
bjorn3
2019-06-17 20:08:46 +02:00
committed by Dan Gohman
parent c1553194a7
commit 6f7d57a71f
2 changed files with 49 additions and 9 deletions

View File

@@ -57,6 +57,31 @@ fn legalize_inst(
}
} else if opcode.is_branch() {
split::simplify_branch_arguments(&mut pos.func.dfg, inst);
} else if opcode == ir::Opcode::Isplit {
pos.use_srcloc(inst);
let arg = match pos.func.dfg[inst] {
ir::InstructionData::Unary {
arg,
..
} => pos.func.dfg.resolve_aliases(arg),
_ => panic!("Expected isplit: {}", pos.func.dfg.display_inst(inst, None)),
};
let res = pos.func.dfg.inst_results(inst).to_vec();
assert_eq!(res.len(), 2);
let (resl, resh) = (res[0], res[1]); // Prevent borrowck error
let curpos = pos.position();
let srcloc = pos.srcloc();
let (xl, xh) = split::isplit(pos.func, cfg, curpos, srcloc, arg);
pos.func.dfg.clear_results(inst);
pos.remove_inst();
pos.func.dfg.change_to_alias(resl, xl);
pos.func.dfg.change_to_alias(resh, xh);
return true;
}
match pos.func.update_encoding(inst, isa) {