Slava Pestov
|
8f19f14c1f
|
compiler.cfg.instructions: forgot that ##box-displaced-alien needs a GC check; fixes segfault in benchmark.mandel
|
2009-08-27 04:09:35 -05:00 |
Slava Pestov
|
f662e6403a
|
compiler: new inline intrinsic for <displaced-alien> where the inputs have known types; value numbering now eliminates unnecessary allocation of displaced aliens if the result is immediately unboxed again
|
2009-08-27 00:06:19 -05:00 |
Doug Coleman
|
1b77718625
|
use structs
|
2009-08-26 11:01:39 -05:00 |
Doug Coleman
|
bbcf08cdc3
|
Merge branch 'master' of git://factorcode.org/git/factor
|
2009-08-26 09:15:33 -05:00 |
Slava Pestov
|
8bf709acd0
|
compiler.cfg.linear-scan: fix unit tests for new fake-representations
|
2009-08-26 08:58:00 -05:00 |
Slava Pestov
|
0ff80a063d
|
compiler: only run float test in low-level-ir if float intrinsics enabled; fixes SIGILL on non-sse2 x86 machines
|
2009-08-26 06:58:47 -05:00 |
Slava Pestov
|
8d55616d34
|
compiler.cfg.debugger: fix fake-representations so that low-level-ir tests can pass on x86
|
2009-08-25 23:44:01 -05:00 |
Slava Pestov
|
0df8aadce2
|
cpu.x86: use SQRTSD instruction for math.libm:fsqrt word
|
2009-08-25 23:22:15 -05:00 |
sheeple
|
61c1ed17d9
|
basis/compiler/tests/low-level-ir: add ##copy double-float-rep test
|
2009-08-25 19:41:17 -05:00 |
Doug Coleman
|
0ce57d0566
|
update new structs again
|
2009-08-25 16:31:58 -05:00 |
Doug Coleman
|
2c6ef83c13
|
update compiler.tests.alien to joe's latest changes
|
2009-08-25 12:00:06 -05:00 |
Doug Coleman
|
b756a37d75
|
use new structs wherever possible in compiler tests
|
2009-08-25 11:59:33 -04:00 |
Slava Pestov
|
81b72cb5c5
|
Add some unit tests
|
2009-08-22 17:15:10 -05:00 |
Slava Pestov
|
1961b4da16
|
next-fastcall-param word was not being called; on x86 its equivalent to inc but on ppc there is more logic, this fixes FFI on PowerPC
|
2009-08-21 20:15:19 -05:00 |
Slava Pestov
|
5197aca215
|
compiler.cfg.dataflow-analysis: when intersecting sets, treat uninitialized sets as universal rather than empty; reduces number of stack instructions generated by 1%
|
2009-08-20 18:15:41 -05:00 |
Slava Pestov
|
49bd2228ec
|
compiler.tree.modular-arithmetic: fix regression; set-alien-*-1 was not always open-coded
|
2009-08-20 17:56:49 -05:00 |
Slava Pestov
|
9ef8f6c81d
|
compiler.tree.modular-arithmetic: eliminate >bignum calls where possible, convert fixnum-shift to fixnum-shift-fast if shift count is positive, don't run if there are no modular values
|
2009-08-20 03:47:45 -05:00 |
Slava Pestov
|
f01f7ad6eb
|
compiler.tree.propagation: bitand custom inlining was wrong if the second input was a bignum
|
2009-08-20 03:47:07 -05:00 |
Slava Pestov
|
fd2f0a602d
|
compiler.cfg.stacks.local: more accurate local replace set computation; optimizes out 'swap swap'
|
2009-08-19 22:00:21 -05:00 |
Slava Pestov
|
a598cc35a5
|
compiler: add unit tests for new bugs
|
2009-08-19 16:56:26 -05:00 |
Slava Pestov
|
2dc99ea05f
|
Fix interval inference of abs, absq when input is a complex number
|
2009-08-19 16:06:37 -05:00 |
Slava Pestov
|
829107902e
|
compiler.tree.propagation: improved interval inference for absq eliminates a conditional from math.vectors:distance. Type inference for rational math also a bit sharper now
|
2009-08-19 02:33:41 -05:00 |
Slava Pestov
|
507e2b7f3a
|
Fix some unit test failures
|
2009-08-18 03:49:05 -05:00 |
Slava Pestov
|
d7594c3381
|
compiler: inline singleton predicates, and optimize predicate engines, reduces terrain demo deployed size by ~20kb
|
2009-08-17 23:59:24 -05:00 |
Slava Pestov
|
3047d4a451
|
compiler.tree.propagation: remove method inlining heuristic
|
2009-08-17 22:29:05 -05:00 |
Slava Pestov
|
bf57d78b09
|
compiler.tree.modular-arithmetic: >fixnum elimination and value info annotations were too aggressive
|
2009-08-17 01:20:25 -05:00 |
Slava Pestov
|
5297be3e19
|
compiler.tree.modular-arithmetic: stronger optimization handles > 1 usages case as well as values defined and used in loops. Eliminates 5 out of 8 >fixnum calls in benchmark.yuv-to-rgb
|
2009-08-15 18:42:41 -05:00 |
Daniel Ehrenberg
|
478b960560
|
Merge branch 'master' of git://factorcode.org/git/factor
|
2009-08-14 20:11:54 -05:00 |
Daniel Ehrenberg
|
3cec74867d
|
Improving write barrier elimination; change to compiler.cfg.utilities to support this
|
2009-08-14 19:41:41 -05:00 |
Doug Coleman
|
7c92ab1ea5
|
move if-zero etc to math, remove 1-/1+ from math
|
2009-08-14 14:27:23 -05:00 |
Daniel Ehrenberg
|
8197d9356b
|
Write barriers are hoisted out of loops when their target is slot-available
|
2009-08-13 20:26:44 -05:00 |
Doug Coleman
|
2ed4425b7a
|
Merge branch 'master' of git://factorcode.org/git/factor
Conflicts:
basis/calendar/calendar.factor
|
2009-08-13 19:40:02 -05:00 |
Doug Coleman
|
3f3d57032b
|
Delete empty unit tests files, remove 1- and 1+, reorder IN: lines in a lot of places, minor refactoring
|
2009-08-13 19:21:44 -05:00 |
Daniel Ehrenberg
|
5a3e350490
|
Global write barrier elimination tracks newly allocated objects
|
2009-08-13 15:18:47 -05:00 |
Daniel Ehrenberg
|
ad772cd261
|
Merge branch 'master' of git://factorcode.org/git/factor
|
2009-08-12 23:56:05 -05:00 |
Daniel Ehrenberg
|
d35e1eb76c
|
Fixing write-barrier elimination; adding bb as a parameter to join-sets in dataflow analysis
|
2009-08-12 23:52:29 -05:00 |
Slava Pestov
|
4ecf5a904a
|
More accurate wrap-interval in compiler.tree.propagation.info fixes test regression; constructing an interval with endpoints at infinity now outputs full-interval
|
2009-08-12 03:25:53 -05:00 |
Daniel Ehrenberg
|
1a7ab59f56
|
Making write barrier elimination global
|
2009-08-11 21:21:21 -05:00 |
Slava Pestov
|
7bfbb0c5ac
|
math.intervals: fix interval-rem
|
2009-08-11 16:49:28 -05:00 |
Slava Pestov
|
422dd24bad
|
alien.complex: fix tests
|
2009-08-11 14:07:33 -05:00 |
Philipp Brüschweiler
|
26859a45eb
|
various doc fixes
|
2009-08-11 16:58:47 +02:00 |
Slava Pestov
|
7e35723db0
|
compiler.tree.propagation: be more careful with intervals, ensuring that the inferred interval of a value is a subset of the value class's interval. This improves accuracy, for example [ >fixnum 1 + >fixnum most-positive-fixnum <= ] constant-folds to true
|
2009-08-10 01:16:49 -05:00 |
Slava Pestov
|
8a9c15ab0b
|
compiler.tree.escape-analysis: if the output of an #introduce node has an immutable tuple class type declaration, and it is not passed to any subroutine calls, or returned from the word, then unbox it. This speeds up vector arithmetic words on specialized arrays, because the specialized array is unboxed up-front, eliminating an indirection on every loop iteration
|
2009-08-09 16:29:21 -05:00 |
Slava Pestov
|
cc5476c823
|
_gc instruction doesn't need slot to hold GC root area size, since that's just tagged-values>> length
|
2009-08-09 03:08:13 -05:00 |
Slava Pestov
|
687454878a
|
compiler.cfg.linearization: change order to fit older unit tests
|
2009-08-08 23:06:57 -05:00 |
Slava Pestov
|
e400d80d8b
|
More accurate interval inference for mod, rem, and propagation can now infer intervals in the case where a value might be f. so, [ [ 127 bitand ] [ drop f ] if dup [ 0 >= ] [ not ] if ] now constant-folds down to 't'!
|
2009-08-08 23:03:45 -05:00 |
Slava Pestov
|
61ea749bb6
|
More accurate interval-mod and interval-rem
|
2009-08-08 22:01:12 -05:00 |
Slava Pestov
|
24a50c8006
|
compiler.cfg.two-operand: sometimes we can eliminate a copy in the x = y <op> y case
|
2009-08-08 20:03:42 -05:00 |
Slava Pestov
|
55acddef3f
|
compiler.cfg.representation: OK to unbox output of ##load-reference globally
|
2009-08-08 20:03:13 -05:00 |
Slava Pestov
|
d0c393aa60
|
compiler.cfg: new system to track when results of analyses need to be recomputed (reverse post order, linear order, predecessors, dominance, loops). Passes can now call needs-predecessors, needs-dominance, needs-loops at the beginning, and cfg-changed, predecessors-changd at the end. Linearization order now takes loop nesting into account, and linear scan now uses linearization order instead of RPO.
|
2009-08-08 20:02:56 -05:00 |
Slava Pestov
|
11dc0a23a8
|
compiler.cfg.ssa.liveness: fix tests
|
2009-08-08 16:15:45 -05:00 |
Slava Pestov
|
1bf8a0cac7
|
compiler.cfg.representations: emit-conversion should not be private since CSSA construction uses it
|
2009-08-08 04:13:30 -05:00 |
Slava Pestov
|
4b7ba38aab
|
compiler.cfg: virtual registers are integers now, and representations are stored off to the side. Fix bug in representation selection that would manifest if a value was used as a float and a fixnum in different branches; cannot globally unbox float in this case
|
2009-08-08 04:02:18 -05:00 |
Slava Pestov
|
e21ca289c3
|
compiler.cfg.representations: new pass to make global unboxing decisions, relies on new compiler.cfg.loop-detection pass for loop nesting information
|
2009-08-08 00:24:46 -05:00 |
Slava Pestov
|
725280d424
|
Split off the notion of a register representation from a register class
|
2009-08-07 17:44:50 -05:00 |
Slava Pestov
|
370f4c081d
|
compiler.cfg: convert code into two-operand form before SSA destruction; SSA destruction now operates on a relaxed SSA form where multiple defs of the same vreg are allowed, but only within a single basic block. This makes linear scan's coalescing redundant, allowing it to be removed completely
|
2009-08-05 18:57:46 -05:00 |
Slava Pestov
|
97ec3ea1b4
|
compiler.graphviz: add high-level IR call graph rendering
|
2009-08-05 03:33:06 -05:00 |
Slava Pestov
|
fb03a93763
|
compiler.tree.recursive: have to check tail call flag of call tree edges too
|
2009-08-05 02:14:49 -05:00 |
Slava Pestov
|
c3d60e5899
|
compiler.tree.recursive: more accurate loop detection
|
2009-08-04 19:18:40 -05:00 |
Slava Pestov
|
eed4f4dcfc
|
compiler.tree.recursive: add some more more loop detection tests
|
2009-08-04 16:23:14 -05:00 |
Slava Pestov
|
b49e4c9c9b
|
Merge branch 'master' of git://factorcode.org/git/factor
|
2009-08-03 10:31:27 -05:00 |
Slava Pestov
|
d286a7f426
|
compiler.cfg.critical-edges: no longer neededed
|
2009-08-03 10:31:00 -05:00 |
Slava Pestov
|
d20d335447
|
compiler.cfg.stacks: more accurate deconcatenatization inserts fewer partially redundant ##peeks. 11% improvement on benchmark.beust2, 2% reduction in ##peek and ##replace instructions inserted
|
2009-08-03 07:08:28 -05:00 |
Slava Pestov
|
720bfe378f
|
compiler.cfg.stacks.uninitialized: use bitand instead of min
|
2009-08-03 06:03:38 -05:00 |
Joe Groff
|
63e5b0d6d8
|
Merge branch 'master' of git://factorcode.org/git/factor
|
2009-08-02 23:16:52 -05:00 |
Joe Groff
|
7c5ef08aab
|
[ [ ... ] compare ] sort => [ ... ] sort-with
|
2009-08-02 20:09:23 -05:00 |
Slava Pestov
|
dac7edd2ab
|
compiler.cfg.def-use: remove compute-def-use word, passes have to call compute-defs or compute-uses now; compiler.cfg.ssa.liveness: don't compute dominance and def-use first since destruction does already
|
2009-08-02 19:12:32 -05:00 |
Slava Pestov
|
df6c87d350
|
Merge branch 'master' of git://factorcode.org/git/factor
|
2009-08-02 18:46:27 -05:00 |
Slava Pestov
|
32d9102feb
|
Revert "SSA destruction uses new SSA liveness checking"
This reverts commit 98c7de8410 .
|
2009-08-02 18:41:31 -05:00 |
Slava Pestov
|
a15b20a671
|
Revert "compiler.cfg.liveness.ssa: remove"
This reverts commit 6144fee101 .
|
2009-08-02 18:41:16 -05:00 |
Daniel Ehrenberg
|
665b3921d1
|
Merge branch 'master' of git://factorcode.org/git/factor
|
2009-08-02 18:25:37 -04:00 |
Daniel Ehrenberg
|
f7a53811c1
|
Merge branch 'master' of git://factorcode.org/git/factor
Conflicts:
basis/compiler/cfg/ssa/liveness/liveness-tests.factor
|
2009-08-02 18:23:49 -04:00 |
Slava Pestov
|
634e1dd525
|
compiler.cfg.liveness.ssa: remove
|
2009-08-02 17:19:01 -05:00 |
Daniel Ehrenberg
|
765efc1a66
|
Removing phi-outs set in SSA liveness checking
|
2009-08-02 18:15:18 -04:00 |
Slava Pestov
|
777bda70dc
|
Merge branch 'master' of git://factorcode.org/git/factor
|
2009-08-02 17:07:06 -05:00 |
Slava Pestov
|
8a8ebcb908
|
compiler.cfg.ssa.liveness: fix unit tests
|
2009-08-02 17:06:35 -05:00 |
Daniel Ehrenberg
|
3b78d03e2a
|
minor SSA liveness code reorganization
|
2009-08-02 18:05:51 -04:00 |
Daniel Ehrenberg
|
cf7ab59fb7
|
SSA destruction uses new SSA liveness checking
|
2009-08-02 18:04:45 -04:00 |
Daniel Ehrenberg
|
d349cc565a
|
def-use puts phi uses in respective predecessors
|
2009-08-02 18:04:07 -04:00 |
Slava Pestov
|
73e7ead209
|
compiler.cfg.ssa.destruction: add optimization from old destruction pass: don't run on CFGs that have no phi instructions
|
2009-08-02 10:57:27 -05:00 |
Slava Pestov
|
ba55633b19
|
compiler.cfg.ssa.interference: cleanup
|
2009-08-02 10:35:02 -05:00 |
Slava Pestov
|
82c1106945
|
compiler.cfg.ssa.destruction: new implementation: simpler and more correct
|
2009-08-02 10:26:52 -05:00 |
Slava Pestov
|
c1c8424605
|
Compiler speedups
|
2009-08-02 09:16:21 -05:00 |
Slava Pestov
|
8aa41672ca
|
compiler.cfg.ssa.destruction.copies: factor out add-instructions combinator into compiler.cfg.utilities
|
2009-08-02 08:20:50 -05:00 |
Slava Pestov
|
cff5976a0d
|
Move compiler.cfg.ssa.destruction.interference to compiler.cfg.ssa.interference
|
2009-08-02 08:15:36 -05:00 |
Slava Pestov
|
87e13db946
|
compiler.cfg.ssa.destruction.interference: fix a bug and add unit tests
|
2009-08-02 08:11:30 -05:00 |
Slava Pestov
|
7ec288b013
|
compiler.cfg.debugger: fix load error
|
2009-08-02 08:11:04 -05:00 |
Slava Pestov
|
b5a978d4e5
|
compiler.cfg.ssa.destruction: add some unit tests
|
2009-08-02 06:17:44 -05:00 |
Slava Pestov
|
c61b729125
|
compiler.cfg.critical-edges: update ##phi nodes
|
2009-08-02 06:17:22 -05:00 |
Slava Pestov
|
01f51a96cd
|
compiler.cfg.utilities: add each-phi combinator to iterate over all ##phi instructions in a basic block
|
2009-08-02 06:16:58 -05:00 |
Slava Pestov
|
21489ce85e
|
compiler tests: add test case for coalescing bug
|
2009-08-02 03:49:54 -05:00 |
Slava Pestov
|
e1c7f7394a
|
compiler.cfg: clean up unit tests using some new utilities
|
2009-08-02 03:49:25 -05:00 |
Slava Pestov
|
9bde92220b
|
compiler.cfg.two-operand: if last instruction in a basic block is an overflowing arithmetic op of the form x = y op x, we now convert it correctly. This fixes compiler regression with benchmark.dawes after recent coalescing changes
|
2009-08-01 23:50:47 -05:00 |
Slava Pestov
|
e01fc93812
|
compiler.tree.propagation.call-effect: fix case where quotation inlining could enter an infinite loop: [ dup call( quot -- ) ] dup call( quot -- ) etc
|
2009-08-01 23:34:14 -05:00 |
Slava Pestov
|
1ef9cd27d3
|
compiler.cfg.copy-prop: eliminate phi nodes that have the same inputs as a previous phi node in the basic block
|
2009-08-01 22:33:27 -05:00 |
Slava Pestov
|
05b7bb0079
|
Merge branch 'master' of git://factorcode.org/git/factor
|
2009-08-01 20:22:51 -05:00 |
Slava Pestov
|
20ec574965
|
compiler.cfg.ssa.destruction: fix bug in trivial-interference heuristic, and type error in code path that didn't run before
|
2009-08-01 20:22:31 -05:00 |
Daniel Ehrenberg
|
0838beed1e
|
Merge branch 'master' of git://factorcode.org/git/factor
|
2009-08-01 20:33:41 -04:00 |
Slava Pestov
|
76368cae9b
|
compiler.cfg.liveness.ssa: fix bad bug discovered by littledan
|
2009-08-01 18:54:24 -05:00 |
Slava Pestov
|
2d719534cf
|
compiler.cfg.stacks: kill set now includes all locations eliminated as a result of stack height decrease; reduces number of ##replace instructions generated by 2%
|
2009-08-01 06:12:43 -05:00 |