forked from M-Labs/artiq
transforms.interleaver: handle function calls (as atomic so far).
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.
This commit is contained in:
parent
57dd163d37
commit
82b470891f
@ -104,7 +104,7 @@ class Interleaver:
|
||||
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
lit-test/test/interleaving/indirect.py
Normal file
28
lit-test/test/interleaving/indirect.py
Normal file
@ -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()
|
28
lit-test/test/interleaving/indirect_arg.py
Normal file
28
lit-test/test/interleaving/indirect_arg.py
Normal file
@ -0,0 +1,28 @@
|
||||
# RUN: %python -m artiq.compiler.testbench.jit %s >%t
|
||||
# RUN: OutputCheck %s --file-to-check=%t
|
||||
|
||||
def f(n):
|
||||
delay_mu(n)
|
||||
|
||||
def g():
|
||||
with parallel:
|
||||
with sequential:
|
||||
print("A", now_mu())
|
||||
f(2)
|
||||
#
|
||||
print("B", now_mu())
|
||||
with sequential:
|
||||
print("C", now_mu())
|
||||
f(2)
|
||||
#
|
||||
print("D", now_mu())
|
||||
f(2)
|
||||
#
|
||||
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()
|
Loading…
Reference in New Issue
Block a user