summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2018-07-13 09:39:10 +0000
committerChandler Carruth <chandlerc@gmail.com>2018-07-13 09:39:10 +0000
commitcaa7b03a5012b5d7bda28674756d500c2c5699c7 (patch)
treeabbb73266f0c6538a43a788ee67a45791c17145c /llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
parent4335b3e239b218ba527eb6082b38e9bfc71ea087 (diff)
downloadbcm5719-llvm-caa7b03a5012b5d7bda28674756d500c2c5699c7.tar.gz
bcm5719-llvm-caa7b03a5012b5d7bda28674756d500c2c5699c7.zip
[x86] Teach the EFLAGS copy lowering to handle much more complex control
flow patterns including forks, merges, and even cyles. This tries to cover a reasonably comprehensive set of patterns that still don't require PHIs or PHI placement. The coverage was inspired by the amazing variety of patterns produced when copy EFLAGS and restoring it to implement Speculative Load Hardening. Without this patch, we simply cannot make such complex and invasive changes to x86 instruction sequences due to EFLAGS. I've added "just" one test, but this test covers many different complexities and corner cases of this approach. It is actually more comprehensive, as far as I can tell, than anything that I have encountered in the wild on SLH. Because the test is so complex, I've tried to give somewhat thorough comments and an ASCII-art diagram of the control flows to make it a bit easier to read and maintain long-term. Differential Revision: https://reviews.llvm.org/D49220 llvm-svn: 336985
Diffstat (limited to 'llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud