Commit Graph

539 Commits

Author SHA1 Message Date
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
dcc140c5a9 compiler/lower_time: make 'now' an int64 2014-08-18 23:04:28 +08:00
56ccd054eb compiler/fold_constants: support int, int64, round and round64 2014-08-18 22:52:19 +08:00
219aa23d25 compiler/ir_values: implement sign extension and truncation 2014-08-18 22:51:54 +08:00
4ff61a8f56 compiler/ir_ast_body,ir_values: minor fixes 2014-08-18 22:51:24 +08:00
a5e5b5c870 compiler: pass funcdef instead of statement list 2014-08-18 21:37:30 +08:00
86577ff64f compiler/inline: update reserved names 2014-08-18 21:34:13 +08:00
e1cdec8c07 compiler/ir: fix compile_function call 2014-08-18 21:32:52 +08:00
1e654f5da2 compiler/tools: support int64 in value_to_ast 2014-08-18 21:31:56 +08:00
fc9cf67069 compiler/ir: use new infrastructure 2014-08-18 14:34:14 +08:00
65566ec710 compiler/ir_ast_body,ir_infer_types: support syscalls 2014-08-18 14:33:21 +08:00
4b0788d92c compiler: add None type support 2014-08-17 23:46:29 +08:00
9e21ea5658 compiler/ir_ast_body,ir_infer_types: use Python dict directly as namespace 2014-08-17 22:15:10 +08:00
30ef6119e6 compiler/ir_ast_body: refactor and add statement visitor 2014-08-17 21:46:11 +08:00
d41d06835c compiler/ir_values: support bool operation on VBool 2014-08-17 21:45:36 +08:00
3e4cbba018 compiler: new architecture for type inference and LLVM code emission 2014-08-16 23:20:16 +08:00
02798d1996 infer_type: better rules 2014-08-16 20:58:10 +08:00
8bdc7964b8 compiler: add infer_types module (WIP) 2014-08-13 22:08:34 +08:00
2135e37dca compiler: use value_to_ast(x) instead of ast.Num(x) 2014-08-13 18:02:24 +08:00
899a034204 compiler/lower_time: adapt to new unit system 2014-08-13 17:59:53 +08:00
9cbf31153a compiler/ir: compile fractions with denominator==1 as integers 2014-08-13 17:58:48 +08:00
70fbc6ad56 compiler/interleave: use eval_constant from tools 2014-08-13 17:58:06 +08:00
5481baac1d compiler/inline: cleanup reference manager, recognize Fraction 2014-08-13 17:56:55 +08:00
fe5b3cc67e compiler/fold_constants: use eval_constant from tools 2014-08-13 17:54:58 +08:00
0145e52d4b compiler/tools: add eval_constant and Fraction support 2014-08-13 17:54:22 +08:00
b2bb837d22 compiler/ir: add binary AND and OR 2014-07-23 17:10:12 -06:00
d922c3db7e compiler/ir: replace quantities with their integer value 2014-07-23 11:48:43 -06:00
1b52941381 compiler/ir: support shifts 2014-07-23 11:48:15 -06:00
8769066e89 compiler/devices: set initial time 2014-07-21 13:22:07 -06:00
a9b96cefbe compiler/ir: support AugAssign 2014-07-16 09:43:46 -06:00
591509d31b compiler: lower time transform 2014-07-15 11:22:11 -06:00
6509f1fd04 artiq.language.experiment -> artiq.language.core 2014-07-10 18:13:37 +02:00
ffd2bdc4eb compiler/inline: return number -> function RPC map 2014-07-07 19:11:07 +02:00
e0ac1193c6 compiler/ir: support function calls in expressions 2014-07-06 21:06:01 +02:00
a8ef4d8b91 compiler/ir: create machine code from kernel statements 2014-07-05 22:44:54 +02:00
99c99484ae compiler/ir: load into device 2014-07-05 19:38:45 +02:00
711be75c35 compiler/ir: pass arguments to syscall 2014-07-05 19:13:05 +02:00
10db450098 Minor cleanup 2014-07-04 17:50:35 +02:00
71323fb7cd compiler: system calls 2014-07-04 17:17:01 +02:00
74cdafdde5 compiler: interleave transform 2014-06-22 18:52:37 +02:00
6ea0430cec compiler/ir: simplify type dictionaries 2014-06-22 00:04:46 +02:00
b28fdf5fb0 compiler: add unroll_loops transform 2014-06-21 15:06:15 +02:00
5a8074a12f compiler: propagate AST node location info 2014-06-21 14:53:09 +02:00
c71eb702bb tools/make_stmt_transformer: pass args/kwargs 2014-06-21 12:13:28 +02:00
c3092ae13f compiler: factorize operation of NodeTransformer on statement lists 2014-06-21 00:40:52 +02:00
6400e28e4c compiler: fold constants 2014-06-21 00:19:56 +02:00
94ff2e2ddc compiler: share value_to_ast 2014-06-21 00:19:40 +02:00
5b0fd50dbe inline: support rw kernel attributes 2014-06-18 21:04:54 +02:00
d41ac863f4 inline: support kernel_attr_ro 2014-06-17 19:46:22 +02:00
0d9bdc101c inline: check inlined functions are on the same core device 2014-06-17 18:52:48 +02:00
08ab99d33e inline: basic function inlining 2014-06-17 18:37:51 +02:00
d87b207b8a compiler/inline: embeddable calls 2014-06-16 23:52:19 +02:00
9db8627081 compiler: generate RPC calls 2014-06-16 22:56:08 +02:00
792ac44245 inline: return statements 2014-06-16 22:01:20 +02:00
c021b2ef41 compiler/inline: handle function params and builtin calls 2014-06-16 21:52:38 +02:00
733a03b7ad cleanup 2014-06-16 21:35:08 +02:00
7ec448cdc9 compiler: inline transform WIP 2014-06-10 15:23:14 +02:00
7eb9641905 compiler: share eval_ast 2014-06-10 15:16:28 +02:00
9e8077b873 First simple attempt at compiling Python AST to LLVM IR 2014-06-07 18:47:06 +02:00
c769bdab9b Introduce compiler and device modules 2014-05-30 18:20:13 +02:00