compiler.tree.propagation.info: fixed value-info<= so that it handles
slots correctly if a slot is defined for a value-info, then it can't be <= a value-info without that slot defineddb4
parent
86d35982ac
commit
bc0cdff2c6
|
@ -96,7 +96,7 @@ STRUCT: self { s self* } ;
|
||||||
value-info<=
|
value-info<=
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
{ f f f f } [
|
{ f f f f f } [
|
||||||
! Checking intervals
|
! Checking intervals
|
||||||
fixnum <class-info> 20 <literal-info> value-info<=
|
fixnum <class-info> 20 <literal-info> value-info<=
|
||||||
|
|
||||||
|
@ -108,4 +108,15 @@ STRUCT: self { s self* } ;
|
||||||
f c-ptr <class-info> 2array self <tuple-info>
|
f c-ptr <class-info> 2array self <tuple-info>
|
||||||
f byte-array <class-info> 2array self <tuple-info>
|
f byte-array <class-info> 2array self <tuple-info>
|
||||||
value-info<=
|
value-info<=
|
||||||
|
|
||||||
|
! If one value-info has a slot specified and the other doesn't,
|
||||||
|
! then it can't be smaller because that other slot could be
|
||||||
|
! anything!
|
||||||
|
self <class-info>
|
||||||
|
f byte-array <class-info> 2array self <tuple-info> value-info<=
|
||||||
|
] unit-test
|
||||||
|
|
||||||
|
{ t f } [
|
||||||
|
10 <literal-info> f value-info<=
|
||||||
|
f 10 <literal-info> value-info<=
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
USING: accessors arrays assocs byte-arrays classes
|
USING: accessors arrays assocs byte-arrays classes
|
||||||
classes.algebra classes.singleton classes.tuple
|
classes.algebra classes.singleton classes.tuple
|
||||||
classes.tuple.private combinators combinators.short-circuit
|
classes.tuple.private combinators combinators.short-circuit
|
||||||
compiler.tree.propagation.copy kernel layouts math
|
compiler.tree.propagation.copy compiler.utilities kernel layouts math
|
||||||
math.intervals namespaces sequences sequences.private strings
|
math.intervals namespaces sequences sequences.private strings
|
||||||
words ;
|
words ;
|
||||||
IN: compiler.tree.propagation.info
|
IN: compiler.tree.propagation.info
|
||||||
|
@ -265,19 +265,13 @@ DEFER: (value-info-union)
|
||||||
} cond ;
|
} cond ;
|
||||||
|
|
||||||
: value-info<= ( info1 info2 -- ? )
|
: value-info<= ( info1 info2 -- ? )
|
||||||
|
[ [ object-info ] unless* ] bi@
|
||||||
{
|
{
|
||||||
{ [ dup not ] [ 2drop t ] }
|
[ [ class>> ] bi@ class<= ]
|
||||||
{ [ over not ] [ 2drop f ] }
|
[ [ interval>> ] bi@ interval-subset? ]
|
||||||
[
|
[ literals<= ]
|
||||||
{
|
[ [ slots>> ] bi@ f pad-tail-shorter [ value-info<= ] 2all? ]
|
||||||
{ [ 2dup [ class>> ] bi@ class<= not ] [ f ] }
|
} 2&& ;
|
||||||
{ [ 2dup [ interval>> ] bi@ interval-subset? not ] [ f ] }
|
|
||||||
{ [ 2dup literals<= not ] [ f ] }
|
|
||||||
{ [ 2dup [ slots>> ] bi@ [ value-info<= ] 2all? not ] [ f ] }
|
|
||||||
[ t ]
|
|
||||||
} cond 2nip
|
|
||||||
]
|
|
||||||
} cond ;
|
|
||||||
|
|
||||||
SYMBOL: value-infos
|
SYMBOL: value-infos
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,17 @@
|
||||||
USING: assocs compiler.cfg.ssa.destruction.leaders help.markup help.syntax math
|
USING: assocs compiler.cfg.ssa.destruction.leaders help.markup help.syntax
|
||||||
sequences ;
|
kernel math sequences ;
|
||||||
IN: compiler.utilities
|
IN: compiler.utilities
|
||||||
|
|
||||||
HELP: compress-path
|
HELP: compress-path
|
||||||
{ $values { "source" integer } { "assoc" assoc } { "destination" integer } }
|
{ $values { "source" integer } { "assoc" assoc } { "destination" integer } }
|
||||||
{ $description "Gets the original definer for a vreg number. Then inserts a direct path from 'source' to that definer. For example if the assoc is " { $code "{ { 1 2 } { 2 3 } { 3 4 } { 4 4 } }" } "then the original definer of 1 is 4. The word is used by " { $link leader } " to figure out what the top leader of a vreg is." } ;
|
{ $description "Gets the original definer for a vreg number. Then inserts a direct path from 'source' to that definer. For example if the assoc is " { $code "{ { 1 2 } { 2 3 } { 3 4 } { 4 4 } }" } "then the original definer of 1 is 4. The word is used by " { $link leader } " to figure out what the top leader of a vreg is." } ;
|
||||||
|
|
||||||
|
HELP: pad-tail-shorter
|
||||||
|
{ $values
|
||||||
|
{ "seq1" sequence }
|
||||||
|
{ "seq2" sequence }
|
||||||
|
{ "elt" object }
|
||||||
|
{ "seq1'" sequence }
|
||||||
|
{ "seq2'" sequence }
|
||||||
|
}
|
||||||
|
{ $description "Pads the tail of the shorter sequence so that both sequences have the same length." } ;
|
||||||
|
|
|
@ -22,6 +22,9 @@ IN: compiler.utilities
|
||||||
|
|
||||||
: 2map-flat ( seq quot -- seq' ) [ 2each ] flattening ; inline
|
: 2map-flat ( seq quot -- seq' ) [ 2each ] flattening ; inline
|
||||||
|
|
||||||
|
: pad-tail-shorter ( seq1 seq2 elt -- seq1' seq2' )
|
||||||
|
2over longer length swap [ pad-tail ] 2curry bi@ ;
|
||||||
|
|
||||||
SYMBOL: yield-hook
|
SYMBOL: yield-hook
|
||||||
|
|
||||||
yield-hook [ [ ] ] initialize
|
yield-hook [ [ ] ] initialize
|
||||||
|
|
Loading…
Reference in New Issue