diff options
author | Farhana Aleen <farhana.aleen@gmail.com> | 2018-03-07 16:29:05 +0000 |
---|---|---|
committer | Farhana Aleen <farhana.aleen@gmail.com> | 2018-03-07 16:29:05 +0000 |
commit | 0d03d0588d5bebf370dea06f203f184503eed097 (patch) | |
tree | 318d875a85e71bcc78ba78ded727a06fa538d680 /llvm/lib/Transforms/Vectorize/LoadStoreVectorizer.cpp | |
parent | bf8596f9cf5e22292e4544f9d40e6cd12a3b4beb (diff) | |
download | bcm5719-llvm-0d03d0588d5bebf370dea06f203f184503eed097.tar.gz bcm5719-llvm-0d03d0588d5bebf370dea06f203f184503eed097.zip |
[AMDGPU] Widened vector length for global/constant address space.
llvm-svn: 326904
Diffstat (limited to 'llvm/lib/Transforms/Vectorize/LoadStoreVectorizer.cpp')
-rw-r--r-- | llvm/lib/Transforms/Vectorize/LoadStoreVectorizer.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/llvm/lib/Transforms/Vectorize/LoadStoreVectorizer.cpp b/llvm/lib/Transforms/Vectorize/LoadStoreVectorizer.cpp index f438aae9d1d..05bf8c6baaf 100644 --- a/llvm/lib/Transforms/Vectorize/LoadStoreVectorizer.cpp +++ b/llvm/lib/Transforms/Vectorize/LoadStoreVectorizer.cpp @@ -666,8 +666,12 @@ Vectorizer::collectInstructions(BasicBlock *BB) { unsigned AS = Ptr->getType()->getPointerAddressSpace(); unsigned VecRegSize = TTI.getLoadStoreVecRegBitWidth(AS); + unsigned VF = VecRegSize / TySize; + VectorType *VecTy = dyn_cast<VectorType>(Ty); + // No point in looking at these if they're too big to vectorize. - if (TySize > VecRegSize / 2) + if (TySize > VecRegSize / 2 || + (VecTy && TTI.getLoadVectorFactor(VF, TySize, TySize / 8, VecTy) == 0)) continue; // Make sure all the users of a vector are constant-index extracts. @@ -709,8 +713,12 @@ Vectorizer::collectInstructions(BasicBlock *BB) { unsigned AS = Ptr->getType()->getPointerAddressSpace(); unsigned VecRegSize = TTI.getLoadStoreVecRegBitWidth(AS); + unsigned VF = VecRegSize / TySize; + VectorType *VecTy = dyn_cast<VectorType>(Ty); + // No point in looking at these if they're too big to vectorize. - if (TySize > VecRegSize / 2) + if (TySize > VecRegSize / 2 || + (VecTy && TTI.getStoreVectorFactor(VF, TySize, TySize / 8, VecTy) == 0)) continue; if (isa<VectorType>(Ty) && !llvm::all_of(SI->users(), [](const User *U) { |