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

794 Commits

Author SHA1 Message Date
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
whitequark 8cb2215edb transforms.inferencer: only instantiate RPC function types, not regular. 2015-12-02 21:48:14 +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
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
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 73845279ae transforms.interleaver: determine when inlining is not necessary. 2015-11-23 18:08:33 +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 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
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
whitequark b0c6b70971 transforms.asttyped_rewriter: fix class redefinition diagnostic. 2015-11-17 01:17:25 +03:00
whitequark 9e0a5b9404 transforms.iodelay_estimator: skip statements, not modules on _UnknownDelay. 2015-11-17 01:00:10 +03:00
whitequark 44d0a35409 transforms.iodelay_estimator: actually iterate to fixpoint. 2015-11-17 00:59:40 +03:00
whitequark 10f82ff2c8 transforms.iodelay_estimator: do not unify indeterminate delays. 2015-11-17 00:59:09 +03:00
whitequark 841e01a8bb compiler.iodelay: fix typo in Var.__eq__. 2015-11-17 00:53:12 +03:00
whitequark a2d73c8b05 compiler.types: dump type variable iodelay explicitly. 2015-11-17 00:51:56 +03:00
whitequark e67705dc27 compiler.iodelay: fix typo in BinOp.__eq__. 2015-11-17 00:51:37 +03:00
whitequark 629aacec09 compiler.iodelay: add forgotten Conv.__eq__. 2015-11-17 00:51:22 +03:00
whitequark fd46690cf5 compiler: make IR dumps vastly more readable. 2015-11-17 00:23:34 +03:00
whitequark eefa9e2ea6 transforms.inferencer: fix typo. 2015-11-17 00:02:15 +03:00
whitequark c8cfa7c7bd compiler: give suggestions in diagnostics for unbound variable.
This uses the Jaro-Winkler edit distance, which seemed like the best
fit for identifiers, even though it is intended for people's names.
2015-11-15 23:09:40 +03:00
whitequark 9670939ca6 compiler.analyses.domination: fix PostDominatorTree. 2015-11-09 12:49:27 +03:00
whitequark 19fae9181c compiler.analyses.domination: implement new dominator tree algorithm. 2015-11-09 11:51:54 +03:00
whitequark a0c6f75f9b compiler.types: fix obsolete iodelay references. 2015-11-07 15:14:19 +03:00
whitequark 3a1b77ae6b analyses.domination: add PostDominatorTree. 2015-11-01 09:49:39 +03:00
whitequark b91ffa1b38 ir: fix default argument fiasco. 2015-10-14 17:02:59 +03:00
whitequark 5d64df829e transforms.artiq_ir_generator: fix devirtualized call annotation. 2015-10-14 16:12:00 +03:00
whitequark bd5b324fc2 Merge branch 'master' into new-py2llvm 2015-10-13 19:24:45 +03:00
whitequark 32ce33a1f9 transforms.artiq_ir_generator: emit ir.Parallel for with parallel:. 2015-10-09 03:10:39 +03:00
whitequark 48f1f48f09 transforms.artiq_ir_generator: devirtualize method calls. 2015-10-09 02:27:52 +03:00
whitequark 0bb793199f transforms.artiq_ir_generator: devirtualize closure calls. 2015-10-09 01:32:27 +03:00
whitequark 6922bd5638 analyses.devirtualization: look up functions in outer scopes. 2015-10-09 01:32:05 +03:00
whitequark 844d37ff18 compiler.testbench.embedding: allow compiling only. 2015-10-09 01:24:44 +03:00
whitequark 7bcba52d6a compiler.embedding: fix loc. 2015-10-09 00:53:14 +03:00
whitequark 7043b333a7 transforms.devirtualizer → analyses.devirtualization. 2015-10-09 00:29:31 +03:00
whitequark 962dd9de13 transforms.devirtualizer.MethodResolver: implement. 2015-10-07 22:33:08 +03:00
whitequark 6ac82e1439 transforms.devirtualizer.FunctionResolver: implement. 2015-10-07 22:33:00 +03:00
whitequark 42b0089a4c transforms.asttyped_rewriter: simplify. 2015-10-07 22:03:24 +03:00
whitequark 2ca84f9fea Highlight source range in IR dumps using colors. 2015-10-04 02:11:17 +03:00
whitequark 7a6fc3983c Make delay component of function type unifyable. 2015-09-30 18:41:14 +03:00
whitequark 60c985bf0b Remove debug print. 2015-09-27 17:55:19 +03:00
whitequark 867a0689ad transforms.Inferencer: narrow range() element type. 2015-09-02 17:55:48 -06:00
whitequark b971cc8cdf compiler.{iodelay,transforms.iodelay_estimator}: implement. 2015-09-02 17:55:48 -06:00
whitequark 995245b786 compiler.embedding: default RPC return annotation is -> TNone. 2015-09-01 08:38:38 -06:00
whitequark 156779007a LLVMIRGenerator: implement quoting of lists. 2015-08-31 23:33:33 -06:00
whitequark 956c1985b1 ARTIQIRGenerator: evaluate SubscriptT index in non-assignment context. 2015-08-31 23:33:04 -06:00
whitequark b03efbc94d compiler.embedding: maintain correct column numbers in debug info. 2015-08-31 22:18:49 -06:00
whitequark 3ca5967cea LLVMIRGenerator: don't map sret LLVM argument to any ARTIQ arguments. 2015-08-31 14:02:02 -06:00
whitequark 5e0ec3a6ea ARTIQIRGenerator: fix keyword/optional argument codegen in calls. 2015-08-31 13:42:36 -06:00
whitequark 501ba912c2 Implement {delay,now,at}{,_mu} and {mu,seconds}_to_{seconds,mu}. 2015-08-31 09:59:33 -06:00
whitequark 5151adb9a8 compiler.targets: correctly pass CPU features to LLVM. 2015-08-30 16:56:58 -05:00
whitequark b263a55b1a compiler.testbench.perf_embedding: implement. 2015-08-30 12:23:16 -05:00
whitequark 2124ff9e91 Fix tests. 2015-08-28 05:28:58 -05:00
whitequark 37811f690b ARTIQIRGenerator: support comparisons against None. 2015-08-28 05:14:52 -05:00
whitequark bcba86de7e compiler.embedding: handle errors during initial kernel call. 2015-08-28 05:14:06 -05:00
whitequark b35051cb08 compiler.embedding: handle calls into lambdas (poorly). 2015-08-28 05:13:38 -05:00
whitequark c621b1f275 compiler: handle language.core.int during embedding. 2015-08-28 03:24:15 -05:00
whitequark 83ebb999c8 transforms.Inferencer: improve attribute unification diagnostic. 2015-08-28 03:23:15 -05:00
whitequark 9fd25a1cc4 LLVMIRGenerator: fix syscall emission. 2015-08-28 03:03:12 -05:00
whitequark 6a29775bf0 compiler.types.Type: more useful __str__. 2015-08-28 02:53:12 -05:00
whitequark ac92aabce1 Fix default argument fiasco. 2015-08-28 02:50:40 -05:00
whitequark edf33f1643 compiler.targets: dump module signature with ARTIQ_DUMP_SIG=1. 2015-08-28 02:22:35 -05:00
whitequark 677cc69643 compiler.embedding: actually use qualified name when embedding methods.
Previous commit 6b55e3b only did this for embedded types.
2015-08-28 02:22:16 -05:00
whitequark 9936768603 ARTIQIRGenerator: fix non-nullary method calls. 2015-08-28 02:11:05 -05:00
whitequark d473d58b41 artiq_{compile,run}: adapt to new compiler. 2015-08-28 01:43:46 -05:00
whitequark 6b55e3bd80 compiler.embedding: use qualified name when embedding methods. 2015-08-28 01:14:19 -05:00
whitequark 13e612c11b Fix tests. 2015-08-28 00:51:31 -05:00
whitequark 7c1abb25ec compiler.embedding: test all diagnostics.
Also, unify and improve diagnostic messages.
2015-08-28 00:47:28 -05:00
whitequark c21387dc09 compiler.embedding: support calling methods marked as @kernel. 2015-08-27 19:46:50 -05:00
whitequark d0fd61866f compiler.types: print fields of instance types. 2015-08-27 17:25:01 -05:00
whitequark 9791cbba4d compiler.embedding: use typedtree hash to iterate inference to fixpoint. 2015-08-27 17:04:28 -05:00
whitequark a3284f8978 compiler.types: fix module paths in __repr__. 2015-08-27 15:46:36 -05:00
whitequark 84e32db622 LLVMIRGenerator: handle self-referential class types. 2015-08-27 15:40:46 -05:00
whitequark 71ebe1778d LLVMIRGenerator: remove debug print. 2015-08-27 15:40:15 -05:00
whitequark f7c8625f61 compiler.embedding: support calling methods via RPC as well. 2015-08-27 05:56:46 -05:00
whitequark c62b16d5e1 compiler.embedding: support RPC functions as host attribute values. 2015-08-27 05:53:18 -05:00
whitequark 04bd2421ad compiler.embedding: dedent kernel functions before parsing. 2015-08-27 05:44:56 -05:00
whitequark cb225269ff Allow accessing attributes of embedded host objects. 2015-08-27 05:01:04 -05:00
whitequark 422208a0e9 Fix copy-paste error. 2015-08-25 22:05:34 -07:00
whitequark 9b9fa1ab7c Allow embedding and RPC sending host objects. 2015-08-25 21:56:01 -07:00
whitequark 526d7c4e46 Fix a typo. 2015-08-22 14:01:55 -07:00
whitequark a557445e05 LocalAccessValidator: assume variables with "$" in name are internal.
Internal variables are assumed to be scoped correctly
(including not being accessed uninitialized).

