From 2570932264e4d0435643a846c5f2cdb05e45698b Mon Sep 17 00:00:00 2001 From: whitequark Date: Wed, 16 Dec 2015 19:25:49 +0800 Subject: [PATCH] transforms.interleaver: don't fail on delay-free loops/conditionals. --- artiq/compiler/transforms/interleaver.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/artiq/compiler/transforms/interleaver.py b/artiq/compiler/transforms/interleaver.py index 843f474f6..e26acd54b 100644 --- a/artiq/compiler/transforms/interleaver.py +++ b/artiq/compiler/transforms/interleaver.py @@ -110,8 +110,14 @@ class Interleaver: assert False source_terminator = source_block.terminator() - if isinstance(source_terminator, (ir.Parallel, ir.Branch)): + if isinstance(source_terminator, ir.Parallel): source_terminator.replace_with(ir.Branch(source_terminator.target())) + elif isinstance(source_terminator, ir.Branch): + pass + elif isinstance(source_terminator, ir.BranchIf): + # Skip a delay-free loop/conditional + source_block = postdom_tree.immediate_dominator(source_block) + assert (source_block is not None) elif isinstance(source_terminator, ir.Return): break elif isinstance(source_terminator, ir.Delay):