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 |
Slava Pestov
|
7c43f71c6d
|
compiler: Oops, typos in unit tests
|
2009-07-31 22:33:02 -05:00 |
Slava Pestov
|
d515715b0c
|
compiler.cfg.ssa.destruction: fix bug in renaming triggered by sequence-parser:take-sequence
|
2009-07-31 18:34:15 -05:00 |
Slava Pestov
|
45770c6250
|
Move a bunch of GC check generation logic to platform-independent side
|
2009-07-30 21:28:27 -05:00 |
Daniel Ehrenberg
|
8134d775a8
|
Faster SSA liveness testing
|
2009-07-30 15:23:47 -04:00 |
Slava Pestov
|
be363d1a5b
|
compiler.cfg: Get inline GC checks working again, using a dataflow analysis to compute uninitialized stack locations in compiler.cfg.stacks.uninitialized. Re-enable intrinsics which use inline allocation
|
2009-07-30 09:19:44 -05:00 |
Slava Pestov
|
791fbe4003
|
compiler.cfg.linear-scan: fix case where a register can be made available for only a part of a live interval's lifetime, but there are no more usages after the split location. This case never came up until global stack analysis, at which point it started to be exercised on x86-32
|
2009-07-30 02:13:30 -05:00 |
Slava Pestov
|
6274c0337a
|
compiler.cfg.ssa.destruction: fix
|
2009-07-29 23:43:00 -05:00 |
Slava Pestov
|
b133649edd
|
compiler.cfg.ssa.destruction: tweak in preparation for landing Dan's new SSA liveness analysis
|
2009-07-29 23:35:51 -05:00 |
Slava Pestov
|
cb36a40dc4
|
compiler.cfg.linear-scan: more test fixes
|
2009-07-29 07:04:52 -05:00 |
Slava Pestov
|
cb7735ddf4
|
compiler.cfg: remove 'regs' slot from instruction tuples now that register allocation doesn't use it anymore
|
2009-07-29 06:50:46 -05:00 |
Slava Pestov
|
639a1cbb1f
|
compiler.cfg.linear-scan.resolve: fix unit tests to not depend on hashing
|
2009-07-29 06:48:01 -05:00 |
Slava Pestov
|
34432c5f18
|
compiler: fix test
|
2009-07-29 06:39:54 -05:00 |
Slava Pestov
|
74766d1ccd
|
compiler.cfg.linear-scan.assignment: modifies instructions in place instead of storing a registers assoc for further compile-time performance improvement
|
2009-07-29 06:36:14 -05:00 |
Slava Pestov
|
1532a6f2e3
|
compiler.cfg.linear-scan.assignment: more efficient data structures
|
2009-07-29 06:12:33 -05:00 |
Slava Pestov
|
50bf6f52b4
|
compiler.cfg.linearization: fix bootstrap
|
2009-07-28 22:52:07 -05:00 |
Slava Pestov
|
eabaf9fc40
|
Merge branch 'master' of git://factorcode.org/git/factor
|
2009-07-28 21:31:25 -05:00 |
Slava Pestov
|
8c6b38533c
|
compiler.cfg.linearization: rotate loops. 2x speedup with empty times loop, 1.5x speedup on benchmark.dawes
|
2009-07-28 21:31:08 -05:00 |
Slava Pestov
|
9afa39aa3a
|
compiler.cfg.ssa.destruction: rename coalesce word to destruct-ssa
|
2009-07-28 12:56:33 -05:00 |
Slava Pestov
|
d913d7331f
|
compiler.cfg: Minor optimization. Instructions can now only ever produce a single value; this eliminates 1array constructions and some iterations
|
2009-07-28 12:29:07 -05:00 |
Slava Pestov
|
7d3b6892d5
|
compiler.cfg.ssa.construction: use the optimization from the pruned-SSA paper to minimize stack pushing and popping
|
2009-07-28 11:52:42 -05:00 |
Slava Pestov
|
7a6bdffaaa
|
IN: fix for compiler test
|
2009-07-28 11:16:21 -05:00 |
Slava Pestov
|
62fe308776
|
compiler.cfg.ssa.construction: Use TDMSC algorithm to compute Phi placement
|
2009-07-28 11:16:10 -05:00 |
Slava Pestov
|
d10993b837
|
compiler.cfg: Rename ssa to ssa.construction, coalescing to ssa.destruction
|
2009-07-28 09:34:08 -05:00 |
Slava Pestov
|
80e10f1bd0
|
compiler.cfg: Fix some unit tests
|
2009-07-28 08:56:14 -05:00 |
Slava Pestov
|
d394dd3c36
|
compiler.cfg.branch-splitting: re-enable with a better heuristic
|
2009-07-28 08:48:05 -05:00 |
Slava Pestov
|
ff81b055a5
|
compiler.cfg.utilities: add loop-entry? word
|
2009-07-28 08:47:50 -05:00 |
Slava Pestov
|
e6f5eab598
|
compiler.cfg.linear-scan: fix resolve pass
|
2009-07-28 08:47:35 -05:00 |
Slava Pestov
|
3edf4a2b75
|
compiler.cfg.coalescing: cleanups
|
2009-07-28 08:47:03 -05:00 |
Slava Pestov
|
cf26800dbd
|
Revert "compiler.cfg.coalescing: some cleanups"
This reverts commit e5834c4ba7 .
|
2009-07-28 07:51:44 -05:00 |
Slava Pestov
|
18717a449f
|
compiler.cfg.linear-scan.resolve: unit tests
|
2009-07-28 07:41:41 -05:00 |
Slava Pestov
|
009cfbfc8d
|
compiler.cfg.utilities: fix stack effect declaration
|
2009-07-28 07:40:09 -05:00 |
Slava Pestov
|
857ef94acc
|
compiler.cfg.linear-scan: use compiler.cfg.parallel-copy in resolve pass
|
2009-07-28 07:39:46 -05:00 |
Slava Pestov
|
f2c8f2824a
|
compiler.cfg.coalescing: some cleanups
|
2009-07-28 07:37:50 -05:00 |
Slava Pestov
|
3e6e5278a4
|
compiler.cfg.utilities: fix load error
|
2009-07-28 06:51:03 -05:00 |
Slava Pestov
|
a4cb242396
|
compiler.cfg.coalescing: Only run if CFG has ##phi nodes, fix interference for case where value is not used in a block and is not live-in, forgot to run liveness analysis first
|
2009-07-28 06:48:20 -05:00 |
Slava Pestov
|
cb07256ff5
|
Add some compiler tests
|
2009-07-28 06:45:31 -05:00 |