mirror of https://github.com/m-labs/artiq.git
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
|
new_decomp.loc = old_decomp.loc
|
||||||
source_terminator.basic_block.insert(source_terminator, new_decomp)
|
source_terminator.basic_block.insert(source_terminator, new_decomp)
|
||||||
else:
|
else:
|
||||||
assert False # TODO
|
old_decomp, new_decomp = None, old_decomp
|
||||||
|
|
||||||
source_terminator.replace_with(ir.Delay(iodelay.Const(target_time_delta), {},
|
source_terminator.replace_with(ir.Delay(iodelay.Const(target_time_delta), {},
|
||||||
new_decomp, source_terminator.target()))
|
new_decomp, source_terminator.target()))
|
||||||
|
|
|
@ -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,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