Commit Graph

874 Commits (334e93bbbfbbbe143cc28cb712381ce929f74333)

Author SHA1 Message Date
Slava Pestov 4b87ee4ebd compiler.tree.recursive: add some more more loop detection tests 2009-08-04 16:23:14 -05:00
Slava Pestov 7c3d65af21 Merge branch 'master' of git://factorcode.org/git/factor 2009-08-03 10:31:27 -05:00
Slava Pestov 41a444a3d4 compiler.cfg.critical-edges: no longer neededed 2009-08-03 10:31:00 -05:00
Slava Pestov cffd809ca0 compiler.cfg.stacks: more accurate deconcatenatization inserts fewer partially redundant ##peeks. 11% improvement on benchmark.beust2, 2% reduction in ##peek and ##replace instructions inserted 2009-08-03 07:08:28 -05:00
Slava Pestov e683004434 compiler.cfg.stacks.uninitialized: use bitand instead of min 2009-08-03 06:03:38 -05:00
Joe Groff 09b2acbd10 Merge branch 'master' of git://factorcode.org/git/factor 2009-08-02 23:16:52 -05:00
Joe Groff b4befe3f69 [ [ ... ] compare ] sort => [ ... ] sort-with 2009-08-02 20:09:23 -05:00
Slava Pestov 5b6e0ce534 compiler.cfg.def-use: remove compute-def-use word, passes have to call compute-defs or compute-uses now; compiler.cfg.ssa.liveness: don't compute dominance and def-use first since destruction does already 2009-08-02 19:12:32 -05:00
Slava Pestov a61037d8f7 Merge branch 'master' of git://factorcode.org/git/factor 2009-08-02 18:46:27 -05:00
Slava Pestov c29ee06adb Revert "SSA destruction uses new SSA liveness checking"
This reverts commit 98c7de8410.
2009-08-02 18:41:31 -05:00
Slava Pestov b3786fb6eb Revert "compiler.cfg.liveness.ssa: remove"
This reverts commit 6144fee101.
2009-08-02 18:41:16 -05:00
Daniel Ehrenberg d643a0de21 Merge branch 'master' of git://factorcode.org/git/factor 2009-08-02 18:25:37 -04:00
Daniel Ehrenberg 4e65589361 Merge branch 'master' of git://factorcode.org/git/factor
Conflicts:

	basis/compiler/cfg/ssa/liveness/liveness-tests.factor
