aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
diff options
context:
space:
mode:
authorStanislav Mekhanoshin <Stanislav.Mekhanoshin@amd.com>2020-11-24 10:42:43 -0800
committerStanislav Mekhanoshin <Stanislav.Mekhanoshin@amd.com>2020-12-14 08:49:40 -0800
commit87d7757bbe14fed420092071ded3430072053316 (patch)
tree3bda4a5981ebe8cd3ba170190cbd34fbb29bdba7 /llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
parentc21df2a79c268d1e0f467ec25a1ec7cb4aff5dfb (diff)
downloadllvm-87d7757bbe14fed420092071ded3430072053316.zip
llvm-87d7757bbe14fed420092071ded3430072053316.tar.gz
llvm-87d7757bbe14fed420092071ded3430072053316.tar.bz2
[SLP] Control maximum vectorization factor from TTI
D82227 has added a proper check to limit PHI vectorization to the maximum vector register size. That unfortunately resulted in at least a couple of regressions on SystemZ and x86. This change reverts PHI handling from D82227 and replaces it with a more general check in SLPVectorizerPass::tryToVectorizeList(). Moved to tryToVectorizeList() it allows to restart vectorization if initial chunk fails. However, this function is more general and handles not only PHI but everything which SLP handles. If vectorization factor would be limited to maximum vector register size it would limit much more vectorization than before leading to further regressions. Therefore a new TTI callback getMaximumVF() is added with the default 0 to preserve current behavior and limit nothing. Then targets can decide what is better for them. The callback gets ElementSize just like a similar getMinimumVF() function and the main opcode of the chain. The latter is to avoid regressions at least on the AMDGPU. We can have loads and stores up to 128 bit wide, and <2 x 16> bit vector math on some subtargets, where the rest shall not be vectorized. I.e. we need to differentiate based on the element size and operation itself. Differential Revision: https://reviews.llvm.org/D92059
Diffstat (limited to 'llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp')
0 files changed, 0 insertions, 0 deletions