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