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