This was changed from "." because artiq.compiler.embedding uses
"." in module prefix of function names.
2015-08-22 13:56:17 -07:00
whitequark 0e26cfb66e LocalAccessValidator: relax restrictions to accept def f(); def g(). 2015-08-22 13:31:09 -07:00
whitequark b39e76ae28 Remove debug print. 2015-08-22 12:22:26 -07:00
whitequark 27a697920a LLVMIRGenerator: use sret when returning large structures. 2015-08-19 15:06:03 -07:00
whitequark afc3f36104 ARTIQIRGenerator: fix polymorphic print on closures. 2015-08-19 12:37:22 -07:00
whitequark 53b4d87647 LLVMIRGenerator: attach debug metadata to all emitted LLVM instructions. 2015-08-19 12:18:20 -07:00
whitequark 51c591f01a Unbreak tests. 2015-08-18 22:44:09 -07:00
whitequark 6c8de9b6d4 Implement methods. 2015-08-18 22:39:22 -07:00
whitequark 94a2d5f5fa Implement class attribute access through instances. 2015-08-15 11:07:54 -04:00
whitequark 00efc8c636 Implement class definitions and class attribute access. 2015-08-15 09:45:16 -04:00
whitequark 786fde827a Unbreak tests. 2015-08-11 00:41:31 +03:00
whitequark 62e6f8a03d compiler.embedding.Stitcher: refactor. 2015-08-10 20:26:07 +03:00
whitequark c72267ecf5 Implement syscalls for the new compiler. 2015-08-10 20:26:06 +03:00
whitequark 435559fe50 Allow type annotations on remotely called functions. 2015-08-10 17:48:35 +03:00
whitequark b28a874274 Inferencer: range() does not accept a float argument. 2015-08-10 17:06:55 +03:00
whitequark f53a5ff202 Remove syscall builtin. 2015-08-10 16:44:29 +03:00
whitequark 261515dfe5 compiler.targets.OR1KTarget: fix typo. 2015-08-10 15:47:44 +03:00
whitequark 75532d10aa Display full core device backtraces. 2015-08-10 15:12:22 +03:00
whitequark c63ec70c53 LLVMIRGenerator: emit debug information. 2015-08-10 15:11:52 +03:00
whitequark 4f02f6e667 compiler.types: make all hashable. 2015-08-10 13:15:42 +03:00
whitequark 8f510a4407 compiler.ir.Function: add loc field. 2015-08-10 13:14:52 +03:00
whitequark 22570afbda LLVMIRGenerator: allocate less. 2015-08-10 09:12:34 +03:00
whitequark dfc91a35f2 ARTIQIRGenerator.polymorphic_print: str([x]) uses repr(x), not str(x). 2015-08-09 20:27:04 +03:00
whitequark f7b64db8f4 LLVMIRGenerator: fixup phis on expansion of ARTIQ instructions. 2015-08-09 20:24:16 +03:00
whitequark d4270cf66e Implement receiving data from RPCs. 2015-08-09 20:17:00 +03:00
whitequark 02b1543c63 Implement receiving exceptions from RPCs. 2015-08-09 16:16:41 +03:00
whitequark 8b7d38d203 Add ARTIQ_DUMP_ASSEMBLY. 2015-08-09 15:47:29 +03:00
whitequark 9c5ca2ae29 LLVMIRGenerator: add target data layout to LLVM modules. 2015-08-09 14:39:21 +03:00
whitequark 153592f1cc Naming. 2015-08-09 02:25:58 +03:00
whitequark b26af5df60 Implement sending RPCs. 2015-08-09 02:17:19 +03:00
whitequark 22457bc19c Ensure uwtable is added to all generated functions. 2015-08-08 21:48:21 +03:00
whitequark ee3f35c608 Improve error message on passing an argument twice. 2015-08-08 21:06:13 +03:00
whitequark bdcf7f100b ARTIQIRGenerator: add semantic locs to all other implicitly raised exceptions. 2015-08-08 16:26:53 +03:00
whitequark acd8d6355f transforms.ARTIQIRGenerator: IndexError loc should point to "[". 2015-08-08 16:18:57 +03:00
whitequark 27d2390fed Add zero-cost exception support to runtime and host. 2015-08-08 16:01:31 +03:00
whitequark acc97a74f0 Fix compiler.module. 2015-08-07 14:21:53 +03:00
whitequark a7633f75c7 Show origin of expansion in diagnostics for synthesized code. 2015-08-07 13:56:18 +03:00
whitequark 50448ef554 Add support for referring to host values in embedded functions. 2015-08-07 13:24:01 +03:00
whitequark 353f454a29 Add basic support for embedded functions with new compiler. 2015-08-07 11:44:49 +03:00
whitequark 1a969aa9e4 compiler.transforms.inferencer: accept and ignore @kernel decorator. 2015-08-07 07:54:35 +03:00
whitequark 7562d39750 compiler.module: split off inferencing from Module.__init__. 2015-08-06 08:25:53 +03:00
whitequark ca52b2fdd0 compiler.transforms.ARTIQIRGenerator: fix typo. 2015-08-06 08:25:53 +03:00
whitequark aae2923c4c runtime: add lognonl{,_va} functions.
The kernels have print(), which prints aggregates (such as
arrays) piece-by-piece, and newlines would interfere.
2015-08-02 06:33:12 +03:00
whitequark e8943a008c Rename compiler/{targets/__init__.py → targets.py}. 2015-07-30 10:35:04 +03:00
whitequark 1e3911ed39 Use try..finally in compiler.targets.Target.link. 2015-07-30 10:33:54 +03:00
whitequark b0185f3917 Add profiling to the performance testbench. 2015-07-29 22:23:22 +03:00
whitequark d7f9af4bb5 Fix accidentally quadratic code in compiler.ir.Function._add_name. 2015-07-29 21:36:31 +03:00
whitequark 6d8d0ff3f5 Update performance testbench to include time spent in ARTIQ. 2015-07-29 21:28:07 +03:00
whitequark 3b5d3e2b1a Add a performance measurement testbench. 2015-07-29 21:17:52 +03:00
whitequark e8c107925c Implement shared object linking. 2015-07-29 20:35:16 +03:00
whitequark 2cd25f85bf Rename artiq.compiler.testbench.{module → signature}. 2015-07-29 14:32:34 +03:00
whitequark 3378dd57b8 Fold llvmlite patches into m-labs/llvmlite repository. 2015-07-29 13:54:00 +03:00
whitequark 2939d4f0f3 Add tests for finally clause and reraising. 2015-07-27 12:36:21 +03:00
whitequark a83e7e2248 Add tests for exceptional control flow. 2015-07-27 10:22:28 +03:00
whitequark 90be44c596 Add tests for non-exceptional control flow across finally. 2015-07-27 10:13:22 +03:00
whitequark 7c77dd317a Implement __artiq_personality. 2015-07-27 09:10:20 +03:00
whitequark 47f13bf921 Always load the personality library in JIT testbench, if available. 2015-07-27 04:44:40 +03:00
whitequark 14c7b15785 Add a test harness for exceptions.
The libunwind.h is duplicated here so that it would be possible
to test the Python parts without pulling in misoc.
2015-07-27 04:18:12 +03:00
whitequark 692791f0bd Make sure a landing pad returns {i8*} to soothe LLVM codegen. 2015-07-25 07:01:25 +03:00
whitequark ece52062f2 Implement code generation for exception handling. 2015-07-25 05:37:37 +03:00
whitequark 20f5f8217d Make sure tests pass both on ARTIQ Python and CPython.
In some cases (the `is` operator and wraparound arithmetics)
the tests will only pass on ARTIQ Python. These are conditionally
commented out.
2015-07-23 08:09:25 +03:00
whitequark 65121b437f Rework internal logic of slices. 2015-07-23 07:57:49 +03:00
whitequark 2b9ac344d8 Verify LLVM module in compiler.textbench.jit. 2015-07-23 07:57:35 +03:00
whitequark 9db199cad9 Handle closure effects appropriately in LocalAccessValidator. 2015-07-23 03:15:36 +03:00
whitequark acb8810e62 Add tests for lambdas and functions. 2015-07-23 03:07:30 +03:00
whitequark f8c2709943 Make division by zero raise an exception. 2015-07-23 01:26:50 +03:00
whitequark 4cfe4ea148 Make negative and too-far shifts have defined behavior. 2015-07-23 00:58:41 +03:00
whitequark bf60978c7b Add bool coercion support. 2015-07-22 19:15:54 +03:00
whitequark de181e0cb9 Revert "Require boolean operand in BoolOp."
This reverts commit 5d518dcec6.
2015-07-22 18:35:18 +03:00
whitequark 51aef980a0 Revert "Require boolean condition in If, While, IfExp."
This reverts commit e21829ce74.
2015-07-22 18:35:14 +03:00
whitequark f2a6110cc4 Add integration tests for every language construct. 2015-07-22 18:34:52 +03:00
whitequark dff4ce7e3a Return LLVM IR module from LLVMIRGenerator.process. 2015-07-22 04:13:04 +03:00
whitequark 986d9d944f Add artiq.compiler.testbench.run. 2015-07-22 04:10:15 +03:00
whitequark 86e006830c Use the correct printf format for 64-bit integers. 2015-07-22 03:05:15 +03:00
whitequark 236d5b886a Add support for Assert. 2015-07-22 02:58:59 +03:00
whitequark 5d518dcec6 Require boolean operand in BoolOp. 2015-07-21 23:46:22 +03:00
whitequark e21829ce74 Require boolean condition in If, While, IfExp. 2015-07-21 23:39:22 +03:00
whitequark 1e851adf4f Add a polymorphic print function. 2015-07-21 22:32:10 +03:00
whitequark 0e7294db8d Null-terminate all string literals. 2015-07-21 19:57:18 +03:00
whitequark 9d20080624 Use internal linkage for interior Python global values. 2015-07-21 19:55:43 +03:00
whitequark 8c9d9cb5a1 Make compiler.testbench.llvmgen emit a main() function. 2015-07-21 19:48:44 +03:00
whitequark 7301a76d68 Mark string constants as unnamed_addr.
As a result they will be merged when possible.
2015-07-21 17:10:31 +03:00
whitequark 49ece6a12a Add support for string literals. 2015-07-21 14:27:48 +03:00
whitequark 64d2604aa8 Tolerate assertion failures in tests when looking for diagnostics. 2015-07-21 14:12:27 +03:00
whitequark ec9d40b04f Add LLVM IR generation for function calls. 2015-07-21 13:45:27 +03:00
whitequark e299801c0f LocalAccessValidator: fix validation of closures with no outer variables. 2015-07-21 13:16:18 +03:00
whitequark 6f11fa6bb1 Add conversion to LLVM IR (except handling of exception handling). 2015-07-21 04:55:01 +03:00
whitequark c6cd318f19 Fix artiq.compiler.ir.BasicBlock.__repr__. 2015-07-19 16:32:33 +03:00
whitequark 7e3f91c0bb Teach closures to LocalAccessValidator. 2015-07-19 12:08:26 +03:00
whitequark 2c010b10ee Remove UnaryOp ARTIQ IR instruction; rename BinaryOp to Arith.
Everything it can express can also be expressed via Arith.
2015-07-19 11:51:53 +03:00
whitequark ac491fae47 Add LocalAccessValidator. 2015-07-19 11:44:51 +03:00
whitequark adf18bb042 Fix assignment to tuples in IRGenerator. 2015-07-19 10:31:11 +03:00
whitequark 4bd83fb43d Use ".k" instead of "k" for the finalizer continuation variable.
The dot signifies that this is an internal variable and it
does not need to be tracked as if it was a user-defined one.
2015-07-19 10:30:42 +03:00
whitequark 8eedb3bc44 Fix IRGenerator.append(loc=...). 2015-07-19 10:29:33 +03:00
whitequark f212ec0263 Add a trivial dead code elimination transform.
Its purpose is to sweep up basic blocks with no predecessors,
which are annoying to handle explicitly elsewhere.
2015-07-19 10:29:14 +03:00
whitequark 603d49dffa Add a dominator analysis. 2015-07-18 20:48:52 +03:00
whitequark 224a93fde3 Make compiler.ir.BasicBlock.predecessors much faster. 2015-07-18 20:48:11 +03:00
whitequark 47cbadb564 Revert "Ensure bindings are created in correct order for e.g. "x, y = y, x"."
This reverts commit bcd1832203.

