David Nadlinger
bfbdba9205
compiler: Emit all-kernel_invariant objects as LLVM constants
...
This enables constant propagation optimisations, as verified by
the included test case. This is only a first stop-gap measure, though;
we should support optimisation based on kernel invariants on a more
fine-grained level.
2016-11-09 14:50:48 +00:00
whitequark
ec8fe6f8bd
Revert "Revert "Revert "Revert "Update for LLVM 3.9.""""
...
This reverts commit 7b81ed1d18
.
2016-11-08 14:22:47 +00:00
whitequark
7b81ed1d18
Revert "Revert "Revert "Update for LLVM 3.9."""
...
This reverts commit 0d7688017b
.
2016-11-08 12:58:20 +00:00
whitequark
0d7688017b
Revert "Revert "Update for LLVM 3.9.""
...
This reverts commit 5f5975844a
.
2016-11-08 11:59:16 +00:00
whitequark
798a5f70df
Revert "runtime: remove some redundant libm functions copied inline."
...
This reverts commit fee75bd50f
.
LLVM does not have lround as a libcall and this inhibits LICM.
2016-11-08 11:54:17 +00:00
David Nadlinger
6e77f65d50
compiler: Clarify recv_rpc value names and documentation [nfc]
...
Previously, the phi emitted for the pointer parameter to recv_rpc was –
rather confusingly – called "size", and the pseudo-code in the comment
had bit-rotted.
Signed-off-by: David Nadlinger <code@klickverbot.at>
2016-11-07 14:38:21 +00:00
David Nadlinger
7dcc987dd7
compiler: Fix break/continue targets in loop else blocks
...
Previously, they would still target the respective labels in the
just-exited loop.
Signed-off-by: David Nadlinger <code@klickverbot.at>
2016-11-05 02:35:01 +00:00
whitequark
cd68577dbc
compiler: add support for async RPCs.
2016-10-30 00:57:31 +00:00
whitequark
2a9e370840
llvm_ir_generator: make sure RPC allocations are not underaligned.
2016-10-16 16:43:03 +00:00
whitequark
7618907cad
runtime: use i64 for watchdog timeout, not i32.
2016-10-16 16:32:43 +00:00
whitequark
a8c017bfcc
runtime: port ksupport to Rust.
2016-10-16 16:32:43 +00:00
whitequark
fee75bd50f
runtime: remove some redundant libm functions copied inline.
2016-10-16 16:25:29 +00:00
whitequark
1cbb187136
runtime: eliminate va_list from kernel interface.
2016-09-30 03:07:27 +00:00
whitequark
ed60ba8c4c
compiler: skip kernel_invariant linting for exception types.
2016-09-14 23:34:57 +00:00
whitequark
feeb089505
compiler: warn about unused kernel_invariant entries.
...
Fixes #543 .
2016-09-14 23:28:55 +00:00
c414026b29
import_cache: make sure last line ends with \n as linecache does. Closes #547
2016-09-02 11:01:28 +08:00
whitequark
f26f446724
artiq_run: unbreak
2016-08-17 10:20:04 +00:00
whitequark
5f5975844a
Revert "Update for LLVM 3.9."
...
This reverts commit 3aa7b99b8f
.
2016-08-13 04:43:19 +00:00
whitequark
3aa7b99b8f
Update for LLVM 3.9.
2016-08-13 03:28:04 +00:00
whitequark
1a518ea7eb
compiler.embedding: implement string concatenation.
...
Fixes #526 .
2016-08-08 04:05:52 +00:00
whitequark
5a2306ae5a
compiler.embedding: implement type annotations for function arguments.
...
Fixes #318 .
2016-08-08 03:28:25 +00:00
84f4725015
cache source on import of modules that may contain kernels. Closes #416
2016-08-06 12:01:49 +08:00
whitequark
21bc285604
transforms.llvm_ir_generator: skip RPC values for attribute writeback.
2016-08-03 04:59:14 +00:00
whitequark
c50d436f0b
ir: invoke
is a valid delay
decomposition.
...
Fixes #510 .
2016-07-13 08:48:31 +00:00
whitequark
c5ba44b8a6
compiler.testbench.perf_embedding: more fine grained reporting.
2016-07-11 17:55:24 +00:00
whitequark
c4dc4e7bf5
compiler.testbench.perf_embedding: update for core changes.
2016-07-08 10:48:41 +00:00
whitequark
5a79fcf9ba
embedding: reimplement 373578bc
properly.
...
The core of the problem that 373578bc
was attempting to solve is
that diagnostics sometimes should be chained; one way of chaining
is the loc.expanded_from feature, which handles macro-like expansion,
but another is providing context.
Before this commit, context was provided using an ad-hoc override
of a diagnostic engine, which did not work in cases where diagnostic
engine was not threaded through the call stack. This commit uses
the newly added pythonparser context feature to elegantly handle
the problem.
2016-07-07 11:49:21 +00:00
whitequark
373578bc02
embedding: fix location for diagnostics on quoted values.
...
Fixes #489 .
2016-07-07 08:32:56 +00:00
whitequark
d90fd7dc00
compiler: implement numpy.full ( #424 ).
2016-07-07 06:33:38 +00:00
whitequark
7a671fb2fd
embedding: treat numpy.{int32,int64,array} specially ( #424 ).
...
Also, remove them from prelude to not pollute the namespace.
2016-07-07 06:33:38 +00:00
whitequark
933ea53c77
compiler: add basic numpy array support ( #424 ).
2016-07-06 09:51:57 +00:00
whitequark
906db876a6
language: replace coredevice int with numpy.{int32,int64}.
...
Fixes #453 .
2016-07-06 04:44:21 +00:00
whitequark
fa71b40c80
compiler: print the builtin type int(width=...) as np.int...
2016-07-06 04:22:51 +00:00
whitequark
ef2af8c331
compiler.embedding: use the builtin print as RPC.
...
Fixes #206 .
2016-06-28 04:42:41 +00:00
whitequark
6155f65366
compiler: remove now()/at().
...
Fixes #490 .
2016-06-28 04:39:14 +00:00
whitequark
21574bdfa9
compiler.embedding: rename user-defined types with identical names.
...
Fixes #478 .
2016-06-22 01:32:01 +00:00
whitequark
33e8e59cc7
compiler: implement min()/max() as builtins.
...
Fixes #239 .
2016-06-22 01:09:41 +00:00
whitequark
77d47c2fdd
transforms.artiq_ir_generator: split out finally→reraise control flow.
...
This makes it accessible to introspect by local access validator,
making some previously rejected code valid.
Fixes #331 .
2016-06-22 00:57:32 +00:00
whitequark
f2ae24da39
compiler: add support for Python modules.
...
Fixes #408 .
2016-06-21 23:35:07 +00:00
whitequark
c0e42bbfc8
compiler.embedding: always do one final inference pass.
...
Fixes #477 .
2016-06-16 14:18:43 +00:00
whitequark
26117e8d93
transforms.inferencer: allow variable as type of n
in []*n
.
...
Fixes #473 .
2016-06-16 13:35:00 +00:00
whitequark
e47538ca33
analyzer: explicitly delimit messages (with \x1D).
...
Fixes #461 .
2016-06-07 11:26:49 +00:00
whitequark
355af3e569
embedding: specialize inherited functions.
...
Fixes #414 .
2016-05-16 15:59:26 +00:00
whitequark
640022122b
embedding: refactor some more.
2016-05-16 14:38:09 +00:00
whitequark
d085d5a372
embedding: refactor.
2016-05-16 14:38:09 +00:00
whitequark
c94c411fd5
compiler: demangle symbols.
...
In future commits we'll add Itanium C++ ABI style mangling to ARTIQ
emitted function names.
2016-05-16 14:38:09 +00:00
whitequark
0826ceb8ba
Commit missing parts of a5bb4a24
.
2016-05-10 02:12:57 +00:00
whitequark
a5bb4a24af
compiler: support short form of raise.
...
Fixes #240 .
2016-05-10 01:41:40 +00:00
whitequark
6d29e768a5
Commit missing parts of 4e5d75295
.
2016-05-09 12:51:24 +00:00
whitequark
4e5d752951
compiler: fix quoting of methods ( fixes #423 ).
2016-05-09 12:25:57 +00:00
whitequark
f7d83e9bdf
compiler: make kernel_invariant an instance, not class, property.
...
Fixes #409 .
2016-04-29 13:06:11 +00:00
whitequark
aa0882a06f
embedding: ignore empty lines, like annotations, before kernel functions.
...
Fixes #363 .
2016-04-26 02:25:08 +00:00
whitequark
a88425b66b
compiler: allow RPCing builtin functions.
...
Fixes #366 .
2016-04-26 01:31:17 +00:00
whitequark
1464bae6b7
compiler: don't typecheck RPCs except for return type.
...
Fixes #260 .
2016-04-26 01:12:36 +00:00
whitequark
9cc9e8b276
embedding: s/kernel_constant_attributes/kernel_invariants/g
...
Requested in #359 .
2016-04-06 22:38:31 +00:00
whitequark
8b1c5e3a26
llvm_ir_generator: add fast-math flags to fcmp.
...
This is allowed in 3.8.
2016-04-05 00:48:41 +00:00
whitequark
ad83b092fa
llvm_ir_generator: change !{→unconditionally_}dereferenceable.
...
Since LLVM 3.8, !dereferenceable is weaker, so we introduce
!unconditionally_dereferenceable (http://reviews.llvm.org/D18738 )
to regain its functionality.
2016-04-05 00:48:41 +00:00
whitequark
72b952e850
llvm_ir_generator: fix DICompileUnit.language.
2016-04-05 00:48:41 +00:00
whitequark
a57aabb3ea
compiler: purge generated functions from backtraces.
2016-04-02 18:29:36 +00:00
whitequark
a1e98a4437
llvm_ir_generator: add TBAA metadata for @now.
2016-04-02 18:19:14 +00:00
whitequark
b1f371e578
llvm_ir_generator: update debug info emission for LLVM 3.8.
2016-04-02 18:05:40 +00:00
whitequark
df8018f0be
compiler: emit verbose assembly via ARTIQ_DUMP_ASM.
2016-04-01 09:34:51 +00:00
whitequark
d9dd7df3b2
compiler: add analysis passes from TargetMachine.
...
This doesn't have any effect right now, but is the right thing to do.
2016-04-01 09:34:36 +00:00
whitequark
10108e6d64
compiler: mark loaded pointers as !dereferenceable.
...
Also, lower the bound for test_pulse_rate_dds, since we generate
better code for it now.
2016-03-31 12:04:38 +00:00
whitequark
2c04979727
compiler: update for LLVM 3.7.
2016-03-31 11:23:47 +00:00
whitequark
b8bd344e54
compiler: use correct data layout.
2016-03-31 11:22:29 +00:00
whitequark
8a908a7656
llvm_ir_generator: do not use 'coldcc' calling convention.
...
First, this calling convention doesn't actually exist in OR1K
and trying to use it in Asserts build causes an UNREACHABLE.
Second, I tried to introduce it and it does not appear to produce
any measurable benefit: not only OR1K has a ton of CSRs but also
it is quite hard, if not realistically impossible, to produce
the kind of register pressure that would be relieved by sparing
a few more CSRs for our exception raising function calls, since
temporaries don't have to be preserved before a noreturn call
and spilling over ten registers across an exceptional edge
is not something that the code we care about would do.
Third, it produces measurable drawbacks: it inflates code size
of check:* functions by adding spills. Of course, this could be
alleviated by making __artiq_raise coldcc as well, but what's
the point anyway?
2016-03-29 15:19:46 +00:00
whitequark
586022023b
llvm_ir_generator: mark loads as non-null where applicable.
2016-03-29 13:34:37 +00:00
whitequark
f6b391bb4e
compiler: fix ARTIQ_DUMP_ELF.
2016-03-29 13:03:49 +00:00
whitequark
a9489246a4
llvm_ir_generator: don't mark non-constant attribute loads as invariant.
...
Oops.
2016-03-29 13:03:49 +00:00
whitequark
3ed852e077
Commit missing parts of 1d8b0d46
.
2016-03-28 21:44:31 +00:00
whitequark
1038f1321f
compiler: allow specifying per-function "fast-math" flags.
...
Fixes #351 .
2016-03-28 21:44:08 +00:00
whitequark
6f5332f892
compiler: allow flagging syscalls, providing information to optimizer.
...
This also fixes a crash in test_cache introduced in 1d8b0d46
.
2016-03-28 19:56:56 +00:00
whitequark
1d8b0d46bc
compiler: mark FFI functions as ModRef=Ref using TBAA metadata.
...
Fascinatingly, the fact that you can mark call instructions with
!tbaa metadata is completely undocumented. Regardless, it is true:
a !tbaa metadata for an "immutable" type will cause
AliasAnalysis::getModRefBehavior to return OnlyReadsMemory for that
call site.
Don't bother marking loads with TBAA yet since we already place
!load.invariant on them (which is as good as the TBAA "immutable"
flag) and after that we're limited by lack of !nonnull anyway.
Also, add TBAA analysis passes in our pipeline to actually engage it.
2016-03-28 02:52:15 +00:00
whitequark
418f0a5234
compiler: mark loads of kernel constant attributes as load invariant.
...
Also, enable LICM, since it can take advantage of this.
2016-03-28 00:44:32 +00:00
whitequark
ca7463a054
compiler: do not write back kernel constant attributes.
...
Fixes #322 .
2016-03-28 00:05:57 +00:00
whitequark
f4e6b18690
compiler: implement kernel constant attributes.
...
Part of #322 .
2016-03-27 16:10:07 +00:00
whitequark
f81930ffd6
compiler: run IPSCCP.
...
This doesn't do much, only frees some registers.
2016-03-27 02:00:05 +00:00
whitequark
7213984330
compiler: raise inliner threshold to the equivalent of -O3.
2016-03-27 01:08:13 +00:00
whitequark
e75ad3d1aa
compiler: extract runtime checks into separate cold functions.
...
This reduces register pressure as well as function size, which
favorably affects the inliner.
2016-03-27 01:02:15 +00:00
whitequark
20ad7629ac
llvm_ir_generator: generate code more amenable to LLVM's GlobalOpt.
...
This exposes almost all embedded methods to inlining, with massive
gains.
2016-03-26 21:35:48 +00:00
whitequark
186a564ba8
compiler: make quoted functions independent of outer environment.
2016-03-26 20:46:45 +00:00
whitequark
f5c720c3ee
compiler: tune the LLVM optimizer pipeline ( fixes #315 ).
2016-03-26 13:20:23 +00:00
whitequark
3ee9834197
compiler: significantly increase readability of LLVM and ARTIQ IRs.
2016-03-26 12:21:02 +00:00
whitequark
8d0566661a
compiler: quote functions directly instead of going through a local.
2016-03-25 22:35:55 +00:00
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