Factor/To do/Compiler
high level optimizer
- don't inline push, unless we have a non-vector, pointless
- remove support for 'f' from intervals
- add identities for integer math
- partial dispatch ops should be flushable, and should have input-classes decls
- speed up binary-reduce
- compile range iteration better
- inlining heuristic: number of usages within this word
- fix predicate propagation
-
[ 1 2 <cursor> ] [ f ] if dup [ A ] [ B ] if
we need better constraints so that A has slots - loop inversion
- perhaps interval inference is unsound for fixnum+fast etc?
- branch fusion
- growable resize computation may overflow with
3
but not 2 1+
if we change =, we can do this,
[ dup 0.0 eq? [ dup 0 eq? [ ] [ ] if ] [ ] if ] should not optimize
[ dup 0.0 eq? [ dup 0 = [ ] [ ] if ] [ ] if ] should
[ dup 0.0 = [ dup 0 eq? [ ] [ ] if ] [ ] if ] should not optimize
[ dup 0.0 = [ dup 0 = [ ] [ ] if ] [ ] if ] should
[ dup 0.0 = [ 3 * ] when ] should
[ dup 0.0 number= [ 3 * ] when ] should
-
[ <=> ] sort [ <=> ] sort [ <=> ] sort
-- still doesn't scale linearly - peg.javascript.parser take long time to load
- remove-mixin-instance takes a long time
- fixnum/i --> fixnum/i-fast if denominator is positive!
-
SPECIAL: foo
-- compile versions of foo for different input classes
low level optimizer
- once low level IR is SSA, we don't have to spill a live interval which has already been spilled once
-
fixnum+
doesn't have an intrinsic anymore
done:
- dispatch branch alignment off
- spilling: align stack on windows (or use unaligned load/store insns?), leave room in stack frame for integer and float spills, resolve pass
- need an optimizer pass to get rid of jumps to returns and jumps to jumps
This revision created on Tue, 4 Nov 2008 07:37:17 by slava