compiler.cfg.value-numbering.comparisons: docs and tests

locals-and-roots
Björn Lindqvist 2016-05-19 14:04:23 +02:00
parent 0394a141d3
commit 1eaa151a3c
3 changed files with 34 additions and 9 deletions

View File

@ -0,0 +1,23 @@
USING: compiler.cfg.instructions help.markup help.syntax kernel ;
IN: compiler.cfg.value-numbering.comparisons
HELP: >test-branch
{ $values { "insn" insn } { "insn'" ##test-branch } }
{ $description "Converts a " { $link ##compare-integer-imm-branch } " instruction into a " { $link ##test-branch } " instruction." } ;
HELP: rewrite-into-test?
{ $values { "insn" insn } { "?" boolean } }
{ $description "Whether the comparison instruction can be rewritten into a test instruction." } ;
ARTICLE: "compiler.cfg.value-numbering.comparisons" "Comparisons GVN"
"Optimizations performed here:"
$nl
{ $list
"Eliminating intermediate boolean values when the result of a comparison is used by a compare-branch."
"Folding comparisons where both inputs are literal."
"Folding comparisons where both inputs are congruent."
"Converting compare instructions into compare-imm instructions."
} ;
ABOUT: "compiler.cfg.value-numbering.comparisons"

View File

@ -0,0 +1,10 @@
USING: compiler.cfg.comparisons compiler.cfg.instructions
compiler.cfg.value-numbering.comparisons cpu.x86.assembler.operands
kernel tools.test ;
IN: compiler.cfg.value-numbering.comparisons.tests
{
T{ ##test-branch { src1 RAX } { src2 RAX } { cc cc= } }
} [
RAX 0 cc= f ##compare-integer-imm-branch boa >test-branch
] unit-test

View File

@ -8,14 +8,6 @@ compiler.cfg.value-numbering.rewrite cpu.architecture kernel
math math.order namespaces sequences vectors ;
IN: compiler.cfg.value-numbering.comparisons
! Optimizations performed here:
!
! 1) Eliminating intermediate boolean values when the result of
! a comparison is used by a compare-branch
! 2) Folding comparisons where both inputs are literal
! 3) Folding comparisons where both inputs are congruent
! 4) Converting compare instructions into compare-imm instructions
: fold-compare-imm? ( insn -- ? )
src1>> vreg>insn literal-insn? ;
@ -101,7 +93,7 @@ UNION: general-compare-insn scalar-compare-insn ##test-vector ;
: fold-compare-imm-branch ( insn -- insn/f )
evaluate-compare-imm fold-branch ;
: >test-branch ( insn -- insn )
: >test-branch ( insn -- insn' )
[ src1>> ] [ src1>> ] [ cc>> ] tri ##test-branch new-insn ;
M: ##compare-imm-branch rewrite