diff options
author | Christopher Tetreault <ctetreau@quicinc.com> | 2020-06-29 14:46:25 -0700 |
---|---|---|
committer | Christopher Tetreault <ctetreau@quicinc.com> | 2020-06-29 15:20:24 -0700 |
commit | bdcd20062933df3d6a3401dfe0a1fb8c2cb8071f (patch) | |
tree | a3679af7d99e2c1c00c343a8c63833d8a32432fd /llvm | |
parent | cf1d04484344be52ada8178e41d18fd15a9b880c (diff) | |
download | llvm-bdcd20062933df3d6a3401dfe0a1fb8c2cb8071f.zip llvm-bdcd20062933df3d6a3401dfe0a1fb8c2cb8071f.tar.gz llvm-bdcd20062933df3d6a3401dfe0a1fb8c2cb8071f.tar.bz2 |
[SVE] Remove calls to VectorType::getNumElements from Instrumentation
Reviewers: efriedma, pcc, gchatelet, kmclaughlin, sdesmalen
Reviewed By: sdesmalen
Subscribers: tschuett, hiraditya, rkruppe, psnobl, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D82241
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp | 6 | ||||
-rw-r--r-- | llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp | 19 |
2 files changed, 15 insertions, 10 deletions
diff --git a/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp b/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp index b45be99..6a04d0a 100644 --- a/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp +++ b/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp @@ -10,6 +10,8 @@ // Details of the algorithm: // https://github.com/google/sanitizers/wiki/AddressSanitizerAlgorithm // +// FIXME: This sanitizer does not yet handle scalable vectors +// //===----------------------------------------------------------------------===// #include "llvm/Transforms/Instrumentation/AddressSanitizer.h" @@ -1504,8 +1506,8 @@ static void instrumentMaskedLoadOrStore(AddressSanitizer *Pass, unsigned Granularity, uint32_t TypeSize, bool IsWrite, Value *SizeArgument, bool UseCalls, uint32_t Exp) { - auto *VTy = - cast<VectorType>(cast<PointerType>(Addr->getType())->getElementType()); + auto *VTy = cast<FixedVectorType>( + cast<PointerType>(Addr->getType())->getElementType()); uint64_t ElemTypeSize = DL.getTypeStoreSizeInBits(VTy->getScalarType()); unsigned Num = VTy->getNumElements(); auto Zero = ConstantInt::get(IntptrTy, 0); diff --git a/llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp b/llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp index d8df5ad..9bf3a9e 100644 --- a/llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp +++ b/llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp @@ -137,6 +137,9 @@ /// /// KernelMemorySanitizer only supports X86_64 at the moment. /// +// +// FIXME: This sanitizer does not yet handle scalable vectors +// //===----------------------------------------------------------------------===// #include "llvm/Transforms/Instrumentation/MemorySanitizer.h" @@ -1355,7 +1358,7 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> { if (VectorType *VT = dyn_cast<VectorType>(OrigTy)) { uint32_t EltSize = DL.getTypeSizeInBits(VT->getElementType()); return FixedVectorType::get(IntegerType::get(*MS.C, EltSize), - VT->getNumElements()); + cast<FixedVectorType>(VT)->getNumElements()); } if (ArrayType *AT = dyn_cast<ArrayType>(OrigTy)) { return ArrayType::get(getShadowTy(AT->getElementType()), @@ -2077,7 +2080,7 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> { size_t VectorOrPrimitiveTypeSizeInBits(Type *Ty) { assert(!(Ty->isVectorTy() && Ty->getScalarType()->isPointerTy()) && "Vector of pointers is not a valid shadow type"); - return Ty->isVectorTy() ? cast<VectorType>(Ty)->getNumElements() * + return Ty->isVectorTy() ? cast<FixedVectorType>(Ty)->getNumElements() * Ty->getScalarSizeInBits() : Ty->getPrimitiveSizeInBits(); } @@ -2095,8 +2098,8 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> { if (dstTy->isIntegerTy() && srcTy->isIntegerTy()) return IRB.CreateIntCast(V, dstTy, Signed); if (dstTy->isVectorTy() && srcTy->isVectorTy() && - cast<VectorType>(dstTy)->getNumElements() == - cast<VectorType>(srcTy)->getNumElements()) + cast<FixedVectorType>(dstTy)->getNumElements() == + cast<FixedVectorType>(srcTy)->getNumElements()) return IRB.CreateIntCast(V, dstTy, Signed); Value *V1 = IRB.CreateBitCast(V, Type::getIntNTy(*MS.C, srcSizeInBits)); Value *V2 = @@ -2141,7 +2144,7 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> { Constant *ShadowMul; Type *Ty = ConstArg->getType(); if (auto *VTy = dyn_cast<VectorType>(Ty)) { - unsigned NumElements = VTy->getNumElements(); + unsigned NumElements = cast<FixedVectorType>(VTy)->getNumElements(); Type *EltTy = VTy->getElementType(); SmallVector<Constant *, 16> Elements; for (unsigned Idx = 0; Idx < NumElements; ++Idx) { @@ -2969,8 +2972,8 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> { Value *Acc = IRB.CreateExtractElement( MaskedPassThruShadow, ConstantInt::get(IRB.getInt32Ty(), 0)); - for (int i = 1, - N = cast<VectorType>(PassThru->getType())->getNumElements(); + for (int i = 1, N = cast<FixedVectorType>(PassThru->getType()) + ->getNumElements(); i < N; ++i) { Value *More = IRB.CreateExtractElement( MaskedPassThruShadow, ConstantInt::get(IRB.getInt32Ty(), i)); @@ -3030,7 +3033,7 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> { IRBuilder<> IRB(&I); Type *ShadowTy = getShadowTy(&I); unsigned Width = - cast<VectorType>(I.getArgOperand(0)->getType())->getNumElements(); + cast<FixedVectorType>(I.getArgOperand(0)->getType())->getNumElements(); assert(isa<ConstantInt>(I.getArgOperand(2)) && "pclmul 3rd operand must be a constant"); unsigned Imm = cast<ConstantInt>(I.getArgOperand(2))->getZExtValue(); |