Joe Groff
9c388bf781
update compiler.cfg.intrinsics.simd tests
2009-11-24 12:50:27 -08:00
Joe Groff
65d8060075
fix simd intrinsic compilation
2009-11-24 11:37:28 -08:00
Joe Groff
152b0d2df5
break simd intrinsics into a separate vocab so they can be intrinsified before the simd methods compile
2009-11-19 11:53:46 -08:00
Joe Groff
59d85f7ad6
fix primitive emit fallback for simd intrinsics
2009-11-18 21:29:51 -08:00
Joe Groff
a3e4ecfc7d
enable simd intrinsics and fix first-pass compiler errors
2009-11-18 20:32:05 -08:00
Joe Groff
6583875055
tests for all simd intrinsics
2009-11-18 18:20:58 -08:00
Slava Pestov
0612bc6177
Factor source files should not be executable
2009-11-21 17:50:43 -06:00
Joe Groff
f545c5d3e5
properly handle -vector-op and case words in simd.backend
2009-11-18 12:36:41 -08:00
Joe Groff
cd2cf91b95
start on tests for simd intrinsics
2009-11-17 11:13:16 -08:00
Slava Pestov
e30d275e41
compiler.cfg: 'basic-block new hashcode' should not throw an exception; fixes tools.deploy.test.11
2009-11-16 02:01:36 -06:00
Joe Groff
d56afe9c3d
compilation fixes
2009-11-14 23:43:22 -06:00
Joe Groff
f544982fda
Merge branch 'master' of git://factorcode.org/git/factor into simd-cleanup
...
Conflicts:
basis/math/vectors/simd/functor/functor.factor
2009-11-14 21:02:39 -06:00
Joe Groff
8a8699ac98
backend fixups
2009-11-14 20:59:03 -06:00
Joe Groff
e323071c44
sever lingering dependencies on simd from compiler
2009-11-11 16:08:40 -06:00
Slava Pestov
41c17f0429
Fixing test failures
2009-11-11 02:40:24 -06:00
Slava Pestov
2afd7ce244
Faster identity-hashcode primitive; fast path now opencoded by the compiler
2009-11-11 02:27:19 -06:00
Joe Groff
eac9bacf40
backend for choosing available SIMD intrinsic implementations
2009-11-10 23:35:46 -06:00
Slava Pestov
064c00f78d
New identity-hashcode primitive
2009-11-10 21:18:54 -06:00
Slava Pestov
19283ed83d
compiler.cfg.intrinsics.slots: new implementation of value-tag
2009-11-10 17:30:27 -06:00
Joe Groff
75d04922b9
Merge branch 'master' into simd-cleanup
...
Conflicts:
basis/math/vectors/simd/functor/functor.factor
2009-11-05 11:27:08 -06:00
Joe Groff
4d54f27cd1
more intrinsic madness
2009-11-05 09:52:57 -06:00
Joe Groff
f6643a1c72
change ##horizontal-add-vector insn to better match what the HADD SSE instructions do (add adjacent pairs, pack results)
2009-11-04 12:18:01 -06:00
Slava Pestov
3c4c05e915
compiler.cfg.intrinsics.allot: fix inline byte array allocation on 32-bit platforms
2009-11-03 23:44:20 -06:00
Slava Pestov
109aa88b06
compiler: update unit tests for 4-bit tag change
2009-11-03 21:40:29 -06:00
Joe Groff
bd77633d5b
new intrinsic generators, pt1
2009-11-03 21:38:45 -06:00
Slava Pestov
51e9a891a8
cpu.x86: update %box-displaced-alien for introduction of address field
2009-11-03 03:17:43 -06:00
Slava Pestov
91ccc30a54
Merge branch 'master' into new_gc
2009-11-02 20:34:13 -06:00
Slava Pestov
0a15ae4d6b
compiler.cfg.intrinsics: uncomment line commented out by mistake
2009-11-02 20:33:14 -06:00
Slava Pestov
495f776d54
Merge branch 'master' into new_gc
2009-11-02 20:11:43 -06:00
Slava Pestov
8bd2273e44
compiler.cfg: don't generate useless methods in instruction meta-programming. reduces bootstrap time
2009-11-02 20:11:29 -06:00
Slava Pestov
a3b5c07e80
Minor bug fixes for 4-bit tags
2009-11-02 17:41:36 -06:00
Joe Groff
e36eb438fa
move all simd intrinsics to compiler.cfg.intrinsics.simd, and only load it when math.vectors.simd is loaded
2009-11-02 15:17:34 -06:00
Slava Pestov
e4ad642134
vm: 4 bit tags, new representation of alien objects makes unbox-any-c-ptr more efficient (work in progress)
2009-11-02 04:25:54 -06:00
Joe Groff
1cf45abf06
Merge branch 'master' of git://factorcode.org/git/factor
2009-10-30 00:42:37 -05:00
Joe Groff
b858860a67
add ##shl-vector-imm and ##shr-vector-imm insn variants. use merge/shr instead of compare/merge to do signed unpacks
2009-10-30 00:41:19 -05:00
Doug Coleman
1d12a6707d
sigma -> map-sum
2009-10-29 14:34:04 -05:00
Joe Groff
3fbe722561
Merge branch 'master' of http://factorcode.org/git/factor
...
Conflicts:
basis/locals/locals.factor
basis/peg/peg.factor
extra/infix/infix.factor
2009-10-28 16:17:24 -05:00
Joe Groff
6e1bffb1c5
update existing code to use :> ( ) when possible
2009-10-28 16:11:33 -05:00
Doug Coleman
bd13e018dd
memq? -> member-eq?, sorted-memq? -> sorted-member-eq?
2009-10-28 15:02:00 -05:00
Doug Coleman
1476cdb974
reverse-here -> reverse!
2009-10-28 14:40:15 -05:00
Doug Coleman
7ce4b746e5
parsed -> suffix!, add append!
2009-10-28 13:38:27 -05:00
Joe Groff
2ecf3fb568
fix load errors from bootstrapping
2009-10-28 12:51:03 -05:00
Slava Pestov
299b5b0f6c
filter-here -> filter!
2009-10-28 00:44:05 -05:00
Slava Pestov
50f5c3d116
remq -> remove-eq, delq -> remove-eq!
2009-10-28 00:23:08 -05:00
Slava Pestov
951e3e9c83
delete-nth -> remove-nth!
2009-10-27 23:41:57 -05:00
Slava Pestov
08e7d25dc5
change-each -> map!, deep-change-each -> deep-map!
2009-10-27 22:32:56 -05:00
Joe Groff
935c0797c3
update existing code for [let change
2009-10-27 22:05:37 -05:00
Joe Groff
c3b8847936
update a bunch of alien-callbacks and alien-indirects to use c-type words
2009-10-21 21:10:11 -05:00
Joe Groff
7fac3682a6
update some naked alien-invokes to use c-type words
2009-10-21 18:44:00 -05:00
Joe Groff
8a6b0a1453
generate unsigned vector comparison fallbacks using min/max or xor/signed compare
2009-10-20 22:30:57 -05:00
Joe Groff
cb36111a3c
generate better fallback code for vmin/vmax intrinsics
2009-10-20 19:22:38 -05:00
Joe Groff
6f72c3ca24
Merge branch 'master' of git://factorcode.org/git/factor
2009-10-20 17:42:29 -05:00
Joe Groff
764e085004
value numbering rewrite rules for vector ops to convert "not and" to "andn" and "not andn" to "and"
2009-10-20 17:29:01 -05:00
Slava Pestov
18be7e1f37
cpu.x86.32: only create 16-byte parameter area if the word calls into the VM
2009-10-20 05:02:42 -05:00
Slava Pestov
1e7893b6ce
compiler: FFI is now slightly more efficient when unboxing parameters, only changes data stack height once
2009-10-20 04:31:48 -05:00
Slava Pestov
2d5cdd19ec
compiler: on PPC, ANDI, ORI and XORI instructions take an unsigned 16-bit immediate, unlike ADDI, SUBI and MULLI which take a signed 16-bit immediate. The code generator was not aware of this, and so for example '[ >fixnum -16 bitand ]' would generate incorrect code. Split up small-enough? hook into immediate-arithmetic? and immediate-bitwise? and update value numbering to be aware of this. Fixes classes.struct bitfields test failure
2009-10-19 04:58:29 -05:00
Joe Groff
448ef2f1d5
fix unsigned vector unpack
2009-10-16 14:25:33 -05:00
Slava Pestov
d48c72a274
compiler.cfg: fix unit tests
2009-10-15 06:01:46 -05:00
Slava Pestov
7d97c19227
compiler: tweak ##write-barrier-imm
2009-10-15 02:40:23 -05:00
Slava Pestov
1ce39963fd
Working on adding support for the new write barrier to optimized code
2009-10-14 02:06:01 -05:00
Joe Groff
97ab9dc4ab
only emit ##alien-vector/##set-alien-vector insns if the rep is available
2009-10-10 12:53:10 -05:00
Joe Groff
d9002127fa
have vshuffle accept simd-128 variable byte shuffles
2009-10-10 11:30:11 -05:00
Joe Groff
3bc097f6ff
rename ##shuffle-vector to ##shuffle-vector-imm, and add a new ##shuffle-vector for dynamic shuffles. have vshuffle use ##shuffle-vector to do word and byte shuffles on x86
2009-10-09 21:26:27 -05:00
Joe Groff
471c86a110
generate better code for vabs when instruction isn't available instead of using software fallback (-0.0 andn for floats, x > 0 ? x : -x for signed ints, nop for unsigned ints)
2009-10-09 14:24:55 -05:00
Joe Groff
01f5d392be
implement vneg as an intrinsic in terms of load -0, subtract
2009-10-09 13:16:39 -05:00
Daniel Ehrenberg
2db25b937e
Doing constant folding on ##neg and ##not in value numbering
2009-10-08 01:57:54 -05:00
Joe Groff
dd691a61e8
break vector compare intrinsics into %compare, %or, and %not instructions that map directly to cpu instructions
2009-10-07 15:27:03 -05:00
Joe Groff
f2c9eb79e2
decompose %unpack-vector-head/tail into %compare-vector/%merge-vector-head/tail or %tail>head-vector/%unpack-vector-head insns when there isn't an actual unpack insn; get rid of fake x86 implementations
2009-10-07 14:09:46 -05:00
Joe Groff
fd6f370119
typo in convert-to-fill-vector?
2009-10-07 12:53:10 -05:00
Joe Groff
47cfb7d3a5
fix ##load-constant/##scalar>vector folding when constant is a fixnum
2009-10-07 12:46:08 -05:00
Joe Groff
ea051063a4
convert all-ones vector ##load-reference/##load-constant to a ##fill-vector insn
2009-10-07 12:35:21 -05:00
Joe Groff
34def34481
don't generate a ##not-vector instruction if the cpu doesn't have one; instead, fall back to a ##fill-vector/##xor-vector combo. get rid of pretend %not-vector in cpu.x86
2009-10-07 11:59:36 -05:00
Joe Groff
879fe9a665
fix x86 %unpack-vector insns
2009-10-06 20:38:51 -05:00
Joe Groff
785f8620fd
glue conversion intrinsics to instructions
2009-10-06 20:13:38 -05:00
Joe Groff
fb8eeb6065
Merge branch 'master' of git://factorcode.org/git/factor
2009-10-05 22:34:41 -05:00
Joe Groff
529c444e32
add insns for vector pack, unpack, integer>float, and float>integer
2009-10-05 22:34:14 -05:00
Slava Pestov
55fe25ebd1
Merge branch 'master' of git://factorcode.org/git/factor
2009-10-05 18:22:09 -05:00
Slava Pestov
5b40fc6533
compiler.cfg.linear-scan: fix unit test
2009-10-05 18:21:58 -05:00
Joe Groff
fbe810fc3b
rename SIMD vmerge and kids to (vmerge), make new vmerge more generally useful
2009-10-05 17:55:39 -05:00
Slava Pestov
b4e36608da
compiler.cfg: remove _gc instruction, it doesn't need to exist, and change GC checks to ensure that the right amount of space is available instead of blindly checking for 1Kb
2009-10-05 05:27:49 -05:00
Joe Groff
0c9c3d4859
add %merge-vector-head and %merge-vector-tail instructions to back vmerge
2009-10-03 21:48:53 -05:00
Joe Groff
04bb03bb61
add intrinsics for v<=, v<, v=, v>, v>=, vunordered?
2009-10-03 11:29:34 -05:00
Joe Groff
4e024cbbc2
extend x86 %compare-vector to cover all comparison codes, sometimes stupidly for now
2009-10-02 23:19:56 -05:00
Joe Groff
38f413a8a6
add intrinsic for vnot/vbitnot
2009-10-02 20:04:28 -05:00
Joe Groff
aa3392e50f
implement vand, vor, vandn, and vxor as bitwise intrinsics for simd types
2009-10-02 14:17:01 -05:00
Slava Pestov
cb71fbf4fe
Fix compiler.cfg.value-numbering and math.matrices.simd unit tests
2009-10-02 02:32:35 -05:00
Slava Pestov
bcbdc9e0c8
Merge branch 'master' of git://factorcode.org/git/factor into improved-aa
2009-10-02 00:21:44 -05:00
Slava Pestov
fb09d67936
compiler.cfg.alias-analysis: fix ##compare where operands are copies
2009-10-01 23:54:19 -05:00
Slava Pestov
2a4475f85e
Fix alias analysis of a ##compare whose input is another ##compare
2009-10-01 23:20:05 -05:00
Joe Groff
53b265f682
Merge branch 'master' of git://factorcode.org/git/factor
...
Conflicts:
basis/compiler/codegen/codegen.factor
2009-10-01 23:14:16 -05:00
Slava Pestov
31f39ce32f
compiler.cfg.alias-analysis: optimize ##vm-field-ptr and ##alien-global instructions, and optimize out ##compare between values of different alias classes; this optimizes '[ [ >float ] bi@ [ + ] [ - ] 2bi eq? ]' down to an o-op and removes boxing from '[ [ >float ] bi@ [ + ] [ - ] 2bi = ]'
2009-10-01 23:03:17 -05:00
Joe Groff
f9695951a0
fold test-vector/branch sequences into a test-vector-branch instruction
2009-10-01 19:53:30 -05:00
Slava Pestov
c3d81cefe9
compiler.cfg: don't unbox the same value more than once per basic block
2009-10-01 19:41:23 -05:00
Slava Pestov
b9577e2b0e
compiler.cfg.instructions: remove ##box-float, ##unbox-float, ##box-vector, ##unbox-vector since they can be expressed in terms of ##alien-double, ##set-alien-double, ##alien-vector, ##set-alien-vector, and ##allot
2009-10-01 18:07:50 -05:00
Joe Groff
d14f150b58
%test-vector instruction for vany?, vall?, vnone?
2009-10-01 15:35:38 -05:00
Joe Groff
987ced4070
%compare-vector instruction (only does v= for now)
2009-10-01 14:31:37 -05:00
Joe Groff
a93f8f66f9
Revert "add a %blend-vector intrinsic for v?"
...
This reverts commit 21e4b28b67
.
2009-09-30 23:40:37 -05:00
Joe Groff
67cc45235d
Merge branch 'master' of git://factorcode.org/git/factor
2009-09-30 23:04:04 -05:00
Joe Groff
7db7b63552
add a %blend-vector intrinsic for v?
2009-09-30 23:03:59 -05:00
Slava Pestov
2384b630b2
math.vectors.simd: use fallbacks for hlshift, hrshift, vshuffle if parameter is not a literal;al; element access in int-4 on x86-64 now sign-extends the value; don't throw error at compile time if parameter for vshuffle does not have enough elements
2009-09-30 20:04:37 -05:00
Joe Groff
2625f2d210
Merge branch 'master' of git://factorcode.org/git/factor
2009-09-30 11:35:40 -05:00
Joe Groff
cb646db54a
add a "test-mr." word to compiler.cfg.debugger equivalent to "test-mr mr."
2009-09-30 11:34:19 -05:00
Slava Pestov
b677822b76
compiler.cfg.value-numbering: fix overly-zealous ##compare-imm conversion
2009-09-30 05:09:20 -05:00
Slava Pestov
cdc7b7e2c7
Various minor compiler tweaks: Combine address calculation with dereferencing in alien accessors; convert SIMD XOR of a vector with itself into an XOR of the destination with itself; convert SIMD unbox of zero vector into XOR of the destination with itself; fix SIMD indexing on x86-64
2009-09-30 05:00:36 -05:00
Slava Pestov
1da18d06b1
compiler.cfg.value-numbering: add some more rewrite rules, neg/neg, not/not, and a few for SIMD
2009-09-30 02:18:29 -05:00
Slava Pestov
80e84a357d
math.vectors.simd: add vbroadcast intrinsic, fix integer overflow issues
2009-09-29 22:58:20 -05:00
Slava Pestov
810cd7b4bb
compiler.cfg.ssa.destruction: don't coalesce registers with different representations, even if they're in the same register class, since this messes up spilling
2009-09-29 22:28:20 -05:00
Slava Pestov
f395d83379
math.vectors.simd: add fast intrinsic for 'nth', replace broadcast primitive with shuffles
2009-09-29 04:48:11 -05:00
Slava Pestov
e40a95c1e1
math.vectors.simd: add vshuffle intrinsic
2009-09-28 23:12:13 -05:00
Slava Pestov
a8ea929ad9
Work in progress
2009-09-28 17:31:34 -05:00
Slava Pestov
08a2eb74f4
cpu.x86: shifts didn't work if dst != src1; re-organize file a bit
2009-09-28 05:39:53 -05:00
Slava Pestov
da5f0d0a14
compiler.cfg.ssa.destruction: we can coalesce two registers with different representations as long as they both belong to the same register class
2009-09-28 03:24:54 -05:00
Slava Pestov
b2ea3afd84
math.vectors.simd: add hlshift, hrshift (128-bit shift), vbitandn intrinsics
2009-09-28 02:17:46 -05:00
Slava Pestov
2de6ab9e21
compiler.cfg.linear-scan: fix tests for hash order
2009-09-27 23:35:56 -05:00
Slava Pestov
1d872db58d
compiler.cfg.linear-scan: tweak it so that register allocation does not depend on hashing order
2009-09-27 23:29:48 -05:00
Slava Pestov
59fbe85c9b
compiler.cfg: nuke ##bignum>integer and ##integer>bignum since they were unused
2009-09-27 20:36:05 -05:00
Slava Pestov
66071f45a3
Add a couple more def-is-use instructions
2009-09-27 20:34:20 -05:00
Slava Pestov
f757b454cc
Merge branch 'master' into more_aggressive_coalescing
2009-09-27 19:29:50 -05:00
Slava Pestov
705b4ab5c3
compiler.cfg.linear-scan: fix partial sync point logic in case where dst == src, and clean up spilling code
2009-09-27 19:28:20 -05:00
Slava Pestov
1e841e5086
compiler.cfg.ssa.destruction: more aggressive coalescing work in progress
2009-09-27 17:17:26 -05:00
sheeple
01a4047126
Merge branch 'slots' of git://factorcode.org/git/factor into slots
...
Conflicts:
basis/cpu/x86/x86.factor
2009-09-26 03:12:42 -05:00
Daniel Ehrenberg
51f2bbd74b
Completing slot and set-slot changes on x86
2009-09-26 01:39:48 -05:00
Daniel Ehrenberg
7bd330cfd5
Making ##slot and ##set-slot not have a temporary parameter
2009-09-26 00:28:14 -05:00
Slava Pestov
c0abb9ce95
hints: fix regression with declarations
2009-09-25 18:50:08 -05:00
Slava Pestov
bbbb207dab
Some fixes and cleanups in math.vectors
...
- Tighten up type inference for operations on complex float arrays
- Fix v. to have correct behavior with complex numbers
- Rename v<< and v>> to vlshift and vrshift to avoid clashing with v>> accessor
2009-09-24 06:58:33 -05:00
Slava Pestov
cb497f009b
Merge branch 'vm_cleanup' of git://github.com/phildawes/factor
2009-09-24 04:31:55 -05:00
Slava Pestov
7b6128dd03
math.vectors.simd: add v<< and v>> intrinsics for bitwise shifts on elements
2009-09-24 03:32:39 -05:00
Phil Dawes
84faf2431f
cleaned up vm-field-ptr compiler code
2009-09-24 08:16:57 +01:00
Slava Pestov
9f59f6b9c6
Merge branch 'master' into integer-simd
2009-09-23 02:48:38 -05:00
Slava Pestov
7d39499d86
compiler.cfg.ssa.cssa: correctly handle overflowing fixnum instructions
2009-09-23 02:47:56 -05:00
Slava Pestov
43fa252af5
math.vectors.simd: new operations: vabs vsqrt vbitand vbitor vbitxor
2009-09-23 02:47:14 -05:00
Slava Pestov
d23826906f
Merge branch 'master' into integer-simd
2009-09-22 20:21:40 -05:00
Slava Pestov
0e3a261637
Fix test failures in compiler.cfg.linearization.order, compiler.tests.low-level-ir and compiler.graphviz
2009-09-22 05:07:52 -05:00
Slava Pestov
629fd1fc82
Merge branch 'master' into integer-simd
2009-09-22 03:24:52 -05:00
Slava Pestov
513ba1f176
compiler.cfg.linearization.order: basic blocks were being inserted twice if some blocks had repeated successors, causing problems for register allocation
2009-09-22 03:19:23 -05:00
Slava Pestov
9d90bdd439
Fix conflict
2009-09-20 23:18:07 -05:00
Slava Pestov
ea44ea3522
math.vectors.simd: add saturated arithmetic operations
2009-09-20 23:16:02 -05:00
Slava Pestov
acea55c692
math.vectors: add v+- word which is accelerated by SSE3
2009-09-20 17:43:16 -05:00
Phil Dawes
ff8f2b10ec
fixed up getenv compiler intrinsic to use vm struct userenv
2009-09-16 08:16:32 +01:00
Joe Groff
4d16c569f0
struct classes now make their own C type without help from alien.structs. remove alien.structs dependencies from everywhere outside of alien and compiler, and have the FFI handle both alien.structs and classes.struct c-types
2009-09-15 17:38:49 -05:00
Slava Pestov
4f702de449
math.functions: more accurate log10 (fixes problem reported by OneEyed)
2009-09-14 16:19:58 -05:00
Slava Pestov
a2de9d9e54
compiler.cfg.builder: don't run certain tests if float intrinsics are not available
2009-09-13 23:12:47 -05:00
Slava Pestov
32b95c2cdf
math: add unordered comparison operators u< u<= u> u>= which behave exactly like < <= > >= except no floating point exceptions are set if one or both inputs are NaNs; also add efficient intrinsic for unordered? predicate, and fix propagation type functions for abs, absq, and bitnot
2009-09-12 22:20:13 -05:00
Slava Pestov
86a848bae6
compiler.cfg.intrinsics: compile float-mod as a ##binary-float-function instead of a primitive call
2009-09-11 21:00:17 -05:00
Slava Pestov
daff63071f
Fix the build
2009-09-09 13:44:54 -05:00
Slava Pestov
15d85c1c4f
compiler.cfg.save-contexts: add new pass
2009-09-08 21:56:28 -05:00
Slava Pestov
7e2f0e5dbf
compiler: separate ##save-context instruction from ##alien-invoke, generate a ##save-context for libm calls, and add a pass to combine multiple context saves within a basic block. Fixes crashes with FP traps thrown by libm functions on x86-32
2009-09-08 21:50:55 -05:00
Joe Groff
0ea9949e51
split unordered and ordered float comparison intrinsics in compiler; generate only unordered comparisons for now
2009-09-08 17:04:26 -05:00
Slava Pestov
bbca00e2ae
Fix conflicts
2009-09-07 23:51:25 -05:00
Slava Pestov
7c04b912bb
compiler.cfg.value-numbering: update tests for Joe's condition code changes
2009-09-04 03:11:56 -05:00
Slava Pestov
4a2823b2eb
compiler: tweak generated code
2009-09-04 03:01:18 -05:00
Slava Pestov
e11d1e37f5
math.vectors.simd: allow punning SIMD vectors between types
2009-09-04 02:35:58 -05:00
Slava Pestov
c92e54b560
compiler.cfg.intrinsics: fix type detection on the alien type for vector accessors
2009-09-04 02:22:54 -05:00
Slava Pestov
e36a0d7ef4
compiler: clean up code generation for alien boxing/unboxing a bit
2009-09-03 21:22:43 -05:00
Slava Pestov
4d5a4222b6
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
036ff77306
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
bf81cb4259
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
ff8c70dbe0
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
85a2bfab6c
compiler: eliminate boilerplate by centralizing info in declarative INSN: syntax
2009-09-02 06:22:37 -05:00
Slava Pestov
f91b539c31
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
868009aaee
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
447c5fbf7a
compiler.cfg.linear-scan.live-intervals: dead-value-error is never thrown anymore
2009-08-30 05:15:18 -05:00
Slava Pestov
9595be4bf9
%box-displaced-alien: fix clobberage found by Doug
2009-08-30 05:11:08 -05:00
Slava Pestov
0db01f6d5f
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
908b4742c5
compiler.cfg.value-numbering: fix ##box-displaced-alien simplification
2009-08-28 19:05:49 -05:00
Slava Pestov
2bb6293217
compiler: add fixnum-min/max intrinsics; ~10% speedup on benchmark.yuv-to-rgb
2009-08-28 19:02:59 -05:00
Slava Pestov
d957ae4e44
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
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
Slava Pestov
8bf709acd0
compiler.cfg.linear-scan: fix unit tests for new fake-representations
2009-08-26 08:58:00 -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
Slava Pestov
81b72cb5c5
Add some unit tests
2009-08-22 17:15:10 -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
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
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
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
d35e1eb76c
Fixing write-barrier elimination; adding bb as a parameter to join-sets in dataflow analysis
2009-08-12 23:52:29 -05:00
Daniel Ehrenberg
1a7ab59f56
Making write barrier elimination global
2009-08-11 21:21:21 -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
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
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
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
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
d515715b0c
compiler.cfg.ssa.destruction: fix bug in renaming triggered by sequence-parser:take-sequence
2009-07-31 18:34:15 -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
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
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
1878b0dc32
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
d2b158c8e4
compiler.cfg.critical-edges: reset RPO
2009-07-28 01:04:13 -05:00
Slava Pestov
3cc71a1934
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
e8cf50ac3e
compiler.cfg.two-operand: make it work in more cases
2009-07-27 22:28:29 -05:00
Slava Pestov
423d2996fa
compiler.cfg.debugger: reset vreg counters
2009-07-27 22:28:13 -05:00
Slava Pestov
c5d7ed58a5
Debugging compiler.cfg.coalescing
2009-07-27 19:24:13 -05:00
Slava Pestov
1a765c38da
compiler.cfg.parallel-copy: fix algorithm
2009-07-27 16:54:47 -05:00
Slava Pestov
9fa71959b5
compiler.cfg.coalescing: fix shuffling bug
2009-07-27 03:58:01 -05:00
Slava Pestov
e112b0d70e
compiler.cfg.phi-elimination: no longer needed
2009-07-27 02:20:53 -05:00
Slava Pestov
ba696b68b8
compiler.cfg.coalescing: more or less complete, now needs debugging
2009-07-27 02:20:45 -05:00
Slava Pestov
a32cbdd231
compiler.cfg.coalescing: more work done
2009-07-27 00:31:21 -05:00
Slava Pestov
a5e5510615
compiler.cfg.coalescing: work in progress
2009-07-26 21:11:26 -05:00
Slava Pestov
e9935b6aad
compiler.cfg.copy-prop: remove ##phi nodes where all inputs are copy-equivalent
2009-07-26 21:11:02 -05:00
Slava Pestov
fc41140720
compiler.cfg.utilities: move value-info utilities to compiler.tree.propagation.info
2009-07-26 21:10:33 -05:00
Slava Pestov
1319d8e549
compiler.cfg.def-use: build def-use chains
2009-07-26 21:10:14 -05:00
Slava Pestov
2137c9cc79
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
053de0af40
compiler.cfg.copy-prop: work in progress
2009-07-24 19:56:21 -05:00
Slava Pestov
2fb0198d48
compiler.cfg.parallel-copy: forgot to add this
2009-07-24 19:46:33 -05:00
Slava Pestov
4624af75f4
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
13c3fdcb5c
compiler.cfg: Fixing test failures
2009-07-24 06:08:07 -05:00
Slava Pestov
7068de6cd3
compiler.cfg.copy-prop: Global copy propagation
2009-07-24 05:30:46 -05:00
Slava Pestov
e0f6d89ff1
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
de73534424
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
7590ad3574
compiler.cfg: introduce less temporaries when building CFG
2009-07-24 03:37:18 -05:00
Slava Pestov
2bea107202
compiler.cfg.builder: fix stack effect declaration
2009-07-23 21:24:15 -05:00
Slava Pestov
d947c61bd7
compiler.cfg.stacks: now performs online local DCN
2009-07-23 20:54:38 -05:00
Slava Pestov
b1afd4c491
compiler.cfg.linear-scan.mapping: simplify
2009-07-23 18:03:04 -05:00
Slava Pestov
747a2d72c8
compiler.cfg.empty-blocks: new pass to delete empty blocks, runs after phi elimination
2009-07-23 18:02:46 -05:00
Slava Pestov
93c58a8bb5
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
610c3b33c7
compiler.cfg.intrinsics: Disable inline allocation for now
2009-07-22 21:11:06 -05:00
Slava Pestov
69ded76c66
Fixing compiler tests
2009-07-22 21:10:50 -05:00
Slava Pestov
45c66b58af
compiler.cfg.dcn.rewrite: remove unused word
2009-07-22 19:18:12 -05:00
Slava Pestov
5559d77d05
compiler.cfg.checker: eliminate dead code before checking MR
2009-07-22 19:17:57 -05:00
Slava Pestov
d29c275089
compiler.cfg.builder: Fix construction of ##return instructions from #return-recursive nodes
2009-07-22 19:17:21 -05:00
Slava Pestov
091d2d07f2
Merge branch 'master' into dcn
2009-07-22 06:19:44 -05:00
Slava Pestov
995a96d7e4
compiler.cfg.dominance: fix unit tests
2009-07-22 06:19:31 -05:00
Slava Pestov
26a5d51d93
compiler.cfg.ssa: now builds pruned SSA form
2009-07-22 06:08:04 -05:00
Slava Pestov
d864214119
compiler.cfg.dominance: add algorithm for computing iterated dominance frontiers
2009-07-22 06:07:51 -05:00
Slava Pestov
89db2e745d
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
31491df5f1
Removed unused code from compiler.cfg.def-use
2009-07-22 06:05:33 -05:00
Slava Pestov
44bcd258f6
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
1e5ce41364
Fix bootstrap
2009-07-22 03:26:27 -05:00
Slava Pestov
25c42d04fd
compiler.cfg: Fix conflicts after merging local optimization refactoring into DCN branch
2009-07-22 03:17:53 -05:00
Slava Pestov
21a012e3d7
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
55111bdc24
Merge branch 'master' into dcn
2009-07-22 02:07:08 -05:00
Slava Pestov
c105b033ef
Merge branch 'master' of git://factorcode.org/git/factor
2009-07-22 02:06:47 -05:00
Slava Pestov
e6a323dfaa
compiler.cfg.dataflow-analysis: iterative dataflow analysis framework
2009-07-22 02:06:35 -05:00
Slava Pestov
b39b0dd393
compiler.cfg.dcn.global: redo using compiler.cfg.dataflow-analysis
2009-07-22 02:05:40 -05:00
Slava Pestov
b869e1250c
compiler.cfg.stack-analysis: Out with the old, in with the new
2009-07-22 00:52:25 -05:00
Slava Pestov
86df665f78
Merge branch 'master' of git://factorcode.org/git/factor into dcn
2009-07-22 00:14:53 -05:00
Slava Pestov
1aa6c9a0d5
compiler.cfg: Fix unit tests
2009-07-21 22:25:19 -05:00
Slava Pestov
e49de006c4
compiler.cfg.dcn: Fixing various bugs, hook up with optimizer
2009-07-21 22:24:50 -05:00
Slava Pestov
cfb584ed8d
Merge branch 'master' into dcn
2009-07-21 17:51:22 -05:00
Slava Pestov
ead57fc5dd
compiler.cfg.registers: minor optimization
2009-07-21 17:49:44 -05:00
Slava Pestov
e7e5bee9a2
compiler.cfg.ssa: Cytron's SSA construction algorithm
2009-07-21 17:49:30 -05:00
Slava Pestov
802b4ffdf5
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
441c2bae2d
Merge branch 'master' into dcn
2009-07-21 03:08:42 -05:00
Slava Pestov
3136549f48
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
fd9a353fd6
Move conjoin-at from compiler.cfg.liveness to sets
2009-07-21 03:02:06 -05:00
Slava Pestov
e16acae2f5
compiler.cfg.dcn: flesh out rewrite pass
2009-07-21 01:24:19 -05:00
Slava Pestov
fdef772d67
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
0a95ddd105
compiler.cfg.dcn: Implement height tracking
2009-07-19 19:45:23 -05:00
Slava Pestov
605b37a949
compiler.cfg.builder: annotate calls with height changes, once again
2009-07-18 23:08:53 -05:00
Slava Pestov
ec1407bdae
compiler.cfg.dcn: starting work on deconcatenatization pass to replace compiler.cfg.stack-analysis
2009-07-18 22:27:42 -05:00
Slava Pestov
9cbd6c52a6
compiler.cfg.stack-analysis: fix outdated tests
2009-07-18 06:38:42 -05:00
Slava Pestov
32e4a97855
compiler.cfg.linear-scan: fix tests
2009-07-18 06:10:01 -05:00
Slava Pestov
343151fd62
compiler.tree.finalization: undo a change that resulted in a compile time regression
2009-07-18 03:33:24 -05:00
Slava Pestov
3ee68d1ff5
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
ea69566ddd
compiler.cfg.linear-scan: algorithmic optimizations
2009-07-18 00:14:39 -05:00
Slava Pestov
5061db2a48
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
b83f27af74
compiler.cfg.builder: remove some dead code
2009-07-17 21:52:33 -05:00
Slava Pestov
43fab5b2ae
Remove some unnecessary work from stack-analysis pass
2009-07-17 18:39:41 -05:00
Slava Pestov
e88e7f70be
Merge branch 'master' of git://factorcode.org/git/factor
2009-07-17 00:03:13 -05:00
Slava Pestov
3fb4fc1bde
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
8ea2996438
Removing two unused words in compiler.cfg.two-operand
2009-07-16 22:59:38 -05:00
Daniel Ehrenberg
3ca5665ad6
Merge branch 'master' of git://factorcode.org/git/factor
2009-07-16 22:42:39 -05:00
Daniel Ehrenberg
8477cf8e91
Phi elimination doesn't have the swap problem now
2009-07-16 22:42:13 -05:00
Slava Pestov
e76dce8aff
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
685e32b091
compiler.cfg.stack-analysis: global optimization work in progress
2009-07-16 16:43:14 -05:00
Slava Pestov
fc0e0f1924
compiler.cfg.block-joining: relax join heuristic
2009-07-16 05:50:44 -05:00
Slava Pestov
884e41dd9c
compiler.cfg.linear-scan.live-intervals: remove bogus assertion
2009-07-16 02:42:01 -05:00
Slava Pestov
9f926ab88c
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
Slava Pestov
ebcd0dc252
compiler.cfg: Fix regressions from recent changes
2009-07-14 20:43:06 -05:00
Slava Pestov
4ac74e9304
compiler.cfg.branch-splitting: don't split if there's one predecessor
2009-07-14 20:42:50 -05:00
Slava Pestov
11731f8d48
compiler.cfg.value-numbering: merge in compiler.cfg.branch-folding
2009-07-14 20:05:01 -05:00