The bindings are actually created in lexical order, as evident
in e.g. "x = lambda: x". The safety provided by this check should
be instead provided by a local access analysis.
2015-07-18 09:54:11 +03:00
whitequark 8e1cc8d985 Add an explicit ARTIQ IR instruction to create a closure. 2015-07-18 09:27:34 +03:00
whitequark 5ad02d5282 Fix ARTIQ IR generation for variables declared global. 2015-07-18 09:10:41 +03:00
whitequark 21eafefd28 Fix inference for globals. 2015-07-18 08:13:49 +03:00
whitequark 0d66bdfbf8 Fix For miscompilation. 2015-07-18 07:58:43 +03:00
whitequark dde2e67c3f Add source locations to ARTIQ IR instructions. 2015-07-18 07:49:42 +03:00
whitequark 255ffec483 Generate more compact ARTIQ IR for else-less if. 2015-07-18 07:49:27 +03:00
whitequark e96bc3c36c Add complete IR generator. 2015-07-17 21:29:06 +03:00
whitequark f28549a11a Add builtins.is_exception. 2015-07-17 16:05:02 +03:00
whitequark 3b661b2b65 Fix environment corruption by ExceptHandler without a name. 2015-07-17 16:04:46 +03:00
whitequark 2dcb744519 Fix inference for default arguments. 2015-07-16 17:26:31 +03:00
whitequark f8e51e07d5 Add zero/one accessors to TBool, TInt, TFloat. 2015-07-16 16:03:24 +03:00
whitequark bcd1832203 Ensure bindings are created in correct order for e.g. "x, y = y, x". 2015-07-16 15:59:59 +03:00
whitequark 5756cfcebc Correctly infer type of list(iterable). 2015-07-16 15:35:46 +03:00
whitequark 6cda67c0c6 Ensure type comparisons see through type variables. 2015-07-16 14:59:05 +03:00
whitequark c1e7a82e97 Add IndexError and ValueError builtins. 2015-07-16 14:58:40 +03:00
whitequark b58fa9067d Add attributes to TRange.
Also make attributes an OrderedDict, for stable order during
LLVM IR generation.
2015-07-16 14:57:44 +03:00
whitequark a6950bf11d Move builtin.is_{builtin,exn_constructor} to types. 2015-07-16 14:56:39 +03:00
whitequark 5000f87dfc Rename the field of CoerceT from expr to value. 2015-07-16 14:55:23 +03:00
whitequark e9416f4707 Convert Slice into typed SliceT. 2015-07-16 14:54:04 +03:00
whitequark 53fb03d1bf Restrict comprehensions to single for and no if clauses. 2015-07-16 14:52:41 +03:00
whitequark 227f97f8a3 Add inference for Index, Slice and ExtSlice. 2015-07-16 04:22:41 +03:00
whitequark c724e024ce Fix inference for multiple-target assignments. 2015-07-15 06:33:44 +03:00
whitequark 9ff9f85f19 Add accessors to instructions. 2015-07-14 22:18:38 +03:00
whitequark bdcb24108b Add basic IR generator. 2015-07-14 08:56:51 +03:00
whitequark f417ef31a4 Make binop coercion look through CoerceT nodes.
This fixes inference for "x = 1 + 1" after int monomorphization.
2015-07-14 06:42:09 +03:00
whitequark ebe243f8d9 Add printing of SSA functions. 2015-07-13 21:08:20 +03:00
whitequark dbdd45acc5 Add missing return. 2015-07-13 20:52:55 +03:00
whitequark 7c9afcce85 Fix Python default argument fiasco. 2015-07-13 20:52:48 +03:00
whitequark 7c52910dc5 Add a basic SSA IR. 2015-07-11 18:46:37 +03:00
whitequark 549c110e7c Fix types.TFunction.fold. 2015-07-04 04:27:24 +03:00
whitequark 4785f0a2de Don't error out in inferencer if builtin arguments have polymorphic types. 2015-07-04 04:27:15 +03:00
whitequark 16432d2652 Implement escape analysis. 2015-07-04 04:16:37 +03:00
whitequark 4358c5c453 Unbreak return type inference. 2015-07-04 02:23:55 +03:00
whitequark 561d403ddd Add missing _loc forwarding. 2015-07-04 00:59:03 +03:00
whitequark ee0990cb5e Automatically infer return type of NoneType for no return statements. 2015-07-04 00:58:48 +03:00
whitequark bfabca494b Remove regions from types.
Unification-based inference for regions is useful with a language
that has let bindings (which would propagate the regions) and
functions polymorphic over regions. For reasons of simplicity,
ARTIQ has neither, and making unification-based inference work would
essentially mean adding region coercions between most AST nodes,
and having every source subexpression have its own region variable,
with the appropriate subtyping relationship.

