compiler.cfg.value-numbering: constant folding for ##shuffle-vector

db4
Slava Pestov 2010-05-18 04:22:21 -04:00
parent 53a51957df
commit be733cd797
2 changed files with 27 additions and 0 deletions

View File

@ -99,6 +99,17 @@ M: ##gather-vector-4 rewrite rewrite-gather-vector-4 ;
M: ##gather-int-vector-4 rewrite rewrite-gather-vector-4 ;
: fold-shuffle-vector ( insn src1 src2 -- insn )
[ dst>> ] [ obj>> ] [ obj>> ] tri*
swap nths \ ##load-reference new-insn ;
M: ##shuffle-vector rewrite
dup [ src>> vreg>insn ] [ shuffle>> vreg>insn ] bi
{
{ [ 2dup [ ##load-reference? ] both? ] [ fold-shuffle-vector ] }
[ 3drop f ]
} cond ;
M: ##xor-vector rewrite
dup diagonal?
[ [ dst>> ] [ rep>> ] bi \ ##zero-vector new-insn ] [ drop f ] if ;

View File

@ -2348,6 +2348,22 @@ cell 8 = [
} value-numbering-step
] unit-test
[
{
T{ ##load-integer f 0 55 }
T{ ##load-reference f 1 B{ 55 0 55 0 55 0 55 0 55 0 55 0 55 0 55 0 } }
T{ ##load-reference f 2 B{ 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 } }
T{ ##load-reference f 3 B{ 0 55 0 55 0 55 0 55 0 55 0 55 0 55 0 55 } }
}
] [
{
T{ ##load-integer f 0 55 }
T{ ##scalar>vector f 1 0 short-8-rep }
T{ ##load-reference f 2 B{ 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 } }
T{ ##shuffle-vector f 3 1 2 float-4-rep }
} value-numbering-step
] unit-test
[
{
T{ ##load-reference f 0 1.25 }