Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
transforms.interleaver: handle function calls (as atomic so far).
Browse files Browse the repository at this point in the history
This commit solves issue #2 described in 50e7b44; a function call
is now a valid decomposition for a delay instruction, and this
metadata is propagated when the interleaver converts delays.

However, the interleaver does not yet detect that a called function
is compound, i.e. it is not correct.
whitequark committed Nov 20, 2015
1 parent 57dd163 commit 150ec71
Showing 2 changed files with 29 additions and 1 deletion.
2 changes: 1 addition & 1 deletion artiq/compiler/transforms/interleaver.py
Original file line number Diff line number Diff line change
@@ -104,7 +104,7 @@ def time_after_block(pair):
new_decomp.loc = old_decomp.loc
source_terminator.basic_block.insert(source_terminator, new_decomp)
else:
assert False # TODO
old_decomp, new_decomp = None, old_decomp

source_terminator.replace_with(ir.Delay(iodelay.Const(target_time_delta), {},
new_decomp, source_terminator.target()))
28 changes: 28 additions & 0 deletions lit-test/test/interleaving/indirect.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# RUN: %python -m artiq.compiler.testbench.jit %s >%t
# RUN: OutputCheck %s --file-to-check=%t

def f():
delay_mu(2)

def g():
with parallel:
with sequential:
print("A", now_mu())
f()
#
print("B", now_mu())
with sequential:
print("C", now_mu())
f()
#
print("D", now_mu())
f()
#
print("E", now_mu())

# CHECK-L: A 0
# CHECK-L: C 0
# CHECK-L: B 2
# CHECK-L: D 2
# CHECK-L: E 4
g()

0 comments on commit 150ec71

Please sign in to comment.