Commit Graph

68 Commits (a6e8277b2c596873e5af8f3ea3be7ac41c151f90)

Author SHA1 Message Date
Joe Groff 025a5b7b15 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 17821626c3 Fix conflicts 2009-09-07 23:51:25 -05:00
Slava Pestov e20e9008ea compiler.cfg.value-numbering: update tests for Joe's condition code changes 2009-09-04 03:11:56 -05:00
Slava Pestov 555543faae compiler: tweak generated code 2009-09-04 03:01:18 -05:00
Slava Pestov 1f5193198b compiler: clean up code generation for alien boxing/unboxing a bit 2009-09-03 21:22:43 -05:00
Slava Pestov 775b9af2f7 compiler: eliminate boilerplate by centralizing info in declarative INSN: syntax 2009-09-02 06:22:37 -05:00
Slava Pestov f6a836d1e9 compiler.cfg.linear-scan now supports partial sync-points where all registers are spilled; taking advantage of this, there are new trigonometric intrinsics which yield a 2x performance boost on benchmark.struct-arrays and a 25% boost on benchmark.partial-sums 2009-08-30 04:52:01 -05:00
Slava Pestov fa64522421 compiler.cfg.value-numbering: fix ##box-displaced-alien simplification 2009-08-28 19:05:49 -05:00
Slava Pestov 99bf9fadfb Performance improvements to make struct-arrays benchmark faster
- improved optimization of ##unbox-any-c-ptr on ##box-displaced-alien; convert it to ##unbox-c-ptr where possible using class info stored in the ##bda instruction
- make fcos, fsin, etc inline again; everything in math.libm inline again, except for fsqrt which is an intrinsic
- convert min and max on floats to float-min and float-max
- make min and max not inline, so that the above can work
- struct-arrays: rice a bit so that more fixnums come up
2009-08-28 05:21:16 -05:00
Slava Pestov 9caf3f9248 compiler: new inline intrinsic for <displaced-alien> where the inputs have known types; value numbering now eliminates unnecessary allocation of displaced aliens if the result is immediately unboxed again 2009-08-27 00:06:19 -05:00
Slava Pestov 88d15dfbea compiler.cfg: new system to track when results of analyses need to be recomputed (reverse post order, linear order, predecessors, dominance, loops). Passes can now call needs-predecessors, needs-dominance, needs-loops at the beginning, and cfg-changed, predecessors-changd at the end. Linearization order now takes loop nesting into account, and linear scan now uses linearization order instead of RPO. 2009-08-08 20:02:56 -05:00
Slava Pestov 2d575d7ec9 compiler.cfg: virtual registers are integers now, and representations are stored off to the side. Fix bug in representation selection that would manifest if a value was used as a float and a fixnum in different branches; cannot globally unbox float in this case 2009-08-08 04:02:18 -05:00
Slava Pestov 4921b819e0 compiler.cfg.representations: new pass to make global unboxing decisions, relies on new compiler.cfg.loop-detection pass for loop nesting information 2009-08-08 00:24:46 -05:00
Slava Pestov 4d2160799f Split off the notion of a register representation from a register class 2009-08-07 17:44:50 -05:00
Slava Pestov 8028eb5776 compiler.cfg: clean up unit tests using some new utilities 2009-08-02 03:49:25 -05:00
Slava Pestov ac7447483d compiler.cfg.ssa.destruction: rename coalesce word to destruct-ssa 2009-07-28 12:56:33 -05:00
Slava Pestov 7a158d84da compiler.cfg: Rename ssa to ssa.construction, coalescing to ssa.destruction 2009-07-28 09:34:08 -05:00
Slava Pestov 905f52d4a9 compiler.cfg: Fix some unit tests 2009-07-28 08:56:14 -05:00
Slava Pestov d8836f8927 compiler.cfg: Fixing test failures 2009-07-24 06:08:07 -05:00
Slava Pestov c49d2cc7bc compiler.cfg.value-numbering: insert ##copy instructions for instructions whose expressions simplify. While subsequent usages are replaced with the instruction computing the simplified vreg locally, global usages may exist of the original instruction. In this case, the ##copy is not dead 2009-07-24 05:30:30 -05:00
Slava Pestov 5d9f7b0ed2 compiler.cfg: Major restructuring -- do not compute liveness before local optimization, and instead change local optimizations to be more permissive of undefined values. Now, liveness is only computed once, after phi elimination and before register allocation. This means liveness analysis does not need to take phi nodes into account and can now use the new compiler.cfg.dataflow-analysis framework 2009-07-22 03:08:28 -05:00
Slava Pestov 2e07fcdd6d compiler.cfg: Fix unit tests 2009-07-21 22:25:19 -05:00
Slava Pestov 704e417087 Merge branch 'master' of git://factorcode.org/git/factor 2009-07-17 00:03:13 -05:00
Slava Pestov 39a70db831 Improve code generation for shift word: add intrinsics for fixnum-shift-fast in the case where the shift count is not constant, transform 1 swap shift into a more overflow check with open-coded fast case, transform bitand into fixnum-bitand in more cases 2009-07-16 23:50:48 -05:00
Daniel Ehrenberg 9ae962ded6 Phi elimination doesn't have the swap problem now 2009-07-16 22:42:13 -05:00
Slava Pestov bff5a44c70 compiler.cfg: Fix regressions from recent changes 2009-07-14 20:43:06 -05:00
Slava Pestov b65ef327ce compiler.cfg.value-numbering: merge in compiler.cfg.branch-folding 2009-07-14 20:05:01 -05:00
Slava Pestov bea69ea325 compiler.cfg.value-numbering: branch folding 2009-07-14 19:17:12 -05:00
Slava Pestov 2e6ae2153c compiler.cfg.value-numbering: more optimizations 2009-07-14 16:05:25 -05:00
Slava Pestov 1e8e24946c compiler.cfg.value-numbering: add some unit tests 2009-07-14 13:25:07 -05:00
Slava Pestov a17293a828 compiler.cfg: update unit tests for compiler.cfg.comparisons 2009-07-14 12:06:55 -05:00
Slava Pestov dff25199cb Merge branch 'master' of git://factorcode.org/git/factor 2009-07-13 22:59:19 -05:00
Doug Coleman 83d8c8606d clean up value numbering conversion of ##add/sub to ##add/sub-imm 2009-07-13 19:02:05 -05:00
Slava Pestov 1eae4286cd compiler.cfg: split off condition codes into a comparisons sub-vocabulary 2009-07-13 14:42:52 -05:00
Slava Pestov eda950a3bf compiler.cfg.value-numbering: fix ##compare and ##compare-branch rewrites 2009-07-13 12:33:58 -05:00
Slava Pestov fe32e13fb0 compiler.cfg.value-numbering: factor out value renaming into a separate compiler.cfg.renaming vocabulary 2009-07-09 23:14:26 -05:00
Slava Pestov 3d7addbbf5 compiler.cfg.value-numbering.rewrite: disable ##compare optimizations for now 2009-07-04 03:26:37 -05:00
Slava Pestov 577a3cb968 compiler.cfg.value-numbering.rewrite: fix ##compare-imm rewrite rule 2009-07-04 02:50:50 -05:00
Doug Coleman 2ef03895ee convert ##compare with immediates to ##compare-imm 2009-07-03 19:19:33 -05:00
Doug Coleman 9ce34bf972 add constant folding for integer ops, refactor some rewrites 2009-07-02 19:03:21 -05:00
Doug Coleman f4d3daea7d fix bug in rewriting #add -- wasn't checking small-enough?, and change negative adds to subtractions/negative subtractions to adds 2009-07-02 17:55:35 -05:00
Doug Coleman 89f33a1e45 rewrite rules for add/sub/mul/and/or/xor-imm, rewrite load-immediate/add to be add-imm 2009-07-02 11:35:31 -05:00
Doug Coleman fe3ab1a0ac simplify sub and sub-imm 2009-07-02 11:33:15 -05:00
Doug Coleman c3f190daff add a utility word vreg>constant 2009-07-02 11:32:23 -05:00
Doug Coleman 0ad81de3b6 combine add-imm instructions into a single add 2009-06-30 22:59:53 -05:00
Slava Pestov 0654e8fc51 Remove obsolete optimization 2009-06-01 03:05:49 -05:00
Slava Pestov a07279bf6d Fix compiler errors 2009-06-01 03:00:10 -05:00
Slava Pestov 57d9d9f961 Split off local-optimization combinator into compiler.cfg.local, factor out CFG -> MR into compiler.cfg.mr, split off GC check insertion into a new compiler.cfg.gc-checks pass 2009-05-31 12:20:46 -05:00
Slava Pestov 968a9bb666 Various codegen improvements:
- new-insn word to construct instructions
- cache RPO in the CFG
- re-organize low-level optimizer so that MR is built after register allocation
- register allocation now stores instruction numbers in the instructions themselves
- split defs-vregs into defs-vregs and temp-vregs
2009-05-29 13:11:34 -05:00
Slava Pestov 40949800bf Fixing various bugs; alias analysis wasn't handling ##phi nodes, stack analysis incorrectly handled height-changing back edges and ##fixnum-*, clean up ##dispatch generation 2009-05-29 01:39:14 -05:00