From 814a2ffc7cbd15382a9e60164fba7eb1f9e3a45e Mon Sep 17 00:00:00 2001 From: Benjamin Kramer Date: Sat, 4 Oct 2014 22:44:29 +0000 Subject: [PATCH] Make AAMDNodes ctor and operator bool (!!!) explicit, mop up bugs and weirdness exposed by it. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@219068 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Analysis/AliasAnalysis.h | 10 ++++------ include/llvm/IR/Metadata.h | 22 +++++++--------------- include/llvm/LinkAllPasses.h | 2 +- lib/Analysis/AliasAnalysis.cpp | 2 +- lib/Analysis/BasicAliasAnalysis.cpp | 6 +++--- lib/Analysis/NoAliasAnalysis.cpp | 7 +++++-- lib/CodeGen/MachineFunction.cpp | 4 ++-- lib/Target/AArch64/AArch64ISelLowering.cpp | 2 +- 8 files changed, 24 insertions(+), 31 deletions(-) diff --git a/include/llvm/Analysis/AliasAnalysis.h b/include/llvm/Analysis/AliasAnalysis.h index 3aaec851c9f..9bfa0459027 100644 --- a/include/llvm/Analysis/AliasAnalysis.h +++ b/include/llvm/Analysis/AliasAnalysis.h @@ -568,14 +568,12 @@ public: template<> struct DenseMapInfo { static inline AliasAnalysis::Location getEmptyKey() { - return - AliasAnalysis::Location(DenseMapInfo::getEmptyKey(), - 0, nullptr); + return AliasAnalysis::Location(DenseMapInfo::getEmptyKey(), + 0); } static inline AliasAnalysis::Location getTombstoneKey() { - return - AliasAnalysis::Location(DenseMapInfo::getTombstoneKey(), - 0, nullptr); + return AliasAnalysis::Location( + DenseMapInfo::getTombstoneKey(), 0); } static unsigned getHashValue(const AliasAnalysis::Location &Val) { return DenseMapInfo::getHashValue(Val.Ptr) ^ diff --git a/include/llvm/IR/Metadata.h b/include/llvm/IR/Metadata.h index 795f01d7954..9738be02c1e 100644 --- a/include/llvm/IR/Metadata.h +++ b/include/llvm/IR/Metadata.h @@ -70,20 +70,17 @@ public: /// AAMDNodes - A collection of metadata nodes that might be associated with a /// memory access used by the alias-analysis infrastructure. struct AAMDNodes { - AAMDNodes(MDNode *T = nullptr, MDNode *S = nullptr, MDNode *N = nullptr) - : TBAA(T), Scope(S), NoAlias(N) {} + explicit AAMDNodes(MDNode *T = nullptr, MDNode *S = nullptr, + MDNode *N = nullptr) + : TBAA(T), Scope(S), NoAlias(N) {} - bool operator == (const AAMDNodes &A) const { - return equals(A); + bool operator==(const AAMDNodes &A) const { + return TBAA == A.TBAA && Scope == A.Scope && NoAlias == A.NoAlias; } - bool operator != (const AAMDNodes &A) const { - return !equals(A); - } + bool operator!=(const AAMDNodes &A) const { return !(*this == A); } - operator bool() const { - return TBAA || Scope || NoAlias; - } + LLVM_EXPLICIT operator bool() const { return TBAA || Scope || NoAlias; } /// TBAA - The tag for type-based alias analysis. MDNode *TBAA; @@ -93,11 +90,6 @@ struct AAMDNodes { /// NoAlias - The tag specifying the noalias scope. MDNode *NoAlias; - -protected: - bool equals(const AAMDNodes &A) const { - return TBAA == A.TBAA && Scope == A.Scope && NoAlias == A.NoAlias; - } }; // Specialize DenseMapInfo for AAMDNodes. diff --git a/include/llvm/LinkAllPasses.h b/include/llvm/LinkAllPasses.h index 1890cd8dcf9..b17e673be09 100644 --- a/include/llvm/LinkAllPasses.h +++ b/include/llvm/LinkAllPasses.h @@ -171,7 +171,7 @@ namespace { llvm::RGPassManager RGM; ((llvm::RegionPass*)nullptr)->runOnRegion((llvm::Region*)nullptr, RGM); llvm::AliasSetTracker X(*(llvm::AliasAnalysis*)nullptr); - X.add((llvm::Value*)nullptr, 0, nullptr); // for -print-alias-sets + X.add(nullptr, 0, llvm::AAMDNodes()); // for -print-alias-sets } } ForcePassLinking; // Force link by creating a global definition. } diff --git a/lib/Analysis/AliasAnalysis.cpp b/lib/Analysis/AliasAnalysis.cpp index 8aee8b1aa33..e02d6058260 100644 --- a/lib/Analysis/AliasAnalysis.cpp +++ b/lib/Analysis/AliasAnalysis.cpp @@ -316,7 +316,7 @@ AliasAnalysis::getLocationForDest(const MemIntrinsic *MTI) { // memcpy/memmove can have AA tags. For memcpy, they apply // to both the source and the destination. AAMDNodes AATags; - MTI->getMetadata(AATags); + MTI->getAAMetadata(AATags); return Location(MTI->getRawDest(), Size, AATags); } diff --git a/lib/Analysis/BasicAliasAnalysis.cpp b/lib/Analysis/BasicAliasAnalysis.cpp index 9cfd02c0218..11b33326fb7 100644 --- a/lib/Analysis/BasicAliasAnalysis.cpp +++ b/lib/Analysis/BasicAliasAnalysis.cpp @@ -904,8 +904,8 @@ BasicAliasAnalysis::aliasGEP(const GEPOperator *GEP1, uint64_t V1Size, // derived pointer. if (const GEPOperator *GEP2 = dyn_cast(V2)) { // Do the base pointers alias? - AliasResult BaseAlias = aliasCheck(UnderlyingV1, UnknownSize, nullptr, - UnderlyingV2, UnknownSize, nullptr); + AliasResult BaseAlias = aliasCheck(UnderlyingV1, UnknownSize, AAMDNodes(), + UnderlyingV2, UnknownSize, AAMDNodes()); // Check for geps of non-aliasing underlying pointers where the offsets are // identical. @@ -988,7 +988,7 @@ BasicAliasAnalysis::aliasGEP(const GEPOperator *GEP1, uint64_t V1Size, if (V1Size == UnknownSize && V2Size == UnknownSize) return MayAlias; - AliasResult R = aliasCheck(UnderlyingV1, UnknownSize, nullptr, + AliasResult R = aliasCheck(UnderlyingV1, UnknownSize, AAMDNodes(), V2, V2Size, V2AAInfo); if (R != MustAlias) // If V2 may alias GEP base pointer, conservatively returns MayAlias. diff --git a/lib/Analysis/NoAliasAnalysis.cpp b/lib/Analysis/NoAliasAnalysis.cpp index 139fa38b8a9..483a81e93a7 100644 --- a/lib/Analysis/NoAliasAnalysis.cpp +++ b/lib/Analysis/NoAliasAnalysis.cpp @@ -57,8 +57,11 @@ namespace { Location getArgLocation(ImmutableCallSite CS, unsigned ArgIdx, ModRefResult &Mask) override { Mask = ModRef; - return Location(CS.getArgument(ArgIdx), UnknownSize, - CS.getInstruction()->getMetadata(LLVMContext::MD_tbaa)); + AAMDNodes AATags( + CS.getInstruction()->getMetadata(LLVMContext::MD_tbaa), + CS.getInstruction()->getMetadata(LLVMContext::MD_alias_scope), + CS.getInstruction()->getMetadata(LLVMContext::MD_noalias)); + return Location(CS.getArgument(ArgIdx), UnknownSize, AATags); } ModRefResult getModRefInfo(ImmutableCallSite CS, diff --git a/lib/CodeGen/MachineFunction.cpp b/lib/CodeGen/MachineFunction.cpp index 13dcab03906..97a0c93b48b 100644 --- a/lib/CodeGen/MachineFunction.cpp +++ b/lib/CodeGen/MachineFunction.cpp @@ -247,12 +247,12 @@ MachineFunction::getMachineMemOperand(const MachineMemOperand *MMO, MachineMemOperand(MachinePointerInfo(MMO->getValue(), MMO->getOffset()+Offset), MMO->getFlags(), Size, - MMO->getBaseAlignment(), nullptr); + MMO->getBaseAlignment()); return new (Allocator) MachineMemOperand(MachinePointerInfo(MMO->getPseudoValue(), MMO->getOffset()+Offset), MMO->getFlags(), Size, - MMO->getBaseAlignment(), nullptr); + MMO->getBaseAlignment()); } MachineInstr::mmo_iterator diff --git a/lib/Target/AArch64/AArch64ISelLowering.cpp b/lib/Target/AArch64/AArch64ISelLowering.cpp index d1368d80e59..ebb9b8e5d86 100644 --- a/lib/Target/AArch64/AArch64ISelLowering.cpp +++ b/lib/Target/AArch64/AArch64ISelLowering.cpp @@ -1947,7 +1947,7 @@ SDValue AArch64TargetLowering::LowerFormalArguments( ArgValue = DAG.getExtLoad(ExtType, DL, VA.getLocVT(), Chain, FIN, MachinePointerInfo::getFixedStack(FI), - MemVT, false, false, false, 0, nullptr); + MemVT, false, false, false, 0); InVals.push_back(ArgValue); } -- 2.40.0