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 -- ? )
|
||||
keep swap [ available-uses? ] [ drop f ] if ; inline
|
||||
|
||||
: make-available ( insn -- insn )
|
||||
dup dst>>
|
||||
: make-available ( vreg -- )
|
||||
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: alien-call-insn gcse ;
|
||||
M: ##callback-inputs gcse ;
|
||||
M: ##copy gcse ;
|
||||
: defs-available ( insn -- insn )
|
||||
dup defs-vregs [ make-available ] each ;
|
||||
|
||||
M: alien-call-insn gcse defs-available ;
|
||||
M: ##callback-inputs gcse defs-available ;
|
||||
M: ##copy gcse defs-available ;
|
||||
|
||||
: ?eliminate ( insn vn -- insn' )
|
||||
dup available? [
|
||||
[ dst>> ] dip <copy>
|
||||
] [ drop make-available ] if ;
|
||||
[ dst>> dup make-available ] dip <copy>
|
||||
] [ drop defs-available ] if ;
|
||||
|
||||
: eliminate-redundancy ( insn -- insn' )
|
||||
dup >expr exprs>vns get at
|
||||
[ ?eliminate ] [ make-available ] if* ;
|
||||
[ ?eliminate ] [ defs-available ] if* ;
|
||||
|
||||
M: ##phi gcse
|
||||
dup inputs>> values [ vreg>vn ] map sift
|
||||
|
|
Loading…
Reference in New Issue