diff options
author | Andrea Di Biagio <Andrea_DiBiagio@sn.scee.net> | 2014-01-20 19:35:22 +0000 |
---|---|---|
committer | Andrea Di Biagio <Andrea_DiBiagio@sn.scee.net> | 2014-01-20 19:35:22 +0000 |
commit | 450d1661be35e65ad77c0d45613e19e7a5d4b2f1 (patch) | |
tree | 4f8e3bd8d717d3c3da0db2f476bfd0ea5ca8232e /llvm/lib/CodeGen/StackProtector.cpp | |
parent | 15f60cb2baaa4393b32b45460fa8f0744a844467 (diff) | |
download | bcm5719-llvm-450d1661be35e65ad77c0d45613e19e7a5d4b2f1.tar.gz bcm5719-llvm-450d1661be35e65ad77c0d45613e19e7a5d4b2f1.zip |
[X86] Teach how to combine a vselect into a movss/movsd
Add target specific rules for combining vselect dag nodes into movss/movsd
when possible.
If the vector type of the vselect dag node in input is either MVT::v4i13 or
MVT::v4f32, then try to fold according to rules:
1) fold (vselect (build_vector (0, -1, -1, -1)), A, B) -> (movss A, B)
2) fold (vselect (build_vector (-1, 0, 0, 0)), A, B) -> (movss B, A)
If the vector type of the vselect dag node in input is either MVT::v2i64 or
MVT::v2f64 (and we have SSE2), then try to fold according to rules:
3) fold (vselect (build_vector (0, -1)), A, B) -> (movsd A, B)
4) fold (vselect (build_vector (-1, 0)), A, B) -> (movsd B, A)
llvm-svn: 199683
Diffstat (limited to 'llvm/lib/CodeGen/StackProtector.cpp')
0 files changed, 0 insertions, 0 deletions