forked from M-Labs/artiq
transforms.cfg_simplifier: handle phi and branch_if properly.
This commit is contained in:
parent
04b0db1a91
commit
14484216ec
|
@ -18,5 +18,15 @@ class CFGSimplifier:
|
||||||
if len(block.instructions) == 1 and \
|
if len(block.instructions) == 1 and \
|
||||||
isinstance(block.terminator(), ir.Branch):
|
isinstance(block.terminator(), ir.Branch):
|
||||||
successor, = block.successors()
|
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.replace_all_uses_with(successor)
|
||||||
block.erase()
|
block.erase()
|
||||||
|
|
Loading…
Reference in New Issue