compiler.cfg.gvn: forgot to make certain defs available
parent
7de3ec13e5
commit
2f1fdaad6c
|
@ -36,6 +36,5 @@ M: avail-analysis transfer-set drop defined assoc-union ;
|
||||||
: with-available-uses? ( quot -- ? )
|
: with-available-uses? ( quot -- ? )
|
||||||
keep swap [ available-uses? ] [ drop f ] if ; inline
|
keep swap [ available-uses? ] [ drop f ] if ; inline
|
||||||
|
|
||||||
: make-available ( insn -- insn )
|
: make-available ( vreg -- )
|
||||||
dup dst>>
|
|
||||||
basic-block get avail-ins get [ dupd clone ?set-at ] change-at ;
|
basic-block get avail-ins get [ dupd clone ?set-at ] change-at ;
|
||||||
|
|
|
@ -83,18 +83,21 @@ GENERIC: gcse ( insn -- insn' )
|
||||||
|
|
||||||
M: array gcse [ gcse ] map ;
|
M: array gcse [ gcse ] map ;
|
||||||
|
|
||||||
M: alien-call-insn gcse ;
|
: defs-available ( insn -- insn )
|
||||||
M: ##callback-inputs gcse ;
|
dup defs-vregs [ make-available ] each ;
|
||||||
M: ##copy gcse ;
|
|
||||||
|
M: alien-call-insn gcse defs-available ;
|
||||||
|
M: ##callback-inputs gcse defs-available ;
|
||||||
|
M: ##copy gcse defs-available ;
|
||||||
|
|
||||||
: ?eliminate ( insn vn -- insn' )
|
: ?eliminate ( insn vn -- insn' )
|
||||||
dup available? [
|
dup available? [
|
||||||
[ dst>> ] dip <copy>
|
[ dst>> dup make-available ] dip <copy>
|
||||||
] [ drop make-available ] if ;
|
] [ drop defs-available ] if ;
|
||||||
|
|
||||||
: eliminate-redundancy ( insn -- insn' )
|
: eliminate-redundancy ( insn -- insn' )
|
||||||
dup >expr exprs>vns get at
|
dup >expr exprs>vns get at
|
||||||
[ ?eliminate ] [ make-available ] if* ;
|
[ ?eliminate ] [ defs-available ] if* ;
|
||||||
|
|
||||||
M: ##phi gcse
|
M: ##phi gcse
|
||||||
dup inputs>> values [ vreg>vn ] map sift
|
dup inputs>> values [ vreg>vn ] map sift
|
||||||
|
|
Loading…
Reference in New Issue