: 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>> ]
[ rewrite-unbox-alien ]
}
{
- [ dup [ ##box-displaced-alien? ] with-available-uses? ]
+ ! [ dup [ ##box-displaced-alien? ] with-available-uses? ]
+ [ f ]
[ rewrite-unbox-displaced-alien ]
}
[ 2drop f ]
: >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>> ]
[ { [ 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
[ 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 ] }
: 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
] [ 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