forked from M-Labs/artiq
1
0
Fork 0
Commit Graph

1652 Commits

Author SHA1 Message Date
whitequark 3fbee2707b analyses.domination: consider unreachable blocks dominated by any other.
As a result, the dominator tree can now process arbitrary (reducible)
CFGs and we do not run DCE before analyses, risking loss of
correspondence to the AST, which would arbitrarily silence analyses.
2015-12-18 16:39:52 +08:00
Sebastien Bourdeauducq 59a3ea4f15 gateware/rtio/analyzer: fix bus write 2015-12-18 15:44:20 +08:00
Sebastien Bourdeauducq f431add20e runtime/analyzer: fix zero data corner case, handle cache 2015-12-18 15:17:22 +08:00
Sebastien Bourdeauducq b3abc9baf9 runtime/net_server: fix PCB filter 2015-12-18 01:14:57 +08:00
Sebastien Bourdeauducq 80172f9548 frontend/coretool: minor cleanup 2015-12-18 00:18:39 +08:00
Sebastien Bourdeauducq 73794b5c25 runtime: send analyzer data 2015-12-18 00:13:22 +08:00
Sebastien Bourdeauducq 6ae41e6024 runtime/net_server: refactor to support multiple services 2015-12-17 16:55:39 +08:00
whitequark 8cb7844621 transforms.interleaver: unroll loops. 2015-12-17 00:52:22 +08:00
whitequark 5dd1fc993e transforms.dead_code_eliminator: also remove dead instructions. 2015-12-17 00:52:22 +08:00
Sebastien Bourdeauducq 5e38cad64c test/coredevice: partial update to new APIs 2015-12-16 19:45:57 +08:00
whitequark 2570932264 transforms.interleaver: don't fail on delay-free loops/conditionals. 2015-12-16 19:26:17 +08:00
whitequark 69cdeaf706 transforms.interleaver: don't fail on degenerate parallel blocks. 2015-12-16 19:26:17 +08:00
Sebastien Bourdeauducq 4def561710 targets: integrate RTIO analyzer 2015-12-16 17:36:52 +08:00
Sebastien Bourdeauducq afaad270cc rtio/analyzer: fix superficial mistakes 2015-12-16 17:36:36 +08:00
whitequark f8eaeaa43f compiler: explicitly represent loops in IR. 2015-12-16 15:33:26 +08:00
Sebastien Bourdeauducq 33860820b9 gateware/soc: use new SDRAM API call 2015-12-16 14:59:35 +08:00
whitequark 35acc33ef6 validators.escape: don't fail on quoted values in lhs. 2015-12-16 13:57:02 +08:00
whitequark 8751d2ee6c Delay.{expr→interval}. 2015-12-16 13:57:02 +08:00
Robert Jördens bf29e8ddc6 kc705: make config[] usage consistent 2015-12-15 12:14:30 -07:00
Sebastien Bourdeauducq 4362f97d67 gateware/rtio/analyzer: complete, untested 2015-12-14 23:53:14 +08:00
whitequark e755e1ba9e validators.escape: support arrays in multiple assignment. 2015-12-14 16:31:03 +08:00
whitequark 1860364778 protocols.pyon: support artiq.int (fixes #188). 2015-12-14 16:26:02 +08:00
Sebastien Bourdeauducq b5f2e178f6 rtio/analyzer: message encoder 2015-12-14 00:37:08 +08:00
Sebastien Bourdeauducq eac2e2ad0b gui/experiments: fix Qt compatibility issue with QHeaderView.setResizeMode 2015-12-13 19:32:17 +08:00
Sebastien Bourdeauducq eeb53c5aa5 coredevice/comm: compare software and gateware versions. Closes #97 2015-12-11 22:56:40 +08:00
Sebastien Bourdeauducq 0eb8079b45 gui: fix some dock sizing issues 2015-12-11 00:20:20 +08:00
whitequark 25027f6907 compiler: fix tests. 2015-12-10 23:16:36 +08:00
whitequark 2d906daf7f compiler: implement 'with watchdog' support. 2015-12-10 23:11:00 +08:00
whitequark 64f19b84f2 compiler.testbench.llvmgen: fix. 2015-12-10 23:08:05 +08:00
whitequark 4888e897b9 compiler: refactor to use builtins.TInt{32,64}. (NFC) 2015-12-10 23:06:23 +08:00
whitequark 143bae4bd3 compiler.builtins: {fn→obj}_{serial,parallel}. 2015-12-10 23:03:28 +08:00
whitequark c660028abf transforms.llvm_ir_generator: fix reraise inside EH block. 2015-12-10 23:02:32 +08:00
whitequark 3ec9b677b2 Revert "transforms.artiq_ir_generator: treat builtins in 'with' syntactically."
This reverts commit ccc993071b.
2015-12-10 22:25:15 +08:00
whitequark ccc993071b transforms.artiq_ir_generator: treat builtins in 'with' syntactically. 2015-12-10 21:29:16 +08:00
whitequark 22dab0c7cc compiler: clarify confusing comment (NFC). 2015-12-10 20:50:28 +08:00
Sebastien Bourdeauducq 93317d48c9 gui/explorer: file selector for experiments outside repos 2015-12-09 19:13:57 +08:00
Sebastien Bourdeauducq 7b2580583a master: allow remote listing of directories 2015-12-08 19:24:04 +08:00
Sebastien Bourdeauducq ed08352f67 gui: improve error handling 2015-12-08 18:58:20 +08:00
Sebastien Bourdeauducq 0da89557da gui: basic support for opening files outside repository 2015-12-08 17:52:38 +08:00
Sebastien Bourdeauducq 238ee9adb4 gui/experiments: support recomputing all arguments of an experiment 2015-12-07 00:55:32 +08:00
Sebastien Bourdeauducq 5e14afde3e scheduler: use current (last scanned) repo revision instead of HEAD 2015-12-06 19:00:41 +08:00
Sebastien Bourdeauducq f99c53d179 client: block until end of repository scan 2015-12-06 18:41:20 +08:00
Sebastien Bourdeauducq ea6dcb2743 master: repository -> experiment_db 2015-12-06 18:39:27 +08:00
Sebastien Bourdeauducq 8467013160 master,gui: support recomputation+reset of arguments 2015-12-06 17:27:15 +08:00
Sebastien Bourdeauducq 1cba685326 gui/experiments: fix StringEntry update 2015-12-06 17:21:53 +08:00
Sebastien Bourdeauducq 3edf52232c protocols/pc_rpc: support coroutine methods 2015-12-06 12:52:41 +08:00
Sebastien Bourdeauducq e8bd24d539 gui/experiments: add argument recompute buttons. Closes #171 2015-12-05 17:51:12 +08:00
Sebastien Bourdeauducq 2871b5e078 gui: typos 2015-12-05 14:47:20 +08:00
Robert Jördens 7886827b80 CSRConstant: also port DDS constants 2015-12-04 18:27:59 +08:00
Robert Jördens 5db1f9794e top.add_constant() -> top.config[] (CSRConstant)
This is to be synchronized with the corresponding change in misoc.
2015-12-04 18:27:54 +08:00
Sebastien Bourdeauducq 3bc119f3f0 gui/shortcuts: default state is no shortcuts, hide clear/open/submit widgets 2015-12-03 16:30:37 +08:00
whitequark 8cb2215edb transforms.inferencer: only instantiate RPC function types, not regular. 2015-12-02 21:48:14 +08:00
Sebastien Bourdeauducq b6260615a6 gui/log: better-looking new dock feature 2015-12-01 22:51:15 +08:00
Sebastien Bourdeauducq 08abc2e00a gui/shortcuts: make global shortcuts really global 2015-12-01 18:49:23 +08:00
Sebastien Bourdeauducq de54f57fbe gui/experiments: fix vertical resizing of experiment dock 2015-12-01 18:33:43 +08:00
Sebastien Bourdeauducq 9baf54d25e gui/experiments: fix text entry update problem with shortcuts 2015-12-01 18:31:56 +08:00
Sebastien Bourdeauducq 03f92f2de2 gui/experiments: in experiment dock, fix submit button, add reqterm button 2015-12-01 18:26:46 +08:00
Sebastien Bourdeauducq d39126d69e gui/experiments: show status bar message on mass termination 2015-12-01 18:26:01 +08:00
Sebastien Bourdeauducq f73c967b3e gui/shortcuts: fix status bar usage 2015-12-01 18:22:12 +08:00
Sebastien Bourdeauducq bbabc7bb8d gui/shortcuts: make shrinkable, add open button 2015-12-01 18:04:43 +08:00
Sebastien Bourdeauducq ff4c03014c gui/shortcuts: integrate with experiment manager 2015-12-01 17:10:44 +08:00
Sebastien Bourdeauducq 741dfce38c gui/scan: enforce valid sequence input 2015-11-30 23:10:12 +08:00
Sebastien Bourdeauducq a6f3055cd3 scan: enforce max >= min 2015-11-30 20:01:25 +08:00
Sebastien Bourdeauducq 277e26434f gui/experiments: prevent comboboxes and spinboxes from stealing focus via mouse wheel 2015-11-30 19:53:40 +08:00
Sebastien Bourdeauducq cabcdb3784 gui/experiments: support setting repository revision 2015-11-30 18:25:46 +08:00
Sebastien Bourdeauducq 24a33be9df gui/experiments: support setting submission scheduling/options 2015-11-30 17:18:31 +08:00
Sebastien Bourdeauducq afa8148b2b gui/experiments: save/restore state 2015-11-30 11:40:50 +08:00
Sebastien Bourdeauducq 2904b31e7e protocols/pyon: fix formatting, support OrderedDict 2015-11-30 11:40:34 +08:00
Sebastien Bourdeauducq 23a84500a3 gui/experiments: support scan widgets 2015-11-30 00:21:27 +08:00
whitequark 26630ea4b6 language.core: make int compatible with range() (fixes #183). 2015-11-28 08:29:58 +08:00
Sebastien Bourdeauducq 3825428dbf gui/experiments: support setting values for simple entries 2015-11-28 00:19:47 +08:00
Sebastien Bourdeauducq c382fac8f2 gui: experiment docks (WIP) 2015-11-27 19:30:05 +08:00
Sebastien Bourdeauducq 6671bb33a4 gui/log: improve vertical scrolling 2015-11-27 19:18:20 +08:00
whitequark 3c9b53b07b compiler.embedding: add fast path for inference for lists of scalars in a host object. 2015-11-27 19:06:04 +08:00
whitequark 237e983770 compiler.types: replace isinstance() with .__class__==.
This provides a 50% speedup.
2015-11-27 18:22:55 +08:00
whitequark 6122fd70ca compiler.types: TVar.find: improve path compression.
After this change, the compiler's complexity is nearly linear
even when very large arrays are used.
2015-11-27 18:08:46 +08:00
whitequark bf1a583fda compiler.types: fix TVar.find() for very large paths. 2015-11-27 18:02:27 +08:00
whitequark 00164390a1 compiler.types: fix TDelay.unify(TVar()). 2015-11-27 17:10:36 +08:00
whitequark 4b410ce720 compiler.testbench.perf_embedding: fix. 2015-11-27 17:08:45 +08:00
whitequark 16ae0fb6eb compiler.embedding: instantiate RPC method types (fixes #180). 2015-11-27 16:29:13 +08:00
whitequark 0a794fe7e4 compiler.embedding: instantiate type of even the first embedding of an RPC. 2015-11-27 14:55:47 +08:00
whitequark cde21bcd26 compiler.embedding: instantiate RPC function types (#180). 2015-11-27 14:29:15 +08:00
whitequark 3b529c6f90 compiler.types: implement map. 2015-11-26 11:16:39 +08:00
whitequark e2f7d1047d compiler.testbench: fix after e1cd2ccd. 2015-11-26 10:24:14 +08:00
Sebastien Bourdeauducq e1e082e2ec devices/thorlabs_tcube: minor cleanup 2015-11-25 21:43:22 +08:00
Sebastien Bourdeauducq 178f3cd815 devices/thorlabs_tcube: improve debug logging 2015-11-25 15:28:34 +08:00
Sebastien Bourdeauducq 3c0efb3ad5 gui/log: fix layout problems 2015-11-24 23:04:01 +08:00
whitequark c6ccc87f54 worker: gracefully handle compile errors (fixes #179). 2015-11-24 22:34:33 +08:00
whitequark d14ad6727a compiler.embedding: avoid showing wildly incorrect suggestions. 2015-11-24 17:50:46 +08:00
whitequark 14993e89e2 compiler.embedding: show suggestions for mistyped host object attributes. 2015-11-24 17:44:58 +08:00
whitequark e1cd2ccd40 compiler: pull in dependencies in more finely grained way (fixes #181). 2015-11-24 17:32:04 +08:00
Sebastien Bourdeauducq bda11149df devices/thorlabs_tcube: fix more style issues 2015-11-24 17:10:31 +08:00
Sebastien Bourdeauducq 76eadc0a61 devices/thorlabs_tcube: remove unnecessary {read,write}_exactly functions 2015-11-24 16:55:18 +08:00
whitequark f5187eb140 Remove leftover artiq/transforms/. 2015-11-24 16:00:32 +08:00
Sebastien Bourdeauducq e5b58b50aa remove old compiler code 2015-11-24 15:52:36 +08:00
Sebastien Bourdeauducq 2503dcd837 devices/thorlabs_tcube: remove unnecessary attribute 2015-11-24 15:51:55 +08:00
Sebastien Bourdeauducq 91a8acf304 protocols/pc_rpc: properly convert FullArgSpec to dict 2015-11-24 15:51:13 +08:00
whitequark c14299dca8 Merge branch 'new-py2llvm' 2015-11-24 03:01:54 +08:00
whitequark 66b1388a63 transforms.artiq_ir_generator: never put TVars in dicts.
A TVar looks just like whatever it points to, but it does not
compare equal, nor is its hash the same.
2015-11-24 02:59:15 +08:00
whitequark fec5c2ebf0 transforms.interleaver: add a diagnostic for interleave inlining failure. 2015-11-24 02:57:03 +08:00
whitequark 8527e306c3 testbench.embedding: use dmgr to get core and export it. 2015-11-24 02:02:34 +08:00
whitequark 2bfc72fba9 testbench.embedding: fix ref_period mismatch. 2015-11-24 00:54:20 +08:00
whitequark d3f0059cab compiler.iodelay: correctly fold max(0, [0, ]...). 2015-11-24 00:46:55 +08:00
whitequark 9bc62fa3d2 transforms.iodelay_estimator: correctly handle functions with empty body. 2015-11-24 00:46:26 +08:00
whitequark 32fe4a8a0c transforms.llvm_ir_generator: don't assert on inlined functions. 2015-11-24 00:20:33 +08:00
whitequark abb36b42be compiler.iodelay: fold and eval SToMU to an int, not float. 2015-11-24 00:19:33 +08:00
whitequark 178ff74da2 transforms.interleaver: inline calls. 2015-11-24 00:02:07 +08:00
whitequark 2a82eb7219 compiler.ir: return dict from Delay.substs, not pair iterable. 2015-11-24 00:01:10 +08:00
whitequark 02f2763ea8 compiler.iodelay: always fully fold SToMU and MUToS. 2015-11-23 23:59:59 +08:00
whitequark f3da227e2d compiler.ir: change argument order for BasicBlock.insert. 2015-11-23 23:59:25 +08:00
whitequark f0fd6cd0ca compiler.algorithms.inline: implement. 2015-11-23 23:58:37 +08:00
whitequark a4525b21cf compiler.ir: print even blocks without predecessors. 2015-11-23 23:55:12 +08:00
whitequark d92b3434a0 compiler.ir: print basic blocks in reverse postorder for readability. 2015-11-23 21:44:38 +08:00
whitequark c73b2c1a78 compiler.ir: fix typo. 2015-11-23 21:21:01 +08:00
whitequark 0bf425eefa compiler.ir: maintain use lists while mutating instructions. 2015-11-23 19:18:58 +08:00
whitequark 03b4e4027c transforms.interleaver: fix IR type/value mismatch. 2015-11-23 18:53:42 +08:00
whitequark 9fc7a42036 pipistrello: expose LED{1..4} as RTIO channels. 2015-11-23 18:26:45 +08:00
whitequark 73845279ae transforms.interleaver: determine when inlining is not necessary. 2015-11-23 18:08:33 +08:00
Sebastien Bourdeauducq de30a4b060 master/worker: print short exception info in first log entry of worker error 2015-11-22 23:26:32 +08:00
whitequark af43c66149 artiq_compile: set file_import prefix, like in artiq_run. 2015-11-21 17:37:14 +08:00
whitequark a01e328b4a transforms.interleaver: don't assume all delay expressions are folded. 2015-11-21 17:24:00 +08:00
whitequark 5cd12ffd28 compiler.iodelay: fold MUToS and SToMU. 2015-11-21 17:23:20 +08:00
whitequark 82b470891f 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.
2015-11-21 03:34:24 +08:00
whitequark 57dd163d37 transforms.artiq_ir_generator: fix decomposition of explicit delay_mu(). 2015-11-21 03:27:06 +08:00
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
whitequark 50e7b44d04 compiler: actually implement interleaving correctly (calls are still broken).
The previous implementation was completely wrong: it always advanced
the global timeline by the same amount as the non-interleaved basic
block did.

The new implementation only advances the global timeline by
the difference between its current time and the virtual time of
the branch, which requires it to adjust the delay instructions.

Previously, the delay expression was present in the IR twice: once
as the iodelay.Expr transformation-visible form, and once as regular
IR instructions, with the latter form being passed to the delay_mu
builtin and advancing the runtime timeline.

As a result of this change, this strategy is no longer valid:
we can meaningfully mutate the iodelay.Expr form but not the IR
instruction form. Thus, IR instructions are no longer generated for
delay expressions, and the LLVM lowering pass now has to lower
the iodelay.Expr objects as well.

This works OK for flat `with parallel:` expressions, but breaks down
outside of `with parallel:` or when calls are present. The reasons
it breaks down are as follows:

  * Outside of `with parallel:`, delay() and delay_mu() must accept
    any expression, but iodelay.Expr's are not nearly expressive
    enough. So, the IR instruction form must actually be kept as well.

  * A delay instruction is currently inserted after a call to
    a user-defined function; this delay instruction introduces
    a point where basic block reordering is possible as well as
    provides delay information. However, the callee knows nothing
    about the context in which it is called, which means that
    the runtime timeline is advanced twice. So, a new terminator
    instruction must be added that combines the properties of delay
    and call instructions (and another for delay and invoke as well).
2015-11-21 00:02:47 +08:00
whitequark 73c358a59a Reformat. 2015-11-20 23:33:06 +08:00
whitequark cb9e7d15bf compiler.iodelay: subtraction certainly shouldn't be commutative. 2015-11-20 22:15:03 +08:00
whitequark cc623c13b4 Reformat. 2015-11-20 21:45:34 +08:00
whitequark d0f86e05d0 transforms.interleaver: add safety check. 2015-11-20 17:27:04 +08:00
whitequark 88b7990714 transforms.iodelay_estimator: fail statements with indeterminate delay inside `with parallel`. 2015-11-20 17:10:25 +08:00
whitequark 28fa68730a Merge branch 'master' into new-py2llvm 2015-11-20 15:55:29 +08:00
Sebastien Bourdeauducq 9826b19c9a gui/scan: adapt layout to show more decimals 2015-11-20 11:20:15 +08:00
whitequark 00ec574d73 transforms.interleaver: implement (without inlining). 2015-11-20 00:03:26 +08:00
whitequark 025bfbe746 transforms.llvm_ir_generator: accept delay instructions.
The delay instruction is just like a branch (discontinuity
in instruction flow), but it also carries metadata: how long
did the execution of its basic block take. This metadata only
matters during inlining and interleaving, so we treat it here
as a mere branch.
2015-11-19 23:55:52 +08:00
whitequark 9639a831bc transforms.artiq_ir_generator: correctly emit IfExpT with control flow.
This can happen with nested if expressions, as well as if
the if expression includes delays.
2015-11-19 23:44:39 +08:00
whitequark 2543daa5cf transforms.artiq_ir_generator: don't emit delay instruction for zero delay.
Call nodes with iodelay=Const(0) can be generated outside of
`with parallel:`, where Interleaver won't and LLVMIRGenerator can't
lower them.
2015-11-19 23:24:46 +08:00
whitequark 58db347e01 transforms.iodelay_estimator: fix uninitialized access. 2015-11-19 23:23:39 +08:00
Sebastien Bourdeauducq 108aed569e gui/models/DictSyncTreeSepModel: add getitem 2015-11-17 22:53:11 +08:00
Sebastien Bourdeauducq 537fa2287b gui/models/DictSyncTreeSepModel: fix item row update 2015-11-17 22:39:46 +08:00
Sebastien Bourdeauducq 7bebc52959 gui/explorer: reduce impact of Qt selection display bug 2015-11-17 22:38:01 +08:00
Sebastien Bourdeauducq 250ab6b489 gui/explorer: tree view 2015-11-17 19:46:26 +08:00
Sebastien Bourdeauducq 9c5db288a5 gui/datasets: tree view 2015-11-17 19:46:17 +08:00
Sebastien Bourdeauducq 107d8f0ffa gui/models: add DictSyncTreeSepModel 2015-11-17 19:45:28 +08:00
whitequark 48a2bb10d5 transforms.interleaver: add boilerplate. 2015-11-17 05:22:20 +03:00
whitequark de9d7eb2e4 compiler: add `delay` IR instruction. 2015-11-17 05:16:43 +03:00
whitequark 956d2afcb2 compiler.iodelay: fold Max further. 2015-11-17 03:06:07 +03:00
whitequark 7d2fca291d compiler.iodelay: add missing import. 2015-11-17 01:30:19 +03:00
whitequark e619154c81 transforms.iodelay_estimator: fix handling of `with sequential`. 2015-11-17 01:22:48 +03:00
whitequark 506725f78a transforms.iodelay_estimator: fix handling of methods. 2015-11-17 01:19:22 +03:00