compiler.cfg.alias-analysis: ##peek needs to set alias class of output value
parent
dbf18927b9
commit
ceb332f596
|
@ -63,15 +63,14 @@ IN: compiler.cfg.alias-analysis
|
||||||
! Map vregs -> alias classes
|
! Map vregs -> alias classes
|
||||||
SYMBOL: vregs>acs
|
SYMBOL: vregs>acs
|
||||||
|
|
||||||
: check ( obj -- obj )
|
ERROR: vreg-ac-not-set vreg ;
|
||||||
[ "BUG: static type error detected" throw ] unless* ; inline
|
|
||||||
|
|
||||||
: vreg>ac ( vreg -- ac )
|
: vreg>ac ( vreg -- ac )
|
||||||
#! Only vregs produced by ##allot, ##peek and ##slot can
|
#! Only vregs produced by ##allot, ##peek and ##slot can
|
||||||
#! ever be used as valid inputs to ##slot and ##set-slot,
|
#! ever be used as valid inputs to ##slot and ##set-slot,
|
||||||
#! so we assert this fact by not giving alias classes to
|
#! so we assert this fact by not giving alias classes to
|
||||||
#! other vregs.
|
#! other vregs.
|
||||||
vregs>acs get at check ;
|
vregs>acs get ?at [ vreg-ac-not-set ] unless ;
|
||||||
|
|
||||||
! Map alias classes -> sequence of vregs
|
! Map alias classes -> sequence of vregs
|
||||||
SYMBOL: acs>vregs
|
SYMBOL: acs>vregs
|
||||||
|
@ -117,8 +116,10 @@ SYMBOL: histories
|
||||||
#! value.
|
#! value.
|
||||||
over [ live-slots get at at ] [ 2drop f ] if ;
|
over [ live-slots get at at ] [ 2drop f ] if ;
|
||||||
|
|
||||||
|
ERROR: vreg-has-no-slots vreg ;
|
||||||
|
|
||||||
: load-constant-slot ( value slot# vreg -- )
|
: load-constant-slot ( value slot# vreg -- )
|
||||||
live-slots get at check set-at ;
|
live-slots get ?at [ vreg-has-no-slots ] unless set-at ;
|
||||||
|
|
||||||
: load-slot ( value slot#/f vreg -- )
|
: load-slot ( value slot#/f vreg -- )
|
||||||
over [ load-constant-slot ] [ 3drop ] if ;
|
over [ load-constant-slot ] [ 3drop ] if ;
|
||||||
|
@ -214,6 +215,9 @@ GENERIC: analyze-aliases* ( insn -- insn' )
|
||||||
M: ##load-immediate analyze-aliases*
|
M: ##load-immediate analyze-aliases*
|
||||||
dup [ val>> ] [ dst>> ] bi constants get set-at ;
|
dup [ val>> ] [ dst>> ] bi constants get set-at ;
|
||||||
|
|
||||||
|
M: ##peek analyze-aliases*
|
||||||
|
dup dst>> set-heap-ac ;
|
||||||
|
|
||||||
M: ##load-reference analyze-aliases*
|
M: ##load-reference analyze-aliases*
|
||||||
dup dst>> set-heap-ac ;
|
dup dst>> set-heap-ac ;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue