Make AAMDNodes ctor and operator bool (!!!) explicit, mop up bugs and weirdness expos...
authorBenjamin Kramer <benny.kra@googlemail.com>
Sat, 4 Oct 2014 22:44:29 +0000 (22:44 +0000)
committerBenjamin Kramer <benny.kra@googlemail.com>
Sat, 4 Oct 2014 22:44:29 +0000 (22:44 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@219068 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Analysis/AliasAnalysis.h
include/llvm/IR/Metadata.h
include/llvm/LinkAllPasses.h
lib/Analysis/AliasAnalysis.cpp
lib/Analysis/BasicAliasAnalysis.cpp
lib/Analysis/NoAliasAnalysis.cpp
lib/CodeGen/MachineFunction.cpp
lib/Target/AArch64/AArch64ISelLowering.cpp

index 3aaec851c9fceb1e4e3a1f65d1494f494755b61d..9bfa0459027005ed6a68975238b85865a3ed67cc 100644 (file)
@@ -568,14 +568,12 @@ public:
 template<>
 struct DenseMapInfo<AliasAnalysis::Location> {
   static inline AliasAnalysis::Location getEmptyKey() {
-    return
-      AliasAnalysis::Location(DenseMapInfo<const Value *>::getEmptyKey(),
-                              0, nullptr);
+    return AliasAnalysis::Location(DenseMapInfo<const Value *>::getEmptyKey(),
+                                   0);
   }
   static inline AliasAnalysis::Location getTombstoneKey() {
-    return
-      AliasAnalysis::Location(DenseMapInfo<const Value *>::getTombstoneKey(),
-                              0, nullptr);
+    return AliasAnalysis::Location(
+        DenseMapInfo<const Value *>::getTombstoneKey(), 0);
   }
   static unsigned getHashValue(const AliasAnalysis::Location &Val) {
     return DenseMapInfo<const Value *>::getHashValue(Val.Ptr) ^
index 795f01d795426fac1577ca842462a214311de3db..9738be02c1ea59f8ba76835c48242534d7d9aa83 100644 (file)
@@ -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.
index 1890cd8dcf9b24353c82d8af79217e8e44e03109..b17e673be098a944c544b73a2f6f8b0b3212c753 100644 (file)
@@ -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.
 }
index 8aee8b1aa335dca3f10ad11bb80c93db3bc143ae..e02d6058260829f8fb0a7019cbe0197fe875b70b 100644 (file)
@@ -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);
 }
index 9cfd02c02186886a3b2cc23c1eba90fe19162767..11b33326fb7854e71c8de0b5d1841085fe2d2f16 100644 (file)
@@ -904,8 +904,8 @@ BasicAliasAnalysis::aliasGEP(const GEPOperator *GEP1, uint64_t V1Size,
   // derived pointer.
   if (const GEPOperator *GEP2 = dyn_cast<GEPOperator>(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.
index 139fa38b8a94d7f5562dba5e8438fcb1e530425f..483a81e93a700e33d33492ebf5a27a9900e6ef0a 100644 (file)
@@ -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,
index 13dcab03906871baa14189ce1ab5325fdebaac25..97a0c93b48ba0ee6d71a94e7f55d1ad8d56b0091 100644 (file)
@@ -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
index d1368d80e590ac73bc169161c97c4618d8d496a7..ebb9b8e5d864ea915699beb44016973d0466c76a 100644 (file)
@@ -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);
     }