ARM64 backend, part 1 / 11: misc changes to existing code.
- Add a `simple_legalize()` function that invokes a predetermined set of legalizations, without depending on the details of the current backend design. This will be used by the new backend pipeline. - Separate out `has_side_effect()` from the DCE pass. This will be used by the new backends' lowering code. - Add documentation for the `Arm64Call` relocation type.
This commit is contained in:
@@ -40,6 +40,14 @@ fn is_load_with_defined_trapping(opcode: Opcode, data: &InstructionData) -> bool
|
||||
}
|
||||
}
|
||||
|
||||
/// Does the given instruction have any side-effect that would preclude it from being removed when
|
||||
/// its value is unused?
|
||||
pub fn has_side_effect(func: &Function, inst: Inst) -> bool {
|
||||
let data = &func.dfg[inst];
|
||||
let opcode = data.opcode();
|
||||
trivially_unsafe_for_dce(opcode) || is_load_with_defined_trapping(opcode, data)
|
||||
}
|
||||
|
||||
/// Perform DCE on `func`.
|
||||
pub fn do_dce(func: &mut Function, domtree: &mut DominatorTree) {
|
||||
let _tt = timing::dce();
|
||||
@@ -50,10 +58,7 @@ pub fn do_dce(func: &mut Function, domtree: &mut DominatorTree) {
|
||||
let mut pos = FuncCursor::new(func).at_bottom(block);
|
||||
while let Some(inst) = pos.prev_inst() {
|
||||
{
|
||||
let data = &pos.func.dfg[inst];
|
||||
let opcode = data.opcode();
|
||||
if trivially_unsafe_for_dce(opcode)
|
||||
|| is_load_with_defined_trapping(opcode, &data)
|
||||
if has_side_effect(pos.func, inst)
|
||||
|| any_inst_results_used(inst, &live, &pos.func.dfg)
|
||||
{
|
||||
for arg in pos.func.dfg.inst_args(inst) {
|
||||
|
||||
Reference in New Issue
Block a user