##compare-branch


Vocabulary
compiler.cfg.instructions

Definition
IN: compiler.cfg.instructions

TUPLE: ##compare-branch < vreg-insn src1 src2 cc insn# ;


Methods
USING: accessors compiler.cfg.gvn.avail
compiler.cfg.instructions kernel ;

M: ##compare-branch >avail-insn-uses
[ dup >avail-vreg swap or ] change-src1
[ dup >avail-vreg swap or ] change-src2 drop ;


USING: accessors compiler.cfg.instructions
compiler.cfg.linear-scan.assignment kernel ;

M: ##compare-branch assign-insn-uses
[ vreg>reg ] change-src1 [ vreg>reg ] change-src2 drop ;


USING: accessors compiler.cfg.instructions
compiler.cfg.representations.rewrite kernel ;

M: ##compare-branch convert-insn-uses
[ converted-value ] change-src1
[ converted-value ] change-src2 drop ;


USING: accessors compiler.cfg.instructions compiler.codegen
cpu.architecture kernel ;

M: ##compare-branch generate-conditional-insn
[ src1>> ] keep [ src2>> ] keep [ cc>> ] keep drop
%compare-branch ;


USING: accessors compiler.cfg.instructions
compiler.cfg.renaming kernel ;

M: ##compare-branch rename-insn-uses
[ rename-value ] change-src1 [ rename-value ] change-src2
drop ;


USING: accessors combinators compiler.cfg.gvn.comparisons
compiler.cfg.gvn.math compiler.cfg.gvn.rewrite
compiler.cfg.instructions kernel ;

M: ##compare-branch rewrite
{
{
[ dup src1>> vreg-immediate-comparand? ]
[ t >compare-imm-branch ]
}
{
[ dup src2>> vreg-immediate-comparand? ]
[ f >compare-imm-branch ]
}
{ [ dup diagonal? ] [ rewrite-self-compare-branch ] }
[ drop f ]
} cond ;


USING: accessors combinators compiler.cfg.instructions
compiler.cfg.value-numbering.comparisons
compiler.cfg.value-numbering.math
compiler.cfg.value-numbering.rewrite kernel ;

M: ##compare-branch rewrite
{
{
[ dup src1>> vreg-immediate-comparand? ]
[ t >compare-imm-branch ]
}
{
[ dup src2>> vreg-immediate-comparand? ]
[ f >compare-imm-branch ]
}
{ [ dup diagonal? ] [ rewrite-self-compare-branch ] }
[ drop f ]
} cond ;


USING: accessors compiler.cfg.instructions
compiler.cfg.ssa.construction.private kernel ;

M: ##compare-branch ssa-rename-insn-uses
[ top-name ] change-src1 [ top-name ] change-src2 drop ;


USING: compiler.cfg.instructions
compiler.cfg.representations.preferred cpu.architecture kernel
;

M: ##compare-branch uses-vreg-reps
drop { tagged-rep tagged-rep } ;


USING: accessors arrays compiler.cfg.def-use
compiler.cfg.instructions kernel ;

M: ##compare-branch uses-vregs
[ src1>> ] [ src2>> ] bi 2array ;