[llvm] r290711 - [TBAAVerifier] Memoize validity of scalar tbaa nodes; NFCI
Sanjoy Das via llvm-commits
llvm-commits at lists.llvm.org
Thu Dec 29 07:46:57 PST 2016
Author: sanjoy
Date: Thu Dec 29 09:46:57 2016
New Revision: 290711
URL: http://llvm.org/viewvc/llvm-project?rev=290711&view=rev
Log:
[TBAAVerifier] Memoize validity of scalar tbaa nodes; NFCI
Modified:
llvm/trunk/include/llvm/IR/Verifier.h
llvm/trunk/lib/IR/Verifier.cpp
Modified: llvm/trunk/include/llvm/IR/Verifier.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/Verifier.h?rev=290711&r1=290710&r2=290711&view=diff
==============================================================================
--- llvm/trunk/include/llvm/IR/Verifier.h (original)
+++ llvm/trunk/include/llvm/IR/Verifier.h Thu Dec 29 09:46:57 2016
@@ -50,6 +50,10 @@ class TBAAVerifier {
typedef std::pair<bool, unsigned> TBAABaseNodeSummary;
DenseMap<MDNode *, TBAABaseNodeSummary> TBAABaseNodes;
+ /// Maps an alleged scalar TBAA node to a boolean that is true if the said
+ /// TBAA node is a valid scalar TBAA node or false otherwise.
+ DenseMap<const MDNode *, bool> TBAAScalarNodes;
+
/// \name Helper functions used by \c visitTBAAMetadata.
/// @{
MDNode *getFieldNodeFromTBAABaseNode(Instruction &I, MDNode *BaseNode,
@@ -57,6 +61,8 @@ class TBAAVerifier {
TBAAVerifier::TBAABaseNodeSummary verifyTBAABaseNode(Instruction &I,
MDNode *BaseNode);
TBAABaseNodeSummary verifyTBAABaseNodeImpl(Instruction &I, MDNode *BaseNode);
+
+ bool isValidScalarTBAANode(const MDNode *MD);
/// @}
public:
Modified: llvm/trunk/lib/IR/Verifier.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Verifier.cpp?rev=290711&r1=290710&r2=290711&view=diff
==============================================================================
--- llvm/trunk/lib/IR/Verifier.cpp (original)
+++ llvm/trunk/lib/IR/Verifier.cpp Thu Dec 29 09:46:57 2016
@@ -4655,9 +4655,18 @@ static bool IsScalarTBAANodeImpl(const M
(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(Ins
"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(Ins
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);
More information about the llvm-commits
mailing list