diff options
author | Sanjoy Das <sanjoy@playingwithpointers.com> | 2016-12-29 15:46:57 +0000 |
---|---|---|
committer | Sanjoy Das <sanjoy@playingwithpointers.com> | 2016-12-29 15:46:57 +0000 |
commit | 55f12d9de91a4f9591abecf85719e8cea8aca2f9 (patch) | |
tree | 3982fafa601b5cdbbee8867d22be2ef4f5f87a32 /llvm/lib | |
parent | 25478d821befd6f1c8192bade899f1429c853500 (diff) | |
download | bcm5719-llvm-55f12d9de91a4f9591abecf85719e8cea8aca2f9.tar.gz bcm5719-llvm-55f12d9de91a4f9591abecf85719e8cea8aca2f9.zip |
[TBAAVerifier] Memoize validity of scalar tbaa nodes; NFCI
llvm-svn: 290711
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/IR/Verifier.cpp | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/llvm/lib/IR/Verifier.cpp b/llvm/lib/IR/Verifier.cpp index 8c91f1ee9e1..d42f5d090d1 100644 --- a/llvm/lib/IR/Verifier.cpp +++ b/llvm/lib/IR/Verifier.cpp @@ -4655,9 +4655,18 @@ static bool IsScalarTBAANodeImpl(const MDNode *MD, (IsRootTBAANode(Parent) || IsScalarTBAANodeImpl(Parent, Visited)); } -static bool IsScalarTBAANode(const MDNode *MD) { +bool TBAAVerifier::isValidScalarTBAANode(const MDNode *MD) { + auto ResultIt = TBAAScalarNodes.find(MD); + if (ResultIt != TBAAScalarNodes.end()) + return ResultIt->second; + SmallPtrSet<const MDNode *, 4> Visited; - return IsScalarTBAANodeImpl(MD, Visited); + bool Result = IsScalarTBAANodeImpl(MD, Visited); + auto InsertResult = TBAAScalarNodes.insert({MD, Result}); + (void)InsertResult; + assert(InsertResult.second && "Just checked!"); + + return Result; } /// Returns the field node at the offset \p Offset in \p BaseNode. Update \p @@ -4735,8 +4744,8 @@ bool TBAAVerifier::visitTBAAMetadata(Instruction &I, MDNode *MD) { "should be non-null and point to Metadata nodes", &I, MD, BaseNode, AccessType); - AssertTBAA(IsScalarTBAANode(AccessType), "Access type node must be scalar", - &I, MD, AccessType); + AssertTBAA(isValidScalarTBAANode(AccessType), + "Access type node must be scalar", &I, MD, AccessType); auto *OffsetCI = mdconst::dyn_extract_or_null<ConstantInt>(MD->getOperand(2)); AssertTBAA(OffsetCI, "Offset must be constant integer", &I, MD); @@ -4764,7 +4773,7 @@ bool TBAAVerifier::visitTBAAMetadata(Instruction &I, MDNode *MD) { SeenAccessTypeInPath |= BaseNode == AccessType; - if (IsScalarTBAANode(BaseNode) || BaseNode == AccessType) + if (isValidScalarTBAANode(BaseNode) || BaseNode == AccessType) AssertTBAA(Offset == 0, "Offset not zero at the point of scalar access", &I, MD, &Offset); |