2
0
mirror of https://github.com/m-labs/artiq.git synced 2024-12-23 18:34:02 +08:00
artiq/artiq/compiler/transforms
whitequark cb3b811fd7 compiler: maintain both the IR and iodelay forms of delay expressions.
After this commit, the delay instruction (again) does not generate
any LLVM IR: all heavy lifting is relegated to the delay and delay_mu
intrinsics. When the interleave transform needs to adjust the global
timeline, it synthesizes a delay_mu intrinsnic. This way,
the interleave transformation becomes composable, as the input and
the output IR invariants are the same.

Also, code generation is adjusted so that a basic block is split off
not only after a delay call, but also before one; otherwise, e.g.,
code immediately at the beginning of a `with parallel:` branch
would have no choice but to execute after another branch has already
advanced the timeline.

This takes care of issue #1 described in 50e7b44 and is a step
to solving issue #2.
2015-11-21 03:22:47 +08:00
..
__init__.py transforms.interleaver: add boilerplate. 2015-11-17 05:22:20 +03:00
artiq_ir_generator.py compiler: maintain both the IR and iodelay forms of delay expressions. 2015-11-21 03:22:47 +08:00
asttyped_rewriter.py compiler: add delay IR instruction. 2015-11-17 05:16:43 +03:00
dead_code_eliminator.py LocalAccessValidator: relax restrictions to accept def f(); def g(). 2015-08-22 13:31:09 -07:00
inferencer.py transforms.inferencer: fix typo. 2015-11-17 00:02:15 +03:00
int_monomorphizer.py Add IntMonomorphizer. 2015-07-02 19:57:27 +03:00
interleaver.py compiler: maintain both the IR and iodelay forms of delay expressions. 2015-11-21 03:22:47 +08:00
iodelay_estimator.py transforms.iodelay_estimator: fail statements with indeterminate delay inside with parallel. 2015-11-20 17:10:25 +08:00
llvm_ir_generator.py compiler: maintain both the IR and iodelay forms of delay expressions. 2015-11-21 03:22:47 +08:00