2009-08-02 18:23:49 -04:00
Slava Pestov 6144fee101 compiler.cfg.liveness.ssa: remove 2009-08-02 17:19:01 -05:00
Daniel Ehrenberg 318018f999 Removing phi-outs set in SSA liveness checking 2009-08-02 18:15:18 -04:00
Slava Pestov 8a631dfbd9 Merge branch 'master' of git://factorcode.org/git/factor 2009-08-02 17:07:06 -05:00
Slava Pestov 3104129127 compiler.cfg.ssa.liveness: fix unit tests 2009-08-02 17:06:35 -05:00
Daniel Ehrenberg 82ba9a2e0c minor SSA liveness code reorganization 2009-08-02 18:05:51 -04:00
Daniel Ehrenberg 98c7de8410 SSA destruction uses new SSA liveness checking 2009-08-02 18:04:45 -04:00
Daniel Ehrenberg 5c6f0413eb def-use puts phi uses in respective predecessors 2009-08-02 18:04:07 -04:00
Slava Pestov 85b6b4c052 compiler.cfg.ssa.destruction: add optimization from old destruction pass: don't run on CFGs that have no phi instructions 2009-08-02 10:57:27 -05:00
Slava Pestov 929f195076 compiler.cfg.ssa.interference: cleanup 2009-08-02 10:35:02 -05:00
Slava Pestov 00254d1bde compiler.cfg.ssa.destruction: new implementation: simpler and more correct 2009-08-02 10:26:52 -05:00
Slava Pestov 7665784911 Compiler speedups 2009-08-02 09:16:21 -05:00
Slava Pestov d17d00595e compiler.cfg.ssa.destruction.copies: factor out add-instructions combinator into compiler.cfg.utilities 2009-08-02 08:20:50 -05:00
Slava Pestov ea7ba75a7f Move compiler.cfg.ssa.destruction.interference to compiler.cfg.ssa.interference 2009-08-02 08:15:36 -05:00
Slava Pestov b90e2c92f0 compiler.cfg.ssa.destruction.interference: fix a bug and add unit tests 2009-08-02 08:11:30 -05:00
Slava Pestov 1d289e68a4 compiler.cfg.debugger: fix load error 2009-08-02 08:11:04 -05:00
Slava Pestov d84216ce6c compiler.cfg.ssa.destruction: add some unit tests 2009-08-02 06:17:44 -05:00
Slava Pestov ebe70b3bb1 compiler.cfg.critical-edges: update ##phi nodes 2009-08-02 06:17:22 -05:00
Slava Pestov 64b719269f compiler.cfg.utilities: add each-phi combinator to iterate over all ##phi instructions in a basic block 2009-08-02 06:16:58 -05:00
Slava Pestov 3a9e164275 compiler tests: add test case for coalescing bug 2009-08-02 03:49:54 -05:00
Slava Pestov 8028eb5776 compiler.cfg: clean up unit tests using some new utilities 2009-08-02 03:49:25 -05:00
Slava Pestov c89cb4e3ca compiler.cfg.two-operand: if last instruction in a basic block is an overflowing arithmetic op of the form x = y op x, we now convert it correctly. This fixes compiler regression with benchmark.dawes after recent coalescing changes 2009-08-01 23:50:47 -05:00
Slava Pestov 49ac00097e compiler.tree.propagation.call-effect: fix case where quotation inlining could enter an infinite loop: [ dup call( quot -- ) ] dup call( quot -- ) etc 2009-08-01 23:34:14 -05:00
Slava Pestov 87a5ea36d1 compiler.cfg.copy-prop: eliminate phi nodes that have the same inputs as a previous phi node in the basic block 2009-08-01 22:33:27 -05:00
Slava Pestov eeea7f019d Merge branch 'master' of git://factorcode.org/git/factor 2009-08-01 20:22:51 -05:00
Slava Pestov bb1c904261 compiler.cfg.ssa.destruction: fix bug in trivial-interference heuristic, and type error in code path that didn't run before 2009-08-01 20:22:31 -05:00
Daniel Ehrenberg 56f6f4d0ce Merge branch 'master' of git://factorcode.org/git/factor 2009-08-01 20:33:41 -04:00
Slava Pestov 7ee7346505 compiler.cfg.liveness.ssa: fix bad bug discovered by littledan 2009-08-01 18:54:24 -05:00
Slava Pestov 86f8445eb6 compiler.cfg.stacks: kill set now includes all locations eliminated as a result of stack height decrease; reduces number of ##replace instructions generated by 2% 2009-08-01 06:12:43 -05:00
Slava Pestov 14d8cc4e5e compiler: Oops, typos in unit tests 2009-07-31 22:33:02 -05:00
Slava Pestov a5c4877bf6 compiler.cfg.ssa.destruction: fix bug in renaming triggered by sequence-parser:take-sequence 2009-07-31 18:34:15 -05:00
Slava Pestov db55a031df Move a bunch of GC check generation logic to platform-independent side 2009-07-30 21:28:27 -05:00
Daniel Ehrenberg 76a5972a69 Faster SSA liveness testing 2009-07-30 15:23:47 -04:00
Slava Pestov 99216b8435 compiler.cfg: Get inline GC checks working again, using a dataflow analysis to compute uninitialized stack locations in compiler.cfg.stacks.uninitialized. Re-enable intrinsics which use inline allocation 2009-07-30 09:19:44 -05:00
Slava Pestov 8677d56466 compiler.cfg.linear-scan: fix case where a register can be made available for only a part of a live interval's lifetime, but there are no more usages after the split location. This case never came up until global stack analysis, at which point it started to be exercised on x86-32 2009-07-30 02:13:30 -05:00
Slava Pestov 8ae9c4477a compiler.cfg.ssa.destruction: fix 2009-07-29 23:43:00 -05:00
Slava Pestov 0d42e0fc1e compiler.cfg.ssa.destruction: tweak in preparation for landing Dan's new SSA liveness analysis 2009-07-29 23:35:51 -05:00
Slava Pestov c815c8c5b5 compiler.cfg.linear-scan: more test fixes 2009-07-29 07:04:52 -05:00
Slava Pestov 5ecd0d91a3 compiler.cfg: remove 'regs' slot from instruction tuples now that register allocation doesn't use it anymore 2009-07-29 06:50:46 -05:00
Slava Pestov bd70967f8a compiler.cfg.linear-scan.resolve: fix unit tests to not depend on hashing 2009-07-29 06:48:01 -05:00
Slava Pestov f260500bcd compiler: fix test 2009-07-29 06:39:54 -05:00
Slava Pestov 68d06c4b06 compiler.cfg.linear-scan.assignment: modifies instructions in place instead of storing a registers assoc for further compile-time performance improvement 2009-07-29 06:36:14 -05:00
Slava Pestov 02b1cc0c40 compiler.cfg.linear-scan.assignment: more efficient data structures 2009-07-29 06:12:33 -05:00
Slava Pestov 6e56e08012 compiler.cfg.linearization: fix bootstrap 2009-07-28 22:52:07 -05:00
Slava Pestov 89039e9977 Merge branch 'master' of git://factorcode.org/git/factor 2009-07-28 21:31:25 -05:00
Slava Pestov c634f5a9a0 compiler.cfg.linearization: rotate loops. 2x speedup with empty times loop, 1.5x speedup on benchmark.dawes 2009-07-28 21:31:08 -05:00
Slava Pestov ac7447483d compiler.cfg.ssa.destruction: rename coalesce word to destruct-ssa 2009-07-28 12:56:33 -05:00
Slava Pestov bbd4e4af3e compiler.cfg: Minor optimization. Instructions can now only ever produce a single value; this eliminates 1array constructions and some iterations 2009-07-28 12:29:07 -05:00
Slava Pestov a2ae560a8a compiler.cfg.ssa.construction: use the optimization from the pruned-SSA paper to minimize stack pushing and popping 2009-07-28 11:52:42 -05:00
Slava Pestov 2a87faf681 IN: fix for compiler test 2009-07-28 11:16:21 -05:00
Slava Pestov 31caa7af2f compiler.cfg.ssa.construction: Use TDMSC algorithm to compute Phi placement 2009-07-28 11:16:10 -05:00
Slava Pestov 7a158d84da compiler.cfg: Rename ssa to ssa.construction, coalescing to ssa.destruction 2009-07-28 09:34:08 -05:00
Slava Pestov 905f52d4a9 compiler.cfg: Fix some unit tests 2009-07-28 08:56:14 -05:00
Slava Pestov 8f08ce94fa compiler.cfg.branch-splitting: re-enable with a better heuristic 2009-07-28 08:48:05 -05:00
Slava Pestov 91d2b3e805 compiler.cfg.utilities: add loop-entry? word 2009-07-28 08:47:50 -05:00
Slava Pestov 6d4a54201b compiler.cfg.linear-scan: fix resolve pass 2009-07-28 08:47:35 -05:00
Slava Pestov f61dff0d5e compiler.cfg.coalescing: cleanups 2009-07-28 08:47:03 -05:00
Slava Pestov 5d3a795e7d Revert "compiler.cfg.coalescing: some cleanups"
This reverts commit e5834c4ba7.
2009-07-28 07:51:44 -05:00
Slava Pestov c44b13c29e compiler.cfg.linear-scan.resolve: unit tests 2009-07-28 07:41:41 -05:00
Slava Pestov 3fc36e3750 compiler.cfg.utilities: fix stack effect declaration 2009-07-28 07:40:09 -05:00
Slava Pestov f19ee61d3a compiler.cfg.linear-scan: use compiler.cfg.parallel-copy in resolve pass 2009-07-28 07:39:46 -05:00
Slava Pestov e5834c4ba7 compiler.cfg.coalescing: some cleanups 2009-07-28 07:37:50 -05:00
Slava Pestov e6bdd27c2e compiler.cfg.utilities: fix load error 2009-07-28 06:51:03 -05:00
Slava Pestov 496d59d86c compiler.cfg.coalescing: Only run if CFG has ##phi nodes, fix interference for case where value is not used in a block and is not live-in, forgot to run liveness analysis first 2009-07-28 06:48:20 -05:00
Slava Pestov 8ac396d9e0 Add some compiler tests 2009-07-28 06:45:31 -05:00
Slava Pestov 2fe741568c compiler.cfg.liveness: fix liveness computation in case where instruction uses a register it defines 2009-07-28 06:45:02 -05:00
Slava Pestov 3550880850 compiler.cfg.critical-edges: reset RPO 2009-07-28 01:04:13 -05:00
Slava Pestov 164e5c4eb5 Add some tests that directly generate low level IR 2009-07-27 22:29:33 -05:00
Slava Pestov 536dc1c014 compiler.cfg.coalescing: precompute live intervals, add support for instructions where output cannot equal an input, split critical edges 2009-07-27 22:29:17 -05:00
Slava Pestov cf23ee7996 compiler.cfg.two-operand: make it work in more cases 2009-07-27 22:28:29 -05:00
Slava Pestov 064248d25b compiler.cfg.debugger: reset vreg counters 2009-07-27 22:28:13 -05:00
Slava Pestov 85975568d9 Debugging compiler.cfg.coalescing 2009-07-27 19:24:13 -05:00
Slava Pestov 3490456e07 compiler.cfg.parallel-copy: fix algorithm 2009-07-27 16:54:47 -05:00
Slava Pestov cef47c452a compiler.codegen: collect instruction statistics 2009-07-27 03:58:15 -05:00
Slava Pestov 7dec8d289e compiler.cfg.coalescing: fix shuffling bug 2009-07-27 03:58:01 -05:00
Slava Pestov e6d05dc722 compiler.cfg.phi-elimination: no longer needed 2009-07-27 02:20:53 -05:00
Slava Pestov 83d40198a4 compiler.cfg.coalescing: more or less complete, now needs debugging 2009-07-27 02:20:45 -05:00
Slava Pestov d7f12feb64 compiler.cfg.coalescing: more work done 2009-07-27 00:31:21 -05:00
Slava Pestov 420e28b8bd compiler.tree.propagation.info: fix load error 2009-07-27 00:30:24 -05:00
Slava Pestov 76de5a9376 compiler.cfg.coalescing: work in progress 2009-07-26 21:11:26 -05:00
Slava Pestov 0a3a08e506 compiler.cfg.copy-prop: remove ##phi nodes where all inputs are copy-equivalent 2009-07-26 21:11:02 -05:00
Slava Pestov 99601d34fa compiler.cfg.utilities: move value-info utilities to compiler.tree.propagation.info 2009-07-26 21:10:33 -05:00
Slava Pestov 5e39e8c11f compiler.cfg.def-use: build def-use chains 2009-07-26 21:10:14 -05:00
Slava Pestov 6f37596113 compiler.cfg.dominance: add pre order and max pre order numbers; use them to implement dominates? check 2009-07-26 21:10:05 -05:00
Slava Pestov 3293a72580 compiler.cfg.copy-prop: work in progress 2009-07-24 19:56:21 -05:00
Slava Pestov ce7236437f compiler.cfg.parallel-copy: forgot to add this 2009-07-24 19:46:33 -05:00
Slava Pestov 228fcea905 compiler.cfg.phi-elimination: move some utilities from compiler.cfg.utilities here since that's the only place they get used 2009-07-24 16:45:31 -05:00
Slava Pestov d8836f8927 compiler.cfg: Fixing test failures 2009-07-24 06:08:07 -05:00
Slava Pestov 127de28195 compiler.cfg.copy-prop: Global copy propagation 2009-07-24 05:30:46 -05:00
Slava Pestov c49d2cc7bc compiler.cfg.value-numbering: insert ##copy instructions for instructions whose expressions simplify. While subsequent usages are replaced with the instruction computing the simplified vreg locally, global usages may exist of the original instruction. In this case, the ##copy is not dead 2009-07-24 05:30:30 -05:00
Slava Pestov fcd015970e compiler.cfg.write-barrier: simplify a little bit. It doesn't need to do copy propagation, since its a separate pass now 2009-07-24 05:29:28 -05:00
Slava Pestov f1eddf34c9 compiler.cfg: introduce less temporaries when building CFG 2009-07-24 03:37:18 -05:00
Slava Pestov 229d1c9f47 compiler.cfg.builder: fix stack effect declaration 2009-07-23 21:24:15 -05:00
Slava Pestov c2c3d64d6d compiler.cfg.stacks: now performs online local DCN 2009-07-23 20:54:38 -05:00
Slava Pestov 377233bd90 Add testcase for recent bug 2009-07-23 18:03:14 -05:00
Slava Pestov 2726ebe4a9 compiler.cfg.linear-scan.mapping: simplify 2009-07-23 18:03:04 -05:00
Slava Pestov 2ec433e7c0 compiler.cfg.empty-blocks: new pass to delete empty blocks, runs after phi elimination 2009-07-23 18:02:46 -05:00
Slava Pestov 67c53c85b1 compiler.cfg.branch-splitting: now that we do SSA construction we can split branches with fixnum overflow ops (which have a live-out) 2009-07-23 18:02:29 -05:00
Slava Pestov 9d2a2ecabf compiler.cfg.intrinsics: Disable inline allocation for now 2009-07-22 21:11:06 -05:00
Slava Pestov 1651deaaa7 Fixing compiler tests 2009-07-22 21:10:50 -05:00
Slava Pestov 0632c9665c compiler.cfg.dcn.rewrite: remove unused word 2009-07-22 19:18:12 -05:00
Slava Pestov daf446f842 compiler.cfg.checker: eliminate dead code before checking MR 2009-07-22 19:17:57 -05:00
Slava Pestov dcf7ce82a9 compiler.cfg.builder: Fix construction of ##return instructions from #return-recursive nodes 2009-07-22 19:17:21 -05:00
Slava Pestov 50b4179647 Merge branch 'master' into dcn 2009-07-22 06:19:44 -05:00
Slava Pestov 093a685d68 compiler.cfg.dominance: fix unit tests 2009-07-22 06:19:31 -05:00
Slava Pestov 79d32afe4b compiler.cfg.ssa: now builds pruned SSA form 2009-07-22 06:08:04 -05:00
Slava Pestov 898ac710fa compiler.cfg.dominance: add algorithm for computing iterated dominance frontiers 2009-07-22 06:07:51 -05:00
Slava Pestov c355c21de6 Move liveness back to compiler.cfg.liveness, fix a corner-case where it didn't work on some forms of non-SSA code 2009-07-22 06:07:28 -05:00
Slava Pestov a857ff3797 Removed unused code from compiler.cfg.def-use 2009-07-22 06:05:33 -05:00
Slava Pestov 7c488f2b25 Insert _loop-entry in linearization pass instead of in CFG builder, so that optimizations don't have to worry about it 2009-07-22 06:05:17 -05:00
Slava Pestov 0b78d8fd3d Fix bootstrap 2009-07-22 03:26:27 -05:00
Slava Pestov b6bb12eea7 compiler.cfg: Fix conflicts after merging local optimization refactoring into DCN branch 2009-07-22 03:17:53 -05:00
Slava Pestov 5d9f7b0ed2 compiler.cfg: Major restructuring -- do not compute liveness before local optimization, and instead change local optimizations to be more permissive of undefined values. Now, liveness is only computed once, after phi elimination and before register allocation. This means liveness analysis does not need to take phi nodes into account and can now use the new compiler.cfg.dataflow-analysis framework 2009-07-22 03:08:28 -05:00
Slava Pestov 670d694ab9 Merge branch 'master' into dcn 2009-07-22 02:07:08 -05:00
Slava Pestov 538a82b3bd Merge branch 'master' of git://factorcode.org/git/factor 2009-07-22 02:06:47 -05:00
Slava Pestov 89a048c0ac compiler.cfg.dataflow-analysis: iterative dataflow analysis framework 2009-07-22 02:06:35 -05:00
Slava Pestov 8f1e1dbf6a compiler.cfg.dcn.global: redo using compiler.cfg.dataflow-analysis 2009-07-22 02:05:40 -05:00
Slava Pestov 1240b630e0 compiler.cfg.stack-analysis: Out with the old, in with the new 2009-07-22 00:52:25 -05:00
Slava Pestov 7198a7dc37 Merge branch 'master' of git://factorcode.org/git/factor into dcn 2009-07-22 00:14:53 -05:00
Slava Pestov 2e07fcdd6d compiler.cfg: Fix unit tests 2009-07-21 22:25:19 -05:00
Slava Pestov 4b51ef1391 compiler.cfg.dcn: Fixing various bugs, hook up with optimizer 2009-07-21 22:24:50 -05:00
Slava Pestov b4bd85181f Merge branch 'master' into dcn 2009-07-21 17:51:22 -05:00
Slava Pestov f09b2bff39 compiler.cfg.registers: minor optimization 2009-07-21 17:49:44 -05:00
Slava Pestov 9b3c593332 compiler.cfg.ssa: Cytron's SSA construction algorithm 2009-07-21 17:49:30 -05:00
Slava Pestov 6b779b45df compiler.cfg.dcn: remove stores to stack locations above top of stack (these are never read again) 2009-07-21 17:46:09 -05:00
Slava Pestov b3a2880f02 Merge branch 'master' into dcn 2009-07-21 03:08:42 -05:00
Slava Pestov 907e752319 compiler.cfg.dominance: fix idom computation, compute dominator tree, compute dominance frontiers, add some tests 2009-07-21 03:02:45 -05:00
Slava Pestov b801022472 Move conjoin-at from compiler.cfg.liveness to sets 2009-07-21 03:02:06 -05:00
Slava Pestov a05ff8530a compiler.cfg.dcn: flesh out rewrite pass 2009-07-21 01:24:19 -05:00
Slava Pestov 7139f55271 compiler.cfg: if a block has an instruction that kills values it must be the only instruction in the block 2009-07-19 20:12:04 -05:00
Slava Pestov 7a570eae0e compiler.cfg.dcn: Implement height tracking 2009-07-19 19:45:23 -05:00
Slava Pestov 0a4fd0d400 compiler.cfg.builder: annotate calls with height changes, once again 2009-07-18 23:08:53 -05:00
Slava Pestov a4317c1fd1 compiler.cfg.dcn: starting work on deconcatenatization pass to replace compiler.cfg.stack-analysis 2009-07-18 22:27:42 -05:00
Slava Pestov 64f7a290f5 compiler.cfg.stack-analysis: fix outdated tests 2009-07-18 06:38:42 -05:00
Slava Pestov 749522c29c compiler.cfg.linear-scan: fix tests 2009-07-18 06:10:01 -05:00
Slava Pestov df874c3b50 compiler.tree.finalization: undo a change that resulted in a compile time regression 2009-07-18 03:33:24 -05:00
Slava Pestov dfc0dcfae2 Disable fixnum>bignum and bignum>fixnum intrinsics since they're not very useful and they increase code size significantly 2009-07-18 01:07:43 -05:00
Slava Pestov 9d831baa9c compiler.cfg.linear-scan: algorithmic optimizations 2009-07-18 00:14:39 -05:00