summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2014-10-01 03:19:43 +0000
committerChandler Carruth <chandlerc@gmail.com>2014-10-01 03:19:43 +0000
commit26cb9b8d2da4d401ea6a6fe6567fe32a46bfa65c (patch)
tree45b8199d6ae5b3c0ddbd40568b3f064cdfda25f5 /llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
parent846baf2ca1a38e2f9508767cbfa6ff5de6116ef3 (diff)
downloadbcm5719-llvm-26cb9b8d2da4d401ea6a6fe6567fe32a46bfa65c.tar.gz
bcm5719-llvm-26cb9b8d2da4d401ea6a6fe6567fe32a46bfa65c.zip
[x86] Teach the new vector shuffle lowering to be even more aggressive
in exposing the scalar value to the broadcast DAG fragment so that we can catch even reloads and fold them into the broadcast. This is somewhat magical I'm afraid but seems to work. It is also what the old lowering did, and I've switched an old test to run both lowerings demonstrating that we get the same result. Unlike the old code, I'm not lowering f32 or f64 scalars through this path when we only have AVX1. The target patterns include pretty heinous code to re-cast those as shuffles when the scalar happens to not be spilled because AVX1 provides no broadcast mechanism from registers what-so-ever. This is terribly brittle. I'd much rather go through our generic lowering code to get this. If needed, we can add a peephole to get even more opportunities to broadcast-from-spill-slots that are exposed post-RA, but my suspicion is this just doesn't matter that much. llvm-svn: 218734
Diffstat (limited to 'llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud