diff --git a/artiq/compiler/transforms/cfg_simplifier.py b/artiq/compiler/transforms/cfg_simplifier.py index 913d37a6e..6017212d4 100644 --- a/artiq/compiler/transforms/cfg_simplifier.py +++ b/artiq/compiler/transforms/cfg_simplifier.py @@ -18,5 +18,15 @@ class CFGSimplifier: if len(block.instructions) == 1 and \ isinstance(block.terminator(), ir.Branch): successor, = block.successors() + + for insn in set(block.uses): + if isinstance(insn, ir.BranchIf) and \ + ((insn.if_true() == block and insn.if_false() == successor) or + (insn.if_true() == successor and insn.if_false() == block)): + # Our IR doesn't tolerate branch_if %c, %b, %b + insn.replace_with(ir.Branch(successor)) + elif isinstance(insn, ir.Phi): + insn.remove_incoming_block(block) + block.replace_all_uses_with(successor) block.erase()