Slava Pestov
ca2f01e0d0
Updating non-core libraries for monotonic? change
2009-01-16 17:02:54 -06:00
Slava Pestov
34792a9f23
Remove >r/r>
2008-12-17 19:17:37 -06:00
Slava Pestov
c5160d76e9
Merge qualified, alias, symbols, constants into core
2008-12-17 18:10:01 -06:00
Slava Pestov
0021cde743
Fix more compile errors
2008-12-15 22:21:56 -06:00
Slava Pestov
daf2857d7b
define-inline now takes an effect parameter
...
C: now sets the stack effect of the new word to slot names
add new basis/constants vocab; CONSTANT: foo bar is equivalent to : foo bar ; inline
(going to fold CONSTANT:, ALIAS: and qualified into core soon perhaps)
tighten the screws: inline words now need a stack declaration too
update some usages of inline words
2008-12-15 19:44:56 -06:00
Slava Pestov
eb79c6ab71
Fix conflict
2008-12-09 17:52:45 -06:00
Slava Pestov
4f0a9f311e
Untangling some dependencies
2008-12-08 14:58:00 -06:00
Slava Pestov
8a8f0c925c
Use BSR instruction to implement fixnum-log2 intrinsic
2008-12-06 15:31:17 -06:00
Slava Pestov
145b635eb6
More optimization intended to reduce compile time. Another 10% speedup on compiling empty PEG parser
...
- new map-flat combinator replaces usages of 'map flatten' in compiler
- compiler.tree.def-use.simplified uses an explicit accumulator instead of flatten
- compiler.tree.tuple-unboxing uses an explicit accumulator instead of flatten
- fix inlining regression from last time: custom inlining results would sometimes be discarded
- compiler.tree's 3each and 3map combinators rewritten to not use flip
- rewrite math.partial-dispatch without locals (purely stylistic, no performance increase)
- hand-optimize flip for common arrays-of-arrays case
- don't run escape analysis and tuple unboxing if there are no allocations in the IR
2008-12-06 11:17:19 -06:00
Slava Pestov
a56d480aa6
Various optimizations leading to a 10% speedup on compiling empty EBNF parser:
...
- open-code getenv primitive
- inline tuple predicates in finalization
- faster partial dispatch
- faster built-in type predicates
- faster tuple predicates
- faster lo-tag dispatch
- compile V{ } clone and H{ } clone more efficiently
- add fixnum fast-path to =; avoid indirect branch if two fixnums not eq
- faster >alist on hashtables
2008-12-06 09:16:29 -06:00
Slava Pestov
908644ee7a
O(1) <sbuf> and new-sequence on byte-arrays (work in progress)
2008-12-05 07:28:52 -06:00
Slava Pestov
e256846acd
Tweak string representation; high bit indicates if character has high bits in aux vector. Avoids memory access in common case. Split set-string-nth into two primitives; set-string-nth-fast is open-coded by optimizing compiler. 13% improvement on reverse-complement
2008-12-05 06:38:51 -06:00
Slava Pestov
e7f4563374
fixnum* intrinsic for x86
2008-11-30 07:26:49 -06:00
Slava Pestov
1c0789e616
Didn't generate ##branch after ##alien-invoke and ##alien-indirect
2008-11-29 03:46:57 -06:00
Slava Pestov
67471dedac
Forgot to emit a ##branch after ##fixnum-{add,sub,mul} ops; tools.annotations test faild
2008-11-29 00:36:43 -06:00
Slava Pestov
68dd6cc35a
Working on PowerPC overflow checks
2008-11-28 20:02:50 -06:00
Slava Pestov
eb8c621b6f
Faster generic arithmetic on fiixnums: both-fixnums? sub-primitive performs a check if the top two stack items are both fixnums with a single conditional branch
2008-11-28 08:35:02 -06:00
Slava Pestov
f44506089d
More work on overflow instructions: don't need temp register anymore, add -tail variants which don't need stack frame
2008-11-28 06:36:30 -06:00
Slava Pestov
5634becda1
##fixnum-add, ##fixnum-sub instructions open-code overflow check
2008-11-28 05:33:58 -06:00
Slava Pestov
ab689c098b
Clean up direct literal code and make a first attempt at PowerPC support
2008-11-24 08:16:14 -06:00
Slava Pestov
eb05dd3a12
Optimize a ##dispatch that is applied to the result of a ##sub-imm or ##add-imm; this eliminates an instruction from the common 1 fixnum-fast { ... } dispatch and 8 fixnum-fast { ... } dispatch code sequences appearing in generic word expansions
2008-11-13 04:16:08 -06:00
Slava Pestov
b1aa3697cb
Emit branches in the same order they're written in code
2008-11-13 03:52:01 -06:00
Slava Pestov
26f309d2ae
Trying to make PEGs compile faster by reducing the number of low level IR nodes: merge functionality of #>r and #r> into #shuffle, and generate 1 node instead of 3 for calls to get-local
2008-11-11 18:46:31 -06:00
sheeple
5b7d40d9b4
We need to end the basic block after the ##prologue in the dispatch branch so that the GC check can go after the prologue
2008-11-10 02:58:05 -06:00
sheeple
d1f248dac6
Fixing PowerPC backend: prolog register clobberage, spilling, and general stack frame usage. Add some lame tests for spilling
2008-11-06 19:00:56 -06:00
Slava Pestov
4e55cd973b
If a #dispatch branch is a call to another word which is not an intrinsic, we avoid generating the dispatch branch and just jump to the word directly
2008-11-06 11:48:55 -06:00
Slava Pestov
64cbf619a9
Add more algebraic simplifications: comparison of a comparison, comparison where first is immediate
2008-11-06 09:27:52 -06:00
Slava Pestov
1c1333fbe9
Compile not and >boolean as branchless intrinsics by having the CFG builder detect certain code patterns
2008-11-06 09:09:21 -06:00
sheeple
d2ec46e38f
PowerPC backend almost functional; some new compiler unit tests added,
...
better compilation of 'f eq?'; f becomes an immediate operand
move aux-offset to compiler.constants
2008-11-06 06:27:27 -06:00
Slava Pestov
53cd75b06c
Add string-nth intrinsic
2008-11-06 01:11:28 -06:00
Slava Pestov
cc879fa9b7
Tuple layouts are now arrays, instead of built-in types. The superclass
...
array is now part of the tuple layout object itself, and class hashcodes
are stored alongside class words there. This removes 2 indirections when
reading a superclass, and 3 when reading a superclass hashcode.
2008-11-05 22:20:29 -06:00
Slava Pestov
c8521ad826
Add tool to dump live intervals
2008-11-04 17:23:20 -06:00
Slava Pestov
1af3b8ed65
If a register is spilled and the reload location is also a copy, we chicken out and don't coalesce. This is suboptimal but it's not clear to me how to implement it cleanly, and SSA graph coloring will solve this problem eventually anyway
2008-11-04 00:32:56 -06:00
Slava Pestov
efcb916e35
Handle a jump to a jump by cloning the block, in the same way we optimize jumps to returns
2008-11-03 21:02:34 -06:00
Slava Pestov
82e9eedd39
Forgot about float= intrinsic
2008-11-03 07:15:09 -06:00
Slava Pestov
59f4f25b91
Loop alignment: appears to be a small win for reverse-complement
2008-11-03 06:20:51 -06:00
Slava Pestov
0250d7c1d2
Forgot a drop in unit test
2008-11-03 01:53:27 -06:00
Slava Pestov
08b277e892
Fix alias anlaysis bug: result of ##box-alien and ##box-float did not get an AC, so calling hi-tag would not compile
2008-11-03 01:52:55 -06:00
Slava Pestov
f253e74942
Inline subprimitives in optimizing compiler
2008-11-03 01:18:54 -06:00
Slava Pestov
445e353337
Optimize away useless jumps
2008-11-02 23:09:31 -06:00
Slava Pestov
d11a779fdd
RicE
2008-11-02 03:58:32 -06:00
Slava Pestov
3834eaeb05
Don't generate GC checks if the allocation instruction is optimized out
2008-11-02 01:50:48 -06:00
Slava Pestov
8df1aba71d
Coalescing
2008-11-02 01:49:57 -06:00
Slava Pestov
804c6f93ea
Fix x86.32
2008-10-31 21:07:41 -05:00
Slava Pestov
db4db19cd9
Start working on coalescing
2008-10-28 02:38:37 -07:00
Slava Pestov
492a15e345
Move insn class to compiler.cfg.instructions
2008-10-24 09:17:06 -05:00
Slava Pestov
885adc8dc9
Various improvements
2008-10-23 05:27:54 -05:00
Slava Pestov
52967c5bf1
Improved value numbering
2008-10-23 02:49:26 -05:00
Slava Pestov
d723b69990
Value numbering
2008-10-22 21:59:07 -05:00
Slava Pestov
084e64d0bc
Tweak inheritance
2008-10-22 21:58:46 -05:00