It's simpler to just keep that state outside of typedtree.
2015-07-02 22:55:12 +03:00
whitequark 0ae13ac1b9 Style fixes. 2015-07-02 22:38:55 +03:00
whitequark 7c833f0727 Move transforms.MonomorphismChecker to validators.MonomorphismValidator. 2015-07-02 21:54:31 +03:00
whitequark 02b41ea0f7 Add MonomorphismChecker. 2015-07-02 21:28:26 +03:00
whitequark 73a8f3c442 Fix tests. 2015-07-02 20:06:43 +03:00
whitequark 8a65266f14 Improve builtin call error message. 2015-07-02 20:06:07 +03:00
whitequark 196acb37f6 Add IntMonomorphizer. 2015-07-02 19:57:27 +03:00
whitequark 7ce9bdf54d Move transforms to artiq.compiler.transforms, add artiq.Module. 2015-07-02 19:35:35 +03:00
whitequark 1702251ee5 Add region field to types. 2015-07-02 18:44:09 +03:00
whitequark 86cdc84f7e Initialize types.TBuiltin's attributes field. 2015-07-02 18:19:01 +03:00
whitequark 6bf95397d7 Rename package py2llvm to compiler.
Since the package implements a typechecker along with a code generator,
and the typechecker will be run before or together with transformations,
this name is more descriptive.
2015-06-29 20:15:22 +03:00
Sebastien Bourdeauducq a647e1104d compiler: split into transforms and py2llvm 2014-09-05 22:18:31 +08:00
Sebastien Bourdeauducq 86193437f5 compiler/ir_values: fix gcd64 2014-09-05 16:48:27 +08:00
Sebastien Bourdeauducq 4915b4b5aa PEP8 2014-09-05 12:03:22 +08:00
Sebastien Bourdeauducq 7e9df82e37 compiler/ir_values: implement rational mul/div 2014-08-28 18:58:24 +08:00
Sebastien Bourdeauducq 841e7cce35 compiler/ir_values: fix right operations 2014-08-28 18:58:05 +08:00
Sebastien Bourdeauducq a861226409 compiler/ir: fraction normalization 2014-08-28 17:24:33 +08:00
Sebastien Bourdeauducq 76cef042a5 compiler/ir: introduce Fraction type (incomplete) 2014-08-19 17:52:55 +08:00
Sebastien Bourdeauducq 0832507c26 compiler/ir: refactor SSA/alloca management 2014-08-19 17:52:05 +08:00
Sebastien Bourdeauducq b3b61d8b6b compiler/fold_constants: fix int/round 2014-08-18 23:11:53 +08:00
Sebastien Bourdeauducq 24544f2758 compiler/tools/eval_constant: raise NotConstant on calls 2014-08-18 23:11:27 +08:00
Sebastien Bourdeauducq b1598ba659 compiler/inline: add microcycle_unit as reserved name 2014-08-18 23:06:50 +08:00
Sebastien Bourdeauducq 7ea28642e4 compiler: add lower_units transform 2014-08-18 23:06:34 +08:00
Sebastien Bourdeauducq dcc140c5a9 compiler/lower_time: make 'now' an int64 2014-08-18 23:04:28 +08:00
Sebastien Bourdeauducq 56ccd054eb compiler/fold_constants: support int, int64, round and round64 2014-08-18 22:52:19 +08:00
Sebastien Bourdeauducq 219aa23d25 compiler/ir_values: implement sign extension and truncation 2014-08-18 22:51:54 +08:00
Sebastien Bourdeauducq 4ff61a8f56 compiler/ir_ast_body,ir_values: minor fixes 2014-08-18 22:51:24 +08:00
Sebastien Bourdeauducq a5e5b5c870 compiler: pass funcdef instead of statement list 2014-08-18 21:37:30 +08:00
Sebastien Bourdeauducq 86577ff64f compiler/inline: update reserved names 2014-08-18 21:34:13 +08:00
Sebastien Bourdeauducq e1cdec8c07 compiler/ir: fix compile_function call 2014-08-18 21:32:52 +08:00
Sebastien Bourdeauducq 1e654f5da2 compiler/tools: support int64 in value_to_ast 2014-08-18 21:31:56 +08:00
Sebastien Bourdeauducq fc9cf67069 compiler/ir: use new infrastructure 2014-08-18 14:34:14 +08:00
Sebastien Bourdeauducq 65566ec710 compiler/ir_ast_body,ir_infer_types: support syscalls 2014-08-18 14:33:21 +08:00
Sebastien Bourdeauducq 4b0788d92c compiler: add None type support 2014-08-17 23:46:29 +08:00
Sebastien Bourdeauducq 9e21ea5658 compiler/ir_ast_body,ir_infer_types: use Python dict directly as namespace 2014-08-17 22:15:10 +08:00
Sebastien Bourdeauducq 30ef6119e6 compiler/ir_ast_body: refactor and add statement visitor 2014-08-17 21:46:11 +08:00
Sebastien Bourdeauducq d41d06835c compiler/ir_values: support bool operation on VBool 2014-08-17 21:45:36 +08:00
Sebastien Bourdeauducq 3e4cbba018 compiler: new architecture for type inference and LLVM code emission 2014-08-16 23:20:16 +08:00
Sebastien Bourdeauducq 02798d1996 infer_type: better rules 2014-08-16 20:58:10 +08:00
Sebastien Bourdeauducq 8bdc7964b8 compiler: add infer_types module (WIP) 2014-08-13 22:08:34 +08:00
Sebastien Bourdeauducq 2135e37dca compiler: use value_to_ast(x) instead of ast.Num(x) 2014-08-13 18:02:24 +08:00
Sebastien Bourdeauducq 899a034204 compiler/lower_time: adapt to new unit system 2014-08-13 17:59:53 +08:00
Sebastien Bourdeauducq 9cbf31153a compiler/ir: compile fractions with denominator==1 as integers 2014-08-13 17:58:48 +08:00
Sebastien Bourdeauducq 70fbc6ad56 compiler/interleave: use eval_constant from tools 2014-08-13 17:58:06 +08:00
Sebastien Bourdeauducq 5481baac1d compiler/inline: cleanup reference manager, recognize Fraction 2014-08-13 17:56:55 +08:00
Sebastien Bourdeauducq fe5b3cc67e compiler/fold_constants: use eval_constant from tools 2014-08-13 17:54:58 +08:00
Sebastien Bourdeauducq 0145e52d4b compiler/tools: add eval_constant and Fraction support 2014-08-13 17:54:22 +08:00
Sebastien Bourdeauducq b2bb837d22 compiler/ir: add binary AND and OR 2014-07-23 17:10:12 -06:00
Sebastien Bourdeauducq d922c3db7e compiler/ir: replace quantities with their integer value 2014-07-23 11:48:43 -06:00
Sebastien Bourdeauducq 1b52941381 compiler/ir: support shifts 2014-07-23 11:48:15 -06:00
Sebastien Bourdeauducq 8769066e89 compiler/devices: set initial time 2014-07-21 13:22:07 -06:00
Sebastien Bourdeauducq a9b96cefbe compiler/ir: support AugAssign 2014-07-16 09:43:46 -06:00
Sebastien Bourdeauducq 591509d31b compiler: lower time transform 2014-07-15 11:22:11 -06:00
Sebastien Bourdeauducq 6509f1fd04 artiq.language.experiment -> artiq.language.core 2014-07-10 18:13:37 +02:00
Sebastien Bourdeauducq ffd2bdc4eb compiler/inline: return number -> function RPC map 2014-07-07 19:11:07 +02:00
Sebastien Bourdeauducq e0ac1193c6 compiler/ir: support function calls in expressions 2014-07-06 21:06:01 +02:00
Sebastien Bourdeauducq a8ef4d8b91 compiler/ir: create machine code from kernel statements 2014-07-05 22:44:54 +02:00
Sebastien Bourdeauducq 99c99484ae compiler/ir: load into device 2014-07-05 19:38:45 +02:00
Sebastien Bourdeauducq 711be75c35 compiler/ir: pass arguments to syscall 2014-07-05 19:13:05 +02:00
Sebastien Bourdeauducq 10db450098 Minor cleanup 2014-07-04 17:50:35 +02:00
Sebastien Bourdeauducq 71323fb7cd compiler: system calls 2014-07-04 17:17:01 +02:00
Sebastien Bourdeauducq 74cdafdde5 compiler: interleave transform 2014-06-22 18:52:37 +02:00
Sebastien Bourdeauducq 6ea0430cec compiler/ir: simplify type dictionaries 2014-06-22 00:04:46 +02:00
Sebastien Bourdeauducq b28fdf5fb0 compiler: add unroll_loops transform 2014-06-21 15:06:15 +02:00
Sebastien Bourdeauducq 5a8074a12f compiler: propagate AST node location info 2014-06-21 14:53:09 +02:00
Sebastien Bourdeauducq c71eb702bb tools/make_stmt_transformer: pass args/kwargs 2014-06-21 12:13:28 +02:00
Sebastien Bourdeauducq c3092ae13f compiler: factorize operation of NodeTransformer on statement lists 2014-06-21 00:40:52 +02:00
Sebastien Bourdeauducq 6400e28e4c compiler: fold constants 2014-06-21 00:19:56 +02:00
Sebastien Bourdeauducq 94ff2e2ddc compiler: share value_to_ast 2014-06-21 00:19:40 +02:00
Sebastien Bourdeauducq 5b0fd50dbe inline: support rw kernel attributes 2014-06-18 21:04:54 +02:00
Sebastien Bourdeauducq d41ac863f4 inline: support kernel_attr_ro 2014-06-17 19:46:22 +02:00
Sebastien Bourdeauducq 0d9bdc101c inline: check inlined functions are on the same core device 2014-06-17 18:52:48 +02:00
Sebastien Bourdeauducq 08ab99d33e inline: basic function inlining 2014-06-17 18:37:51 +02:00
Sebastien Bourdeauducq d87b207b8a compiler/inline: embeddable calls 2014-06-16 23:52:19 +02:00
Sebastien Bourdeauducq 9db8627081 compiler: generate RPC calls 2014-06-16 22:56:08 +02:00
Sebastien Bourdeauducq 792ac44245 inline: return statements 2014-06-16 22:01:20 +02:00
Sebastien Bourdeauducq c021b2ef41 compiler/inline: handle function params and builtin calls 2014-06-16 21:52:38 +02:00
Sebastien Bourdeauducq 733a03b7ad cleanup 2014-06-16 21:35:08 +02:00
Sebastien Bourdeauducq 7ec448cdc9 compiler: inline transform WIP 2014-06-10 15:23:14 +02:00
Sebastien Bourdeauducq 7eb9641905 compiler: share eval_ast 2014-06-10 15:16:28 +02:00
Sebastien Bourdeauducq 9e8077b873 First simple attempt at compiling Python AST to LLVM IR 2014-06-07 18:47:06 +02:00
Sebastien Bourdeauducq c769bdab9b Introduce compiler and device modules 2014-05-30 18:20:13 +02:00