summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorSanjoy Das <sanjoy@playingwithpointers.com>2016-12-29 15:46:57 +0000
committerSanjoy Das <sanjoy@playingwithpointers.com>2016-12-29 15:46:57 +0000
commit55f12d9de91a4f9591abecf85719e8cea8aca2f9 (patch)
tree3982fafa601b5cdbbee8867d22be2ef4f5f87a32 /llvm/lib
parent25478d821befd6f1c8192bade899f1429c853500 (diff)
downloadbcm5719-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.cpp19
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);
OpenPOWER on IntegriCloud