Slava Pestov
20dfbf7ac8
More SIMD work
...
- Rename SIMD types and register representations: <type>-<count> rather than <count><type>-array
- Make a functor to define 256-bit vector types, use it to define float-8 type
- Make SIMD instructions pure-insns so that they participate in value numbering
2009-09-03 20:58:56 -05:00
Joe Groff
0b9e5c034a
add compiler comparison codes for floating-point unordered comparisons; update x86 backend to generate proper code for all floating-point comparisons
2009-09-03 20:32:05 -05:00
Slava Pestov
9cc705f6ba
math.vectors.simd: split off intrinsics into a sub-vocabulary, to avoid loading most of the SIMD code on bootstrap
2009-09-03 03:43:43 -05:00
Slava Pestov
11aadb74af
compiler.tree.propagation: type function for clone had an issue, sometimes clone would get optimized out because of incorrect constant folding
2009-09-03 02:40:18 -05:00
Slava Pestov
52b99c050e
Initial implementation of SSE vector intrinsics:
...
- cpu.architecture: add SSE vector representations
- compiler.cfg.intrinsics.alien: remove an attempt at optimization that value numbering handles now
- compiler.cfg.representations: support instructions where the representation is set in the 'rep' slot, and support conversions between single and double floats
- alien-float, set-alien-float now use the single float representation, and the conversion is implicit; this fixes a long-standing bug where a register could get clobbered because of how %set-alien-float was defined on x86
- math.vectors.specialization: add support for SIMD specialization (where the vector word's body is replaced by another quotation), also specialize the 'sum' word
- math.vectors.simd: 4float-array, 2double-array, 4double-array types, and specializers for the math.vectors words
2009-09-03 02:33:07 -05:00
Slava Pestov
775b9af2f7
compiler: eliminate boilerplate by centralizing info in declarative INSN: syntax
2009-09-02 06:22:37 -05:00
Slava Pestov
14a063dd92
cpu.ppc: implement fast float function calls; 3x speedup on benchmark.struct-arrays on PowerPC
2009-09-01 15:19:26 -05:00
Slava Pestov
0cf3151216
compiler.cfg.intrinsics: cleanup: the "intrinsic" word property is now a quotation, not a boolean, making this mechanism more extensible
2009-08-30 22:20:49 -05:00
Slava Pestov
74d196d77c
compiler/tests/codegen.factor: don't do exact float comparison
2009-08-30 18:57:45 -05:00
Slava Pestov
43af9b06a4
compiler.cfg.linear-scan.live-intervals: dead-value-error is never thrown anymore
2009-08-30 05:15:18 -05:00
Slava Pestov
b35a01879e
%box-displaced-alien: fix clobberage found by Doug
2009-08-30 05:11:08 -05:00
Slava Pestov
f6a836d1e9
compiler.cfg.linear-scan now supports partial sync-points where all registers are spilled; taking advantage of this, there are new trigonometric intrinsics which yield a 2x performance boost on benchmark.struct-arrays and a 25% boost on benchmark.partial-sums
2009-08-30 04:52:01 -05:00
Slava Pestov
fa64522421
compiler.cfg.value-numbering: fix ##box-displaced-alien simplification
2009-08-28 19:05:49 -05:00
Slava Pestov
f30aa5d20e
compiler: add fixnum-min/max intrinsics; ~10% speedup on benchmark.yuv-to-rgb
2009-08-28 19:02:59 -05:00
Slava Pestov
99bf9fadfb
Performance improvements to make struct-arrays benchmark faster
...
- improved optimization of ##unbox-any-c-ptr on ##box-displaced-alien; convert it to ##unbox-c-ptr where possible using class info stored in the ##bda instruction
- make fcos, fsin, etc inline again; everything in math.libm inline again, except for fsqrt which is an intrinsic
- convert min and max on floats to float-min and float-max
- make min and max not inline, so that the above can work
- struct-arrays: rice a bit so that more fixnums come up
2009-08-28 05:21:16 -05:00
Slava Pestov
5f33f7306f
compiler.tree.propagation.transforms: don't fail to compile if 'at' called on something that's not an assoc
2009-08-27 18:57:56 -05:00
Slava Pestov
c9cba1cc00
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
9caf3f9248
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
546367b88a
use structs
2009-08-26 11:01:39 -05:00
Doug Coleman
be57edbff2
Merge branch 'master' of git://factorcode.org/git/factor
2009-08-26 09:15:33 -05:00
Slava Pestov
40b522c9d0
compiler.cfg.linear-scan: fix unit tests for new fake-representations
2009-08-26 08:58:00 -05:00
Slava Pestov
02ec791ab7
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
d5fb53d417
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
4fe0257169
cpu.x86: use SQRTSD instruction for math.libm:fsqrt word
2009-08-25 23:22:15 -05:00
sheeple
2f789f735d
basis/compiler/tests/low-level-ir: add ##copy double-float-rep test
2009-08-25 19:41:17 -05:00
Doug Coleman
96120dc8e5
update new structs again
2009-08-25 16:31:58 -05:00
Doug Coleman
3fa6500cd2
update compiler.tests.alien to joe's latest changes
2009-08-25 12:00:06 -05:00
Doug Coleman
3d05dd1abf
use new structs wherever possible in compiler tests
2009-08-25 11:59:33 -04:00
Slava Pestov
009d3a87f6
Add some unit tests
2009-08-22 17:15:10 -05:00
Slava Pestov
930c9ed2ac
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
c15555056e
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
0bfbcd2108
compiler.tree.modular-arithmetic: fix regression; set-alien-*-1 was not always open-coded
2009-08-20 17:56:49 -05:00
Slava Pestov
78f8d02ed4
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
b57894a78c
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
54ee3c3d01
compiler.cfg.stacks.local: more accurate local replace set computation; optimizes out 'swap swap'
2009-08-19 22:00:21 -05:00
Slava Pestov
552d069e9f
compiler: add unit tests for new bugs
2009-08-19 16:56:26 -05:00
Slava Pestov
c9cc1fa6a9
Fix interval inference of abs, absq when input is a complex number
2009-08-19 16:06:37 -05:00
Slava Pestov
75137bafb1
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
771488d87b
Fix some unit test failures
2009-08-18 03:49:05 -05:00
Slava Pestov
79a3f6b0d5
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
b3693e3c3b
compiler.tree.propagation: remove method inlining heuristic
2009-08-17 22:29:05 -05:00
Slava Pestov
a742145fd9
compiler.tree.modular-arithmetic: >fixnum elimination and value info annotations were too aggressive
2009-08-17 01:20:25 -05:00
Slava Pestov
aeb33f5f15
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
d93f6ed1f3
Merge branch 'master' of git://factorcode.org/git/factor
2009-08-14 20:11:54 -05:00
Daniel Ehrenberg
595e3b96cd
Improving write barrier elimination; change to compiler.cfg.utilities to support this
2009-08-14 19:41:41 -05:00
Doug Coleman
7c3824639e
move if-zero etc to math, remove 1-/1+ from math
2009-08-14 14:27:23 -05:00
Daniel Ehrenberg
54389b5e5c
Write barriers are hoisted out of loops when their target is slot-available
2009-08-13 20:26:44 -05:00
Doug Coleman
9f1030030d
Merge branch 'master' of git://factorcode.org/git/factor
...
Conflicts:
basis/calendar/calendar.factor
2009-08-13 19:40:02 -05:00
Doug Coleman
d1ce837569
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
25fad6550f
Global write barrier elimination tracks newly allocated objects
2009-08-13 15:18:47 -05:00
Daniel Ehrenberg
3aa4682301
Merge branch 'master' of git://factorcode.org/git/factor
2009-08-12 23:56:05 -05:00
Daniel Ehrenberg
f80416b40e
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
6f2170eb02
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
82d20d292c
Making write barrier elimination global
2009-08-11 21:21:21 -05:00
Slava Pestov
88f28a7245
math.intervals: fix interval-rem
2009-08-11 16:49:28 -05:00
Slava Pestov
5f0390d83b
alien.complex: fix tests
2009-08-11 14:07:33 -05:00
Philipp Brüschweiler
3dc33b67a9
various doc fixes
2009-08-11 16:58:47 +02:00
Slava Pestov
7956e63fc2
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
55d1b76ad7
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
12ab2b9e9d
_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
ca2d989547
compiler.cfg.linearization: change order to fit older unit tests
2009-08-08 23:06:57 -05:00
Slava Pestov
638f5b6579
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
26531ddf8b
More accurate interval-mod and interval-rem
2009-08-08 22:01:12 -05:00
Slava Pestov
f3903e2ac3
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
38ef8adde0
compiler.cfg.representation: OK to unbox output of ##load-reference globally
2009-08-08 20:03:13 -05:00
Slava Pestov
88d15dfbea
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
0eebb20780
compiler.cfg.ssa.liveness: fix tests
2009-08-08 16:15:45 -05:00
Slava Pestov
4d289e0844
compiler.cfg.representations: emit-conversion should not be private since CSSA construction uses it
2009-08-08 04:13:30 -05:00
Slava Pestov
2d575d7ec9
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
4921b819e0
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
4d2160799f
Split off the notion of a register representation from a register class
2009-08-07 17:44:50 -05:00
Slava Pestov
8b887630a0
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
6ce9bcc658
compiler.graphviz: add high-level IR call graph rendering
2009-08-05 03:33:06 -05:00
Slava Pestov
b22a530511
compiler.tree.recursive: have to check tail call flag of call tree edges too
2009-08-05 02:14:49 -05:00
Slava Pestov
a2f52c1e41
compiler.tree.recursive: more accurate loop detection
2009-08-04 19:18:40 -05:00
Slava Pestov
4b87ee4ebd
compiler.tree.recursive: add some more more loop detection tests
2009-08-04 16:23:14 -05:00
Slava Pestov
7c3d65af21
Merge branch 'master' of git://factorcode.org/git/factor
2009-08-03 10:31:27 -05:00
Slava Pestov
41a444a3d4
compiler.cfg.critical-edges: no longer neededed
2009-08-03 10:31:00 -05:00
Slava Pestov
cffd809ca0
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
e683004434
compiler.cfg.stacks.uninitialized: use bitand instead of min
2009-08-03 06:03:38 -05:00
Joe Groff
09b2acbd10
Merge branch 'master' of git://factorcode.org/git/factor
2009-08-02 23:16:52 -05:00
Joe Groff
b4befe3f69
[ [ ... ] compare ] sort => [ ... ] sort-with
2009-08-02 20:09:23 -05:00
Slava Pestov
5b6e0ce534
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
a61037d8f7
Merge branch 'master' of git://factorcode.org/git/factor
2009-08-02 18:46:27 -05:00
Slava Pestov
c29ee06adb
Revert "SSA destruction uses new SSA liveness checking"
...
This reverts commit 98c7de8410 .
2009-08-02 18:41:31 -05:00
Slava Pestov
b3786fb6eb
Revert "compiler.cfg.liveness.ssa: remove"
...
This reverts commit 6144fee101 .
2009-08-02 18:41:16 -05:00
Daniel Ehrenberg
d643a0de21
Merge branch 'master' of git://factorcode.org/git/factor
2009-08-02 18:25:37 -04:00
Daniel Ehrenberg
4e65589361
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
6144fee101
compiler.cfg.liveness.ssa: remove
2009-08-02 17:19:01 -05:00
Daniel Ehrenberg
318018f999
Removing phi-outs set in SSA liveness checking
2009-08-02 18:15:18 -04:00
Slava Pestov
8a631dfbd9
Merge branch 'master' of git://factorcode.org/git/factor
2009-08-02 17:07:06 -05:00
Slava Pestov
3104129127
compiler.cfg.ssa.liveness: fix unit tests
2009-08-02 17:06:35 -05:00
Daniel Ehrenberg
82ba9a2e0c
minor SSA liveness code reorganization
2009-08-02 18:05:51 -04:00
Daniel Ehrenberg
98c7de8410
SSA destruction uses new SSA liveness checking
2009-08-02 18:04:45 -04:00
Daniel Ehrenberg
5c6f0413eb
def-use puts phi uses in respective predecessors
2009-08-02 18:04:07 -04:00
Slava Pestov
85b6b4c052
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
929f195076
compiler.cfg.ssa.interference: cleanup
2009-08-02 10:35:02 -05:00
Slava Pestov
00254d1bde
compiler.cfg.ssa.destruction: new implementation: simpler and more correct
2009-08-02 10:26:52 -05:00
Slava Pestov
7665784911
Compiler speedups
2009-08-02 09:16:21 -05:00
Slava Pestov
d17d00595e
compiler.cfg.ssa.destruction.copies: factor out add-instructions combinator into compiler.cfg.utilities
2009-08-02 08:20:50 -05:00
Slava Pestov
ea7ba75a7f
Move compiler.cfg.ssa.destruction.interference to compiler.cfg.ssa.interference
2009-08-02 08:15:36 -05:00
Slava Pestov
b90e2c92f0
compiler.cfg.ssa.destruction.interference: fix a bug and add unit tests
2009-08-02 08:11:30 -05:00
Slava Pestov
1d289e68a4
compiler.cfg.debugger: fix load error
2009-08-02 08:11:04 -05:00
Slava Pestov
d84216ce6c
compiler.cfg.ssa.destruction: add some unit tests
2009-08-02 06:17:44 -05:00
Slava Pestov
ebe70b3bb1
compiler.cfg.critical-edges: update ##phi nodes
2009-08-02 06:17:22 -05:00
Slava Pestov
64b719269f
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
3a9e164275
compiler tests: add test case for coalescing bug
2009-08-02 03:49:54 -05:00
Slava Pestov
8028eb5776
compiler.cfg: clean up unit tests using some new utilities
2009-08-02 03:49:25 -05:00
Slava Pestov
c89cb4e3ca
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
49ac00097e
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
87a5ea36d1
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
eeea7f019d
Merge branch 'master' of git://factorcode.org/git/factor
2009-08-01 20:22:51 -05:00
Slava Pestov
bb1c904261
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
56f6f4d0ce
Merge branch 'master' of git://factorcode.org/git/factor
2009-08-01 20:33:41 -04:00
Slava Pestov
7ee7346505
compiler.cfg.liveness.ssa: fix bad bug discovered by littledan
2009-08-01 18:54:24 -05:00
Slava Pestov
86f8445eb6
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
14d8cc4e5e
compiler: Oops, typos in unit tests
2009-07-31 22:33:02 -05:00
Slava Pestov
a5c4877bf6
compiler.cfg.ssa.destruction: fix bug in renaming triggered by sequence-parser:take-sequence
2009-07-31 18:34:15 -05:00
Slava Pestov
db55a031df
Move a bunch of GC check generation logic to platform-independent side
2009-07-30 21:28:27 -05:00
Daniel Ehrenberg
76a5972a69
Faster SSA liveness testing
2009-07-30 15:23:47 -04:00
Slava Pestov
99216b8435
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
8677d56466
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
8ae9c4477a
compiler.cfg.ssa.destruction: fix
2009-07-29 23:43:00 -05:00
Slava Pestov
0d42e0fc1e
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
c815c8c5b5
compiler.cfg.linear-scan: more test fixes
2009-07-29 07:04:52 -05:00
Slava Pestov
5ecd0d91a3
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
bd70967f8a
compiler.cfg.linear-scan.resolve: fix unit tests to not depend on hashing
2009-07-29 06:48:01 -05:00
Slava Pestov
f260500bcd
compiler: fix test
2009-07-29 06:39:54 -05:00
Slava Pestov
68d06c4b06
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
02b1cc0c40
compiler.cfg.linear-scan.assignment: more efficient data structures
2009-07-29 06:12:33 -05:00
Slava Pestov
6e56e08012
compiler.cfg.linearization: fix bootstrap
2009-07-28 22:52:07 -05:00
Slava Pestov
89039e9977
Merge branch 'master' of git://factorcode.org/git/factor
2009-07-28 21:31:25 -05:00
Slava Pestov
c634f5a9a0
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
ac7447483d
compiler.cfg.ssa.destruction: rename coalesce word to destruct-ssa
2009-07-28 12:56:33 -05:00
Slava Pestov
bbd4e4af3e
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
a2ae560a8a
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
2a87faf681
IN: fix for compiler test
2009-07-28 11:16:21 -05:00
Slava Pestov
31caa7af2f
compiler.cfg.ssa.construction: Use TDMSC algorithm to compute Phi placement
2009-07-28 11:16:10 -05:00
Slava Pestov
7a158d84da
compiler.cfg: Rename ssa to ssa.construction, coalescing to ssa.destruction
2009-07-28 09:34:08 -05:00
Slava Pestov
905f52d4a9
compiler.cfg: Fix some unit tests
2009-07-28 08:56:14 -05:00
Slava Pestov
8f08ce94fa
compiler.cfg.branch-splitting: re-enable with a better heuristic
2009-07-28 08:48:05 -05:00
Slava Pestov
91d2b3e805
compiler.cfg.utilities: add loop-entry? word
2009-07-28 08:47:50 -05:00
Slava Pestov
6d4a54201b
compiler.cfg.linear-scan: fix resolve pass
2009-07-28 08:47:35 -05:00
Slava Pestov
f61dff0d5e
compiler.cfg.coalescing: cleanups
2009-07-28 08:47:03 -05:00
Slava Pestov
5d3a795e7d
Revert "compiler.cfg.coalescing: some cleanups"
...
This reverts commit e5834c4ba7 .
2009-07-28 07:51:44 -05:00
Slava Pestov
c44b13c29e
compiler.cfg.linear-scan.resolve: unit tests
2009-07-28 07:41:41 -05:00
Slava Pestov
3fc36e3750
compiler.cfg.utilities: fix stack effect declaration
2009-07-28 07:40:09 -05:00
Slava Pestov
f19ee61d3a
compiler.cfg.linear-scan: use compiler.cfg.parallel-copy in resolve pass
2009-07-28 07:39:46 -05:00
Slava Pestov
e5834c4ba7
compiler.cfg.coalescing: some cleanups
2009-07-28 07:37:50 -05:00
Slava Pestov
e6bdd27c2e
compiler.cfg.utilities: fix load error
2009-07-28 06:51:03 -05:00
Slava Pestov
496d59d86c
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
8ac396d9e0
Add some compiler tests
2009-07-28 06:45:31 -05:00
Slava Pestov
2fe741568c
compiler.cfg.liveness: fix liveness computation in case where instruction uses a register it defines
2009-07-28 06:45:02 -05:00
Slava Pestov
3550880850
compiler.cfg.critical-edges: reset RPO
2009-07-28 01:04:13 -05:00
Slava Pestov
164e5c4eb5
Add some tests that directly generate low level IR
2009-07-27 22:29:33 -05:00
Slava Pestov
536dc1c014
compiler.cfg.coalescing: precompute live intervals, add support for instructions where output cannot equal an input, split critical edges
2009-07-27 22:29:17 -05:00
Slava Pestov
cf23ee7996
compiler.cfg.two-operand: make it work in more cases
2009-07-27 22:28:29 -05:00
Slava Pestov
064248d25b
compiler.cfg.debugger: reset vreg counters
2009-07-27 22:28:13 -05:00
Slava Pestov
85975568d9
Debugging compiler.cfg.coalescing
2009-07-27 19:24:13 -05:00
Slava Pestov
3490456e07
compiler.cfg.parallel-copy: fix algorithm
2009-07-27 16:54:47 -05:00
Slava Pestov
cef47c452a
compiler.codegen: collect instruction statistics
2009-07-27 03:58:15 -05:00
Slava Pestov
7dec8d289e
compiler.cfg.coalescing: fix shuffling bug
2009-07-27 03:58:01 -05:00
Slava Pestov
e6d05dc722
compiler.cfg.phi-elimination: no longer needed
2009-07-27 02:20:53 -05:00
Slava Pestov
83d40198a4
compiler.cfg.coalescing: more or less complete, now needs debugging
2009-07-27 02:20:45 -05:00
Slava Pestov
d7f12feb64
compiler.cfg.coalescing: more work done
2009-07-27 00:31:21 -05:00
Slava Pestov
420e28b8bd
compiler.tree.propagation.info: fix load error
2009-07-27 00:30:24 -05:00
Slava Pestov
76de5a9376
compiler.cfg.coalescing: work in progress
2009-07-26 21:11:26 -05:00
Slava Pestov
0a3a08e506
compiler.cfg.copy-prop: remove ##phi nodes where all inputs are copy-equivalent
2009-07-26 21:11:02 -05:00
Slava Pestov
99601d34fa
compiler.cfg.utilities: move value-info utilities to compiler.tree.propagation.info
2009-07-26 21:10:33 -05:00
Slava Pestov
5e39e8c11f
compiler.cfg.def-use: build def-use chains
2009-07-26 21:10:14 -05:00
Slava Pestov
6f37596113
compiler.cfg.dominance: add pre order and max pre order numbers; use them to implement dominates? check
2009-07-26 21:10:05 -05:00
Slava Pestov
3293a72580
compiler.cfg.copy-prop: work in progress
2009-07-24 19:56:21 -05:00
Slava Pestov
ce7236437f
compiler.cfg.parallel-copy: forgot to add this
2009-07-24 19:46:33 -05:00
Slava Pestov
228fcea905
compiler.cfg.phi-elimination: move some utilities from compiler.cfg.utilities here since that's the only place they get used
2009-07-24 16:45:31 -05:00
Slava Pestov
d8836f8927
compiler.cfg: Fixing test failures
2009-07-24 06:08:07 -05:00
Slava Pestov
127de28195
compiler.cfg.copy-prop: Global copy propagation
2009-07-24 05:30:46 -05:00
Slava Pestov
c49d2cc7bc
compiler.cfg.value-numbering: insert ##copy instructions for instructions whose expressions simplify. While subsequent usages are replaced with the instruction computing the simplified vreg locally, global usages may exist of the original instruction. In this case, the ##copy is not dead
2009-07-24 05:30:30 -05:00
Slava Pestov
fcd015970e
compiler.cfg.write-barrier: simplify a little bit. It doesn't need to do copy propagation, since its a separate pass now
2009-07-24 05:29:28 -05:00
Slava Pestov
f1eddf34c9
compiler.cfg: introduce less temporaries when building CFG
2009-07-24 03:37:18 -05:00
Slava Pestov
229d1c9f47
compiler.cfg.builder: fix stack effect declaration
2009-07-23 21:24:15 -05:00
Slava Pestov
c2c3d64d6d
compiler.cfg.stacks: now performs online local DCN
2009-07-23 20:54:38 -05:00
Slava Pestov
377233bd90
Add testcase for recent bug
2009-07-23 18:03:14 -05:00
Slava Pestov
2726ebe4a9
compiler.cfg.linear-scan.mapping: simplify
2009-07-23 18:03:04 -05:00
Slava Pestov
2ec433e7c0
compiler.cfg.empty-blocks: new pass to delete empty blocks, runs after phi elimination
2009-07-23 18:02:46 -05:00
Slava Pestov
67c53c85b1
compiler.cfg.branch-splitting: now that we do SSA construction we can split branches with fixnum overflow ops (which have a live-out)
2009-07-23 18:02:29 -05:00
Slava Pestov
9d2a2ecabf
compiler.cfg.intrinsics: Disable inline allocation for now
2009-07-22 21:11:06 -05:00
Slava Pestov
1651deaaa7
Fixing compiler tests
2009-07-22 21:10:50 -05:00
Slava Pestov
0632c9665c
compiler.cfg.dcn.rewrite: remove unused word
2009-07-22 19:18:12 -05:00
Slava Pestov
daf446f842
compiler.cfg.checker: eliminate dead code before checking MR
2009-07-22 19:17:57 -05:00
Slava Pestov
dcf7ce82a9
compiler.cfg.builder: Fix construction of ##return instructions from #return-recursive nodes
2009-07-22 19:17:21 -05:00
Slava Pestov
50b4179647
Merge branch 'master' into dcn
2009-07-22 06:19:44 -05:00
Slava Pestov
093a685d68
compiler.cfg.dominance: fix unit tests
2009-07-22 06:19:31 -05:00
Slava Pestov
79d32afe4b
compiler.cfg.ssa: now builds pruned SSA form
2009-07-22 06:08:04 -05:00
Slava Pestov
898ac710fa
compiler.cfg.dominance: add algorithm for computing iterated dominance frontiers
2009-07-22 06:07:51 -05:00
Slava Pestov
c355c21de6
Move liveness back to compiler.cfg.liveness, fix a corner-case where it didn't work on some forms of non-SSA code
2009-07-22 06:07:28 -05:00
Slava Pestov
a857ff3797
Removed unused code from compiler.cfg.def-use
2009-07-22 06:05:33 -05:00
Slava Pestov
7c488f2b25
Insert _loop-entry in linearization pass instead of in CFG builder, so that optimizations don't have to worry about it
2009-07-22 06:05:17 -05:00
Slava Pestov
0b78d8fd3d
Fix bootstrap
2009-07-22 03:26:27 -05:00
Slava Pestov
b6bb12eea7
compiler.cfg: Fix conflicts after merging local optimization refactoring into DCN branch
2009-07-22 03:17:53 -05:00
Slava Pestov
5d9f7b0ed2
compiler.cfg: Major restructuring -- do not compute liveness before local optimization, and instead change local optimizations to be more permissive of undefined values. Now, liveness is only computed once, after phi elimination and before register allocation. This means liveness analysis does not need to take phi nodes into account and can now use the new compiler.cfg.dataflow-analysis framework
2009-07-22 03:08:28 -05:00
Slava Pestov
670d694ab9
Merge branch 'master' into dcn
2009-07-22 02:07:08 -05:00
Slava Pestov
538a82b3bd
Merge branch 'master' of git://factorcode.org/git/factor
2009-07-22 02:06:47 -05:00
Slava Pestov
89a048c0ac
compiler.cfg.dataflow-analysis: iterative dataflow analysis framework
2009-07-22 02:06:35 -05:00
Slava Pestov
8f1e1dbf6a
compiler.cfg.dcn.global: redo using compiler.cfg.dataflow-analysis
2009-07-22 02:05:40 -05:00
Slava Pestov
1240b630e0
compiler.cfg.stack-analysis: Out with the old, in with the new
2009-07-22 00:52:25 -05:00
Slava Pestov
7198a7dc37
Merge branch 'master' of git://factorcode.org/git/factor into dcn
2009-07-22 00:14:53 -05:00
Slava Pestov
2e07fcdd6d
compiler.cfg: Fix unit tests
2009-07-21 22:25:19 -05:00
Slava Pestov
4b51ef1391
compiler.cfg.dcn: Fixing various bugs, hook up with optimizer
2009-07-21 22:24:50 -05:00
Slava Pestov
b4bd85181f
Merge branch 'master' into dcn
2009-07-21 17:51:22 -05:00
Slava Pestov
f09b2bff39
compiler.cfg.registers: minor optimization
2009-07-21 17:49:44 -05:00
Slava Pestov
9b3c593332
compiler.cfg.ssa: Cytron's SSA construction algorithm
2009-07-21 17:49:30 -05:00
Slava Pestov
6b779b45df
compiler.cfg.dcn: remove stores to stack locations above top of stack (these are never read again)
2009-07-21 17:46:09 -05:00
Slava Pestov
b3a2880f02
Merge branch 'master' into dcn
2009-07-21 03:08:42 -05:00
Slava Pestov
907e752319
compiler.cfg.dominance: fix idom computation, compute dominator tree, compute dominance frontiers, add some tests
2009-07-21 03:02:45 -05:00
Slava Pestov
b801022472
Move conjoin-at from compiler.cfg.liveness to sets
2009-07-21 03:02:06 -05:00
Slava Pestov
a05ff8530a
compiler.cfg.dcn: flesh out rewrite pass
2009-07-21 01:24:19 -05:00
Slava Pestov
7139f55271
compiler.cfg: if a block has an instruction that kills values it must be the only instruction in the block
2009-07-19 20:12:04 -05:00
Slava Pestov
7a570eae0e
compiler.cfg.dcn: Implement height tracking
2009-07-19 19:45:23 -05:00
Slava Pestov
0a4fd0d400
compiler.cfg.builder: annotate calls with height changes, once again
2009-07-18 23:08:53 -05:00
Slava Pestov
a4317c1fd1
compiler.cfg.dcn: starting work on deconcatenatization pass to replace compiler.cfg.stack-analysis
2009-07-18 22:27:42 -05:00
Slava Pestov
64f7a290f5
compiler.cfg.stack-analysis: fix outdated tests
2009-07-18 06:38:42 -05:00
Slava Pestov
749522c29c
compiler.cfg.linear-scan: fix tests
2009-07-18 06:10:01 -05:00
Slava Pestov
df874c3b50
compiler.tree.finalization: undo a change that resulted in a compile time regression
2009-07-18 03:33:24 -05:00
Slava Pestov
dfc0dcfae2
Disable fixnum>bignum and bignum>fixnum intrinsics since they're not very useful and they increase code size significantly
2009-07-18 01:07:43 -05:00
Slava Pestov
9d831baa9c
compiler.cfg.linear-scan: algorithmic optimizations
2009-07-18 00:14:39 -05:00
Slava Pestov
9e6e61edfa
compiler.cfg: Move tail call optimization to the end, compiler.tree: simplify finalization pass because of this
2009-07-17 22:57:28 -05:00
Slava Pestov
f3be295a3c
compiler.cfg.builder: remove some dead code
2009-07-17 21:52:33 -05:00
Slava Pestov
6a21202a24
Remove some unnecessary work from stack-analysis pass
2009-07-17 18:39:41 -05:00
Slava Pestov
704e417087
Merge branch 'master' of git://factorcode.org/git/factor
2009-07-17 00:03:13 -05:00
Slava Pestov
d053f88431
compiler.tree.propagation.transforms: fix shift transform
2009-07-17 00:02:57 -05:00
Slava Pestov
39a70db831
Improve code generation for shift word: add intrinsics for fixnum-shift-fast in the case where the shift count is not constant, transform 1 swap shift into a more overflow check with open-coded fast case, transform bitand into fixnum-bitand in more cases
2009-07-16 23:50:48 -05:00
Daniel Ehrenberg
d63fd6c80e
Removing two unused words in compiler.cfg.two-operand
2009-07-16 22:59:38 -05:00
Daniel Ehrenberg
7884ddb55a
Merge branch 'master' of git://factorcode.org/git/factor
2009-07-16 22:42:39 -05:00
Daniel Ehrenberg
9ae962ded6
Phi elimination doesn't have the swap problem now
2009-07-16 22:42:13 -05:00
Slava Pestov
99faf3c79f
Overflowing fixnum intrinsics now expand into several CFG nodes. This speeds up the common case since only the uncommon case is now a stack syncpoint
2009-07-16 18:29:40 -05:00
Slava Pestov
1d20276250
compiler.cfg.stack-analysis: global optimization work in progress
2009-07-16 16:43:14 -05:00
Slava Pestov
c6b3279018
compiler.cfg.block-joining: relax join heuristic
2009-07-16 05:50:44 -05:00
Slava Pestov
c5e00da9f8
compiler.cfg.linear-scan.live-intervals: remove bogus assertion
2009-07-16 02:42:01 -05:00
Slava Pestov
82e77d891a
compiler.cfg.block-joining: join basic blocks connected by a single edge to improve effectiveness of local optimizations
2009-07-16 02:17:58 -05:00
Daniel Ehrenberg
5a5a6a34b9
fixing stupid bug in propagation
2009-07-16 00:43:54 -05:00
Daniel Ehrenberg
a295b28652
define-partial-eval framework in propagation pass makes it easy to add transforms; moving some transforms from stack checker to propagation, making them stronger
2009-07-16 00:34:50 -05:00
Slava Pestov
bff5a44c70
compiler.cfg: Fix regressions from recent changes
2009-07-14 20:43:06 -05:00
Slava Pestov
1d29dfa2d6
compiler.cfg.branch-splitting: don't split if there's one predecessor
2009-07-14 20:42:50 -05:00
Slava Pestov
b65ef327ce
compiler.cfg.value-numbering: merge in compiler.cfg.branch-folding
2009-07-14 20:05:01 -05:00
Slava Pestov
a8d3bd1d24
compiler.cfg.intrinsics.fixnum: don't generate -imm forms anymore since value numbering does it
2009-07-14 19:18:57 -05:00
Slava Pestov
bea69ea325
compiler.cfg.value-numbering: branch folding
2009-07-14 19:17:12 -05:00
Slava Pestov
a41f452f68
Fix codegen test
2009-07-14 16:11:14 -05:00
Slava Pestov
1cf5eadf5c
Merge branch 'master' of git://factorcode.org/git/factor
2009-07-14 16:05:35 -05:00
Slava Pestov
2e6ae2153c
compiler.cfg.value-numbering: more optimizations
2009-07-14 16:05:25 -05:00
Daniel Ehrenberg
324aeb0672
Merge branch 'master' of git://factorcode.org/git/factor
2009-07-14 14:25:42 -05:00