compiler.cfg.gvn: found infinite loop issues when rewrites define new vregs
parent
774264b9f9
commit
d5dc989fd8
|
@ -27,6 +27,8 @@ M: ##box-displaced-alien rewrite
|
|||
: rewrite-unbox-alien ( insn box-insn -- insn )
|
||||
[ dst>> ] [ src>> ] bi* <copy> ;
|
||||
|
||||
! XXX next-vreg makes vregs>vns change on every iteration
|
||||
! (hidden in ^^unbox-c-ptr)
|
||||
: rewrite-unbox-displaced-alien ( insn box-insn -- insns )
|
||||
[
|
||||
[ dst>> ]
|
||||
|
@ -43,7 +45,8 @@ M: ##box-displaced-alien rewrite
|
|||
[ rewrite-unbox-alien ]
|
||||
}
|
||||
{
|
||||
[ dup [ ##box-displaced-alien? ] with-available-uses? ]
|
||||
! [ dup [ ##box-displaced-alien? ] with-available-uses? ]
|
||||
[ f ]
|
||||
[ rewrite-unbox-displaced-alien ]
|
||||
}
|
||||
[ 2drop f ]
|
||||
|
|
|
@ -58,6 +58,7 @@ IN: compiler.cfg.gvn.comparisons
|
|||
: >compare< ( insn -- in1 in2 cc )
|
||||
[ src1>> ] [ src2>> ] [ cc>> ] tri ; inline
|
||||
|
||||
! XXX next-vreg may make vregs>vns change on every iteration
|
||||
: >test-vector< ( insn -- src1 temp rep vcc )
|
||||
{
|
||||
[ src1>> ]
|
||||
|
@ -179,11 +180,13 @@ M: ##compare-integer-branch rewrite
|
|||
[ { [ dst>> ] [ src1>> ] [ src2>> ] [ cc>> ] } cleave ] dip
|
||||
swap-compare ; inline
|
||||
|
||||
! XXX next-vreg may make vregs>vns change on every iteration
|
||||
: >compare-imm ( insn swap? -- insn' )
|
||||
(>compare-imm)
|
||||
[ vreg>literal ] dip
|
||||
next-vreg \ ##compare-imm new-insn ; inline
|
||||
|
||||
! XXX next-vreg may make vregs>vns change on every iteration
|
||||
: >compare-integer-imm ( insn swap? -- insn' )
|
||||
(>compare-imm)
|
||||
[ vreg>integer ] dip
|
||||
|
@ -218,6 +221,7 @@ M: ##compare-integer rewrite
|
|||
[ cc>> { cc= cc/= } member? ]
|
||||
} 1&& ; inline
|
||||
|
||||
! XXX next-vreg may make vregs>vns change on every iteration
|
||||
: rewrite-redundant-comparison ( insn -- insn' )
|
||||
[ cc>> ] [ dst>> ] [ src1>> vreg>insn ] tri {
|
||||
{ [ dup ##compare? ] [ >compare< next-vreg \ ##compare new-insn ] }
|
||||
|
@ -279,6 +283,7 @@ M: ##compare-integer-imm rewrite
|
|||
: simplify-test-imm-branch ( insn -- insn )
|
||||
(simplify-test-imm) \ ##test-imm-branch new-insn ; inline
|
||||
|
||||
! XXX next-vreg may make vregs>vns change on every iteration
|
||||
: >test-imm ( insn ? -- insn' )
|
||||
(>compare-imm) [ vreg>integer ] dip next-vreg
|
||||
\ ##test-imm new-insn ; inline
|
||||
|
|
|
@ -122,11 +122,14 @@ M: ##sub-imm rewrite sub-imm>add-imm ;
|
|||
] [ f ] if ; inline
|
||||
|
||||
: distribute-over-add? ( insn -- ? )
|
||||
src1>> vreg>insn [ ##add-imm? ] with-available-uses? ;
|
||||
drop f ;
|
||||
! src1>> vreg>insn [ ##add-imm? ] with-available-uses? ;
|
||||
|
||||
: distribute-over-sub? ( insn -- ? )
|
||||
src1>> vreg>insn [ ##sub-imm? ] with-available-uses? ;
|
||||
drop f ;
|
||||
! src1>> vreg>insn [ ##sub-imm? ] with-available-uses? ;
|
||||
|
||||
! XXX next-vreg makes vregs>vns change on every iteration
|
||||
: distribute ( insn add-op mul-op -- new-insns/f )
|
||||
[
|
||||
dup src1>> vreg>insn
|
||||
|
|
Loading…
Reference in New Issue