Commit Graph

910 Commits (9c901b9c0e816b2134cc63bc1d09def7a6d5203a)

Author SHA1 Message Date
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