whitequark
39d23793a4
transforms.llvm_ir_generator: extract class function attributes.
...
This should give LLVM more visibility.
2016-03-25 19:01:39 +00:00
whitequark
39599d4508
compiler: get rid of the GetConstructor opcode.
2016-03-25 19:01:39 +00:00
whitequark
f4ab507ab2
Bring back target print function.
2016-03-18 04:42:06 +00:00
whitequark
ac5061c205
validators.escape: track region of arguments.
...
Fixes #232 .
2016-03-18 03:08:14 +00:00
whitequark
9492464ed9
Commit missing parts of 78fa5be
.
2016-03-18 02:15:36 +00:00
whitequark
78fa5becea
compiler: refuse to embed a function from another core device.
...
Fixes #332 .
2016-03-18 02:01:14 +00:00
whitequark
82ab21dbd5
transforms.inferencer: better message for BinOpT unification.
...
Fixes #311 .
2016-03-18 01:22:01 +00:00
whitequark
73bfbe51db
compiler: reject lambdas used as kernel functions ( fixes #313 ).
2016-03-03 08:33:28 +00:00
whitequark
7e16da4a77
transforms.llvm_ir_generator: ignore assignments of None ( fixes #309 ).
2016-03-01 12:26:42 +00:00
whitequark
dc70029b91
transforms.asttyped_rewriter: set loc for ForT ( fixes #302 ).
2016-03-01 05:22:12 +00:00
whitequark
8bbffab8c8
Fix tests.
2016-02-27 13:40:37 +00:00
whitequark
e421b22953
types.TypePrinter: don't waste screen space on empty attribute lists.
2016-02-27 13:29:47 +00:00
whitequark
82a8e819ac
transforms.llvm_ir_generator: use private linkage instead of internal.
...
This reduces the size of symbol tables (internal adds an STB_LOCAL
symbol, but private doesn't).
2016-02-25 20:15:40 +00:00
whitequark
f838b8be49
compiler.embedding: cache attribute types ( fixes #276 ).
2016-02-25 19:56:45 +00:00
whitequark
d899d7307e
compiler.types: TDelay is always unifiable with self.
2016-02-25 19:56:12 +00:00
whitequark
919a49b6bc
compiler: quell excessively detailed diagnostics.
2016-02-25 19:43:52 +00:00
whitequark
a1dd909bc4
Take alignment into account during attribute writeback ( fixes #293 ).
2016-02-25 01:44:05 +00:00
whitequark
914bc9f360
artiq_run: allow running LLVM IR/bitcode files, even with trivial RPCs.
2016-02-24 22:50:45 +00:00
whitequark
da31d29897
compiler: fix ARTIQ_DUMP_*.
2016-02-24 21:43:46 +00:00
whitequark
a829b8a6fc
Commit missing parts of cf41890
.
2016-02-24 17:53:13 +00:00
whitequark
cf41890255
Correctly display backtraces that contain inlined functions.
2016-02-24 17:44:19 +00:00
whitequark
442673076f
compiler: setting ARTIQ_DUMP_* dumps to a file instead of stderr.
2016-02-24 17:44:19 +00:00
whitequark
bc81be1345
Implement dumb 'with parallel' ( #265 ).
2016-02-22 13:51:08 +00:00
whitequark
51a5910002
Rename 'with parallel' to 'with interleave' ( #265 ).
2016-02-22 13:24:43 +00:00
whitequark
9db2be2b03
compiler: only use colors in diagnostics on POSIX ( fixes #272 ).
2016-02-22 11:27:45 +00:00
whitequark
1465fe6f81
Add channel name as the first argument to rtio_log ( #206 ).
2016-02-15 21:17:54 +00:00
whitequark
74a75841f6
Add rtio_log() and make print() an RPC ( #206 ).
2016-02-15 03:56:56 +00:00
89f68f3470
style
2016-02-02 21:57:25 +01:00
whitequark
0acc86b3b3
transforms.iodelay_estimator: make diagnostics much more clear.
2016-01-27 02:10:15 +00:00
whitequark
3573a8750a
transforms.inferencer: give a suggestion on "raise Exception".
2016-01-20 03:20:25 +00:00
whitequark
5c6b1517d0
Rigorously treat builtin core device exceptions.
2016-01-19 01:45:25 +00:00
whitequark
5f0e2bf9f9
analyses.domination: all blocks dominate themselves.
2016-01-18 21:33:14 +00:00
whitequark
cc22837627
transforms.inferencer: infer a monomorphic type for slice ":"
2016-01-16 03:09:03 +00:00
whitequark
85222783ee
transforms.llvm_ir_generator: fix memoize().
2016-01-16 00:38:57 +00:00
whitequark
bed62349d2
transforms.llvm_ir_generator: i64 doesn't need sret ( fixes #228 ).
2016-01-15 23:58:11 +00:00
whitequark
127b117113
Add @host_only function decorator ( #172 ).
2016-01-15 16:42:08 +00:00
whitequark
63f7899f93
Commit missing parts of 7f914a0
.
2016-01-10 20:25:58 +00:00
whitequark
1be9e7576d
transforms.llvm_ir_generator: use byval for FFI calls where appropriate.
2016-01-10 18:31:35 +00:00
whitequark
ee1ef551bc
Fix symbolizer invocation with no addresses.
2016-01-10 18:04:10 +00:00
whitequark
d436093317
transforms.llvm_ir_generator: use sret attribute on FFI calls too.
2016-01-10 17:42:40 +00:00
whitequark
7f914a057c
transforms.llvm_ir_generator: use sret attribute.
2016-01-10 17:31:59 +00:00
whitequark
edb7423a4f
transforms.llvm_ir_generator: use getelementptr inbounds.
2016-01-10 16:36:04 +00:00
whitequark
a2a00e8b35
Set LLVM inlining threshold explicitly.
...
llvmlite's pass manager builder does not use a default when it
is not specified explicitly, unlike the C++ one.
2016-01-10 16:15:23 +00:00
whitequark
f92ce291ef
transforms.llvm_ir_generator: call devirtualized functions directly.
2016-01-10 15:54:46 +00:00
whitequark
c46fccdf4b
transforms.llvm_ir_generator: annotate invariant loads as such.
2016-01-10 15:45:34 +00:00
whitequark
b298170973
transforms.artiq_ir_generator: annotate embedded functions as internal.
2016-01-10 15:45:20 +00:00
whitequark
211af77e77
validators.escape: cache_get result lives forever.
2016-01-10 14:43:21 +00:00
whitequark
f2f1deb9db
transforms.llvm_ir_generator: quote recrusive objects correctly ( fixes #213 ).
2016-01-07 19:52:31 +00:00
whitequark
e8bba0a7d6
Commit missing parts of 6a6d7d.
2016-01-05 04:21:46 +00:00
whitequark
6a6d7dab19
transforms.artiq_ir_generator: add support for user-defined context managers.
2016-01-05 04:10:40 +00:00
whitequark
2955f9a1e0
Commit missing parts of 5baf18b
.
2016-01-05 00:16:58 +08:00
whitequark
dfbf55fed2
transforms/inferencer: add support for user-defined context manager.
2016-01-05 00:11:03 +08:00
whitequark
5baf18ba0d
transforms.inferencer: factor out _unify_attribute.
2016-01-04 22:13:05 +08:00
whitequark
05fa80818a
transforms.inferencer: make sure parallel/sequential is lone manager.
2016-01-04 21:26:03 +08:00
whitequark
3aa5acbaf3
transforms.llvm_ir_generator: don't crash if embedding is not enabled.
2016-01-03 19:07:11 +08:00
whitequark
81427af506
Remove selective attribute writeback; always synchronize all attributes.
...
The reasons are:
1. Shadow memory manipulation added ~12 instructions to TTLOut.pulse
(without inlining), and it's already barely fast enough.
2. More importantly, code such as self.ts[1] did not trigger
attribute writeback, and there seems to be no easy way to fix
that.
2016-01-03 04:57:58 +08:00
whitequark
38a99fde52
Implement selective attribute writeback using shadow memory.
2016-01-02 22:51:04 +08:00
whitequark
2e33084a5f
transforms.llvm_ir_generator: implement instrumentation for attribute writeback.
2016-01-02 06:51:30 +08:00
whitequark
5f68cc6a21
transforms.artiq_ir_generator: handle raise
in except:
with finally:
.
2016-01-02 06:51:29 +08:00
whitequark
693a364d85
transforms.artiq_ir_generator: fix typo.
2015-12-31 22:39:33 +08:00
whitequark
ff0ab736e9
Commit missing parts of 8aa34ee9
.
2015-12-31 22:36:25 +08:00
whitequark
79d020dd3a
transforms.artiq_ir_generator: handle terminated try body.
2015-12-31 22:36:25 +08:00
whitequark
8aa34ee952
compiler: don't require exceptions to inherit ARTIQException.
2015-12-31 21:54:54 +08:00
whitequark
0b69e488e6
transforms.llvm_ir_generator: compare exn typeinfo using strcmp.
...
This is necessary to correctly catch exceptions from RPCs.
2015-12-31 19:53:28 +08:00
whitequark
9ed6b54249
transforms.cfg_simplifier: remove.
...
Specifically, the following idiom broke our CFGSimplifier:
b1:
branch_if %cond, %b2, %b3
b2:
branch %b3
b3:
%v = phi [ %b2 => 0, %b3 => 1 ]
This is very annoying to properly handle in general case, and also
this (specifically %b2) is exactly what broke LocalAccessValidator
in the first place. So, remove CFGSimplifier altogether.
Instead, teach LocalAccessValidator how to look through predecessors
in order to get a location.
2015-12-31 17:07:36 +08:00
whitequark
787a1d34fe
transforms.llvm_ir_generator: don't crash when quoting over than one list.
2015-12-30 16:22:26 +08:00
whitequark
25e2824709
validators.escape: infer correct region for arguments.
2015-12-30 16:19:35 +08:00
whitequark
72b6cca9c3
transforms.cfg_simplifier: correctly update phis.
2015-12-30 16:07:14 +08:00
whitequark
2a474b7166
ir: fix incoming_{blocks,values,value_for_block}.
2015-12-30 16:06:18 +08:00
whitequark
ac3a170c8f
transforms.llvm_ir_generator: don't crash when quoting empty lists.
2015-12-30 15:47:57 +08:00
whitequark
5dcf936f4e
transforms.inferencer: don't crash on partially-inferred binary expressions.
2015-12-30 15:46:54 +08:00
whitequark
6938036b28
embedding: unify all derived attribute types.
2015-12-30 15:38:49 +08:00
whitequark
f52d364806
Mollify PEP 0479.
2015-12-30 15:33:30 +08:00
whitequark
78fb3e1b7b
compiler: validate local accesses after interleaving.
2015-12-30 15:26:30 +08:00
whitequark
df91500f68
Fix ff3206be
.
2015-12-30 15:16:05 +08:00
whitequark
ff3206be07
compiler.embedding: treat RPC methods like any others ( fixes #211 ).
2015-12-30 14:21:09 +08:00
whitequark
14484216ec
transforms.cfg_simplifier: handle phi and branch_if properly.
2015-12-30 12:10:28 +08:00
whitequark
8822db089f
transforms.cfg_simplifier: implement.
...
This allows error reporting in LocalAccessValidator to proceed
even when the predecessor is an empty block with only a branch.
2015-12-29 02:15:57 +08:00
whitequark
57ebd57ddb
transforms.dead_code_eliminator: update doc.
2015-12-29 02:15:57 +08:00
whitequark
82ec76af3e
compiler.types: fix TFunction internal field order ( closes #208 ).
2015-12-26 18:08:51 +08:00
whitequark
b931096ec3
transforms.artiq_ir_generator: fix While codegen ( closes #207 ).
2015-12-26 17:24:05 +08:00
whitequark
502e570e86
compiler: embed host exception constructors as such ( fixes #204 ).
2015-12-26 03:17:29 +08:00
whitequark
8051fe9592
Commit missing parts of 082e9e20dd
.
2015-12-26 03:16:50 +08:00
whitequark
082e9e20dd
compiler: do not associate SSA values with iodelay even when inlining.
...
Fixes #201 .
2015-12-25 15:02:33 +08:00
whitequark
33c3b3377e
ir: keep loc when copying.
2015-12-25 14:59:28 +08:00
whitequark
690b2fd034
transforms.artiq_ir_generator: fix optarg codegen ( closes #205 ).
2015-12-25 12:40:45 +08:00
whitequark
25188f0ca9
transforms.interleaver: correctly handle degenerate with parallel:
blocks.
2015-12-21 21:32:48 +08:00
whitequark
f957be4e6f
transforms.llvm_ir_generator: handle loop instruction ( fixes #202 ).
2015-12-21 21:12:17 +08:00
whitequark
e4615e7b37
transforms.int_monomorphizer: visit children of CallT.
2015-12-20 18:07:31 +08:00
whitequark
54aeb5030d
transforms.int_monomorphizer: also monomorphize round() calls ( #198 ).
2015-12-20 02:36:30 +08:00
whitequark
95af6daa28
transforms.inferencer: accept round(width=n) form ( #198 ).
2015-12-20 01:02:57 +08:00
whitequark
4fcd6abc5e
Commit missing parts of 0395efd4
.
2015-12-19 06:33:29 +08:00
whitequark
4fb1de33c9
Initial invocation of a @kernel function can now return a value ( fixes #197 ).
2015-12-19 05:26:18 +08:00
whitequark
0395efd479
compiler: give environment types in LLVM IR readable names.
2015-12-18 23:41:51 +08:00
whitequark
baa986aa32
compiler.prelude: add @portable as an alias for @kernel.
2015-12-18 23:00:29 +08:00
whitequark
7b3ace2e30
transforms.inferencer: fix unsupported decorator diagnostic when embedding.
...
decorator.loc points to the quoted object with a synthesized location,
and it's not really worth refactoring when we can just point at the @.
2015-12-18 22:58:17 +08:00
whitequark
0755aa38ff
transforms.iodelay_estimator: allow goto in zero-iodelay while statements.
2015-12-18 21:14:40 +08:00
whitequark
2759310662
transforms.iodelay_estimator: reject control flow in 'with parallel:' ( fixes #195 ).
2015-12-18 21:02:53 +08:00
whitequark
f4b19fee5c
compiler.types: make TValue hashable.
2015-12-18 17:31:20 +08:00
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
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
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
whitequark
f8eaeaa43f
compiler: explicitly represent loops in IR.
2015-12-16 15:33:26 +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
whitequark
e755e1ba9e
validators.escape: support arrays in multiple assignment.
2015-12-14 16:31:03 +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
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
a647e1104d
compiler: split into transforms and py2llvm
2014-09-05 22:18:31 +08:00
86193437f5
compiler/ir_values: fix gcd64
2014-09-05 16:48:27 +08:00
4915b4b5aa
PEP8
2014-09-05 12:03:22 +08:00
7e9df82e37
compiler/ir_values: implement rational mul/div
2014-08-28 18:58:24 +08:00
841e7cce35
compiler/ir_values: fix right operations
2014-08-28 18:58:05 +08:00
a861226409
compiler/ir: fraction normalization
2014-08-28 17:24:33 +08:00
76cef042a5
compiler/ir: introduce Fraction type (incomplete)
2014-08-19 17:52:55 +08:00
0832507c26
compiler/ir: refactor SSA/alloca management
2014-08-19 17:52:05 +08:00
b3b61d8b6b
compiler/fold_constants: fix int/round
2014-08-18 23:11:53 +08:00
24544f2758
compiler/tools/eval_constant: raise NotConstant on calls
2014-08-18 23:11:27 +08:00
b1598ba659
compiler/inline: add microcycle_unit as reserved name
2014-08-18 23:06:50 +08:00
7ea28642e4
compiler: add lower_units transform
2014-08-18 23:06:34 +08:00