compiler.cfg.gvn: forgot to make certain defs available

db4
Alex Vondrak 2011-07-05 19:19:30 -07:00 committed by John Benediktsson
parent 7de3ec13e5
commit 2f1fdaad6c
2 changed files with 10 additions and 8 deletions

View File

@ -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 ;

View File

@ -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