compiler.cfg.value-numbering: constant folding for ##shuffle-vector
parent
53a51957df
commit
be733cd797
|
@ -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 ;
|
||||
|
|
|
@ -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 }
|
||||
|
|
Loading…
Reference in New Issue