diff options
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Analysis/AliasAnalysis.cpp | 7 | ||||
| -rw-r--r-- | llvm/lib/Analysis/AliasAnalysisEvaluator.cpp | 9 | ||||
| -rw-r--r-- | llvm/lib/Analysis/AliasSetTracker.cpp | 13 | ||||
| -rw-r--r-- | llvm/lib/Analysis/DependenceAnalysis.cpp | 4 | ||||
| -rw-r--r-- | llvm/lib/Analysis/Lint.cpp | 96 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp | 12 | ||||
| -rw-r--r-- | llvm/lib/Transforms/Scalar/LICM.cpp | 2 | 
7 files changed, 71 insertions, 72 deletions
diff --git a/llvm/lib/Analysis/AliasAnalysis.cpp b/llvm/lib/Analysis/AliasAnalysis.cpp index 43f6622a994..4d4a30290f4 100644 --- a/llvm/lib/Analysis/AliasAnalysis.cpp +++ b/llvm/lib/Analysis/AliasAnalysis.cpp @@ -416,13 +416,6 @@ void AliasAnalysis::getAnalysisUsage(AnalysisUsage &AU) const {    AU.addRequired<AliasAnalysis>();         // All AA's chain  } -/// getTypeStoreSize - Return the DataLayout store size for the given type, -/// if known, or a conservative value otherwise. -/// -uint64_t AliasAnalysis::getTypeStoreSize(Type *Ty) { -  return DL ? DL->getTypeStoreSize(Ty) : MemoryLocation::UnknownSize; -} -  /// canBasicBlockModify - Return true if it is possible for execution of the  /// specified basic block to modify the location Loc.  /// diff --git a/llvm/lib/Analysis/AliasAnalysisEvaluator.cpp b/llvm/lib/Analysis/AliasAnalysisEvaluator.cpp index 7114a96c4ec..4540823dbed 100644 --- a/llvm/lib/Analysis/AliasAnalysisEvaluator.cpp +++ b/llvm/lib/Analysis/AliasAnalysisEvaluator.cpp @@ -21,8 +21,10 @@  #include "llvm/ADT/SetVector.h"  #include "llvm/Analysis/AliasAnalysis.h"  #include "llvm/IR/Constants.h" +#include "llvm/IR/DataLayout.h"  #include "llvm/IR/DerivedTypes.h"  #include "llvm/IR/Function.h" +#include "llvm/IR/Module.h"  #include "llvm/IR/InstIterator.h"  #include "llvm/IR/Instructions.h"  #include "llvm/Pass.h" @@ -139,6 +141,7 @@ static inline bool isInterestingPointer(Value *V) {  }  bool AAEval::runOnFunction(Function &F) { +  const DataLayout &DL = F.getParent()->getDataLayout();    AliasAnalysis &AA = getAnalysis<AliasAnalysis>();    SetVector<Value *> Pointers; @@ -188,12 +191,12 @@ bool AAEval::runOnFunction(Function &F) {         I1 != E; ++I1) {      uint64_t I1Size = MemoryLocation::UnknownSize;      Type *I1ElTy = cast<PointerType>((*I1)->getType())->getElementType(); -    if (I1ElTy->isSized()) I1Size = AA.getTypeStoreSize(I1ElTy); +    if (I1ElTy->isSized()) I1Size = DL.getTypeStoreSize(I1ElTy);      for (SetVector<Value *>::iterator I2 = Pointers.begin(); I2 != I1; ++I2) {        uint64_t I2Size = MemoryLocation::UnknownSize;        Type *I2ElTy =cast<PointerType>((*I2)->getType())->getElementType(); -      if (I2ElTy->isSized()) I2Size = AA.getTypeStoreSize(I2ElTy); +      if (I2ElTy->isSized()) I2Size = DL.getTypeStoreSize(I2ElTy);        switch (AA.alias(*I1, I1Size, *I2, I2Size)) {        case NoAlias: @@ -289,7 +292,7 @@ bool AAEval::runOnFunction(Function &F) {           V != Ve; ++V) {        uint64_t Size = MemoryLocation::UnknownSize;        Type *ElTy = cast<PointerType>((*V)->getType())->getElementType(); -      if (ElTy->isSized()) Size = AA.getTypeStoreSize(ElTy); +      if (ElTy->isSized()) Size = DL.getTypeStoreSize(ElTy);        switch (AA.getModRefInfo(*C, *V, Size)) {        case MRI_NoModRef: diff --git a/llvm/lib/Analysis/AliasSetTracker.cpp b/llvm/lib/Analysis/AliasSetTracker.cpp index 05bbe9b227d..f9d3126833b 100644 --- a/llvm/lib/Analysis/AliasSetTracker.cpp +++ b/llvm/lib/Analysis/AliasSetTracker.cpp @@ -17,6 +17,7 @@  #include "llvm/IR/InstIterator.h"  #include "llvm/IR/Instructions.h"  #include "llvm/IR/IntrinsicInst.h" +#include "llvm/IR/Module.h"  #include "llvm/IR/LLVMContext.h"  #include "llvm/IR/Type.h"  #include "llvm/Pass.h" @@ -306,8 +307,9 @@ bool AliasSetTracker::add(LoadInst *LI) {    AliasSet::AccessLattice Access = AliasSet::RefAccess;    bool NewPtr; +  const DataLayout &DL = LI->getModule()->getDataLayout();    AliasSet &AS = addPointer(LI->getOperand(0), -                            AA.getTypeStoreSize(LI->getType()), +                            DL.getTypeStoreSize(LI->getType()),                              AAInfo, Access, NewPtr);    if (LI->isVolatile()) AS.setVolatile();    return NewPtr; @@ -321,9 +323,10 @@ bool AliasSetTracker::add(StoreInst *SI) {    AliasSet::AccessLattice Access = AliasSet::ModAccess;    bool NewPtr; +  const DataLayout &DL = SI->getModule()->getDataLayout();    Value *Val = SI->getOperand(0);    AliasSet &AS = addPointer(SI->getOperand(1), -                            AA.getTypeStoreSize(Val->getType()), +                            DL.getTypeStoreSize(Val->getType()),                              AAInfo, Access, NewPtr);    if (SI->isVolatile()) AS.setVolatile();    return NewPtr; @@ -440,7 +443,8 @@ AliasSetTracker::remove(Value *Ptr, uint64_t Size, const AAMDNodes &AAInfo) {  }  bool AliasSetTracker::remove(LoadInst *LI) { -  uint64_t Size = AA.getTypeStoreSize(LI->getType()); +  const DataLayout &DL = LI->getModule()->getDataLayout(); +  uint64_t Size = DL.getTypeStoreSize(LI->getType());    AAMDNodes AAInfo;    LI->getAAMetadata(AAInfo); @@ -452,7 +456,8 @@ bool AliasSetTracker::remove(LoadInst *LI) {  }  bool AliasSetTracker::remove(StoreInst *SI) { -  uint64_t Size = AA.getTypeStoreSize(SI->getOperand(0)->getType()); +  const DataLayout &DL = SI->getModule()->getDataLayout(); +  uint64_t Size = DL.getTypeStoreSize(SI->getOperand(0)->getType());    AAMDNodes AAInfo;    SI->getAAMetadata(AAInfo); diff --git a/llvm/lib/Analysis/DependenceAnalysis.cpp b/llvm/lib/Analysis/DependenceAnalysis.cpp index 16e42ce6231..4ee82f0f134 100644 --- a/llvm/lib/Analysis/DependenceAnalysis.cpp +++ b/llvm/lib/Analysis/DependenceAnalysis.cpp @@ -631,8 +631,8 @@ static AliasResult underlyingObjectsAlias(AliasAnalysis *AA,                                            const Value *B) {    const Value *AObj = GetUnderlyingObject(A, DL);    const Value *BObj = GetUnderlyingObject(B, DL); -  return AA->alias(AObj, AA->getTypeStoreSize(AObj->getType()), -                   BObj, AA->getTypeStoreSize(BObj->getType())); +  return AA->alias(AObj, DL.getTypeStoreSize(AObj->getType()), +                   BObj, DL.getTypeStoreSize(BObj->getType()));  } diff --git a/llvm/lib/Analysis/Lint.cpp b/llvm/lib/Analysis/Lint.cpp index 0b9308a573a..ca277f56a25 100644 --- a/llvm/lib/Analysis/Lint.cpp +++ b/llvm/lib/Analysis/Lint.cpp @@ -49,6 +49,7 @@  #include "llvm/IR/DataLayout.h"  #include "llvm/IR/Dominators.h"  #include "llvm/IR/Function.h" +#include "llvm/IR/Module.h"  #include "llvm/IR/InstVisitor.h"  #include "llvm/IR/IntrinsicInst.h"  #include "llvm/IR/LegacyPassManager.h" @@ -98,12 +99,13 @@ namespace {      void visitInsertElementInst(InsertElementInst &I);      void visitUnreachableInst(UnreachableInst &I); -    Value *findValue(Value *V, const DataLayout &DL, bool OffsetOk) const; -    Value *findValueImpl(Value *V, const DataLayout &DL, bool OffsetOk, +    Value *findValue(Value *V, bool OffsetOk) const; +    Value *findValueImpl(Value *V, bool OffsetOk,                           SmallPtrSetImpl<Value *> &Visited) const;    public:      Module *Mod; +    const DataLayout *DL;      AliasAnalysis *AA;      AssumptionCache *AC;      DominatorTree *DT; @@ -178,6 +180,7 @@ INITIALIZE_PASS_END(Lint, "lint", "Statically lint-checks LLVM IR",  //  bool Lint::runOnFunction(Function &F) {    Mod = F.getParent(); +  DL = &F.getParent()->getDataLayout();    AA = &getAnalysis<AliasAnalysis>();    AC = &getAnalysis<AssumptionCacheTracker>().getAssumptionCache(F);    DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree(); @@ -200,12 +203,11 @@ void Lint::visitFunction(Function &F) {  void Lint::visitCallSite(CallSite CS) {    Instruction &I = *CS.getInstruction();    Value *Callee = CS.getCalledValue(); -  const DataLayout &DL = CS->getModule()->getDataLayout();    visitMemoryReference(I, Callee, MemoryLocation::UnknownSize, 0, nullptr,                         MemRef::Callee); -  if (Function *F = dyn_cast<Function>(findValue(Callee, DL, +  if (Function *F = dyn_cast<Function>(findValue(Callee,                                                   /*OffsetOk=*/false))) {      Assert(CS.getCallingConv() == F->getCallingConv(),             "Undefined behavior: Caller and callee calling convention differ", @@ -253,8 +255,8 @@ void Lint::visitCallSite(CallSite CS) {          if (Formal->hasStructRetAttr() && Actual->getType()->isPointerTy()) {            Type *Ty =              cast<PointerType>(Formal->getType())->getElementType(); -          visitMemoryReference(I, Actual, AA->getTypeStoreSize(Ty), -                               DL.getABITypeAlignment(Ty), Ty, +          visitMemoryReference(I, Actual, DL->getTypeStoreSize(Ty), +                               DL->getABITypeAlignment(Ty), Ty,                                 MemRef::Read | MemRef::Write);          }        } @@ -264,7 +266,7 @@ void Lint::visitCallSite(CallSite CS) {    if (CS.isCall() && cast<CallInst>(CS.getInstruction())->isTailCall())      for (CallSite::arg_iterator AI = CS.arg_begin(), AE = CS.arg_end();           AI != AE; ++AI) { -      Value *Obj = findValue(*AI, DL, /*OffsetOk=*/true); +      Value *Obj = findValue(*AI, /*OffsetOk=*/true);        Assert(!isa<AllocaInst>(Obj),               "Undefined behavior: Call with \"tail\" keyword references "               "alloca", @@ -291,7 +293,7 @@ void Lint::visitCallSite(CallSite CS) {        // overlap is not distinguished from the case where nothing is known.        uint64_t Size = 0;        if (const ConstantInt *Len = -              dyn_cast<ConstantInt>(findValue(MCI->getLength(), DL, +              dyn_cast<ConstantInt>(findValue(MCI->getLength(),                                                /*OffsetOk=*/false)))          if (Len->getValue().isIntN(32))            Size = Len->getValue().getZExtValue(); @@ -367,8 +369,7 @@ void Lint::visitReturnInst(ReturnInst &I) {           "Unusual: Return statement in function with noreturn attribute", &I);    if (Value *V = I.getReturnValue()) { -    Value *Obj = -        findValue(V, F->getParent()->getDataLayout(), /*OffsetOk=*/true); +    Value *Obj = findValue(V, /*OffsetOk=*/true);      Assert(!isa<AllocaInst>(Obj), "Unusual: Returning alloca value", &I);    }  } @@ -383,8 +384,7 @@ void Lint::visitMemoryReference(Instruction &I,    if (Size == 0)      return; -  Value *UnderlyingObject = -      findValue(Ptr, I.getModule()->getDataLayout(), /*OffsetOk=*/true); +  Value *UnderlyingObject = findValue(Ptr, /*OffsetOk=*/true);    Assert(!isa<ConstantPointerNull>(UnderlyingObject),           "Undefined behavior: Null pointer dereference", &I);    Assert(!isa<UndefValue>(UnderlyingObject), @@ -423,9 +423,8 @@ void Lint::visitMemoryReference(Instruction &I,    // Check for buffer overflows and misalignment.    // Only handles memory references that read/write something simple like an    // alloca instruction or a global variable. -  auto &DL = I.getModule()->getDataLayout();    int64_t Offset = 0; -  if (Value *Base = GetPointerBaseWithConstantOffset(Ptr, Offset, DL)) { +  if (Value *Base = GetPointerBaseWithConstantOffset(Ptr, Offset, *DL)) {      // OK, so the access is to a constant offset from Ptr.  Check that Ptr is      // something we can handle and if so extract the size of this base object      // along with its alignment. @@ -435,20 +434,20 @@ void Lint::visitMemoryReference(Instruction &I,      if (AllocaInst *AI = dyn_cast<AllocaInst>(Base)) {        Type *ATy = AI->getAllocatedType();        if (!AI->isArrayAllocation() && ATy->isSized()) -        BaseSize = DL.getTypeAllocSize(ATy); +        BaseSize = DL->getTypeAllocSize(ATy);        BaseAlign = AI->getAlignment();        if (BaseAlign == 0 && ATy->isSized()) -        BaseAlign = DL.getABITypeAlignment(ATy); +        BaseAlign = DL->getABITypeAlignment(ATy);      } else if (GlobalVariable *GV = dyn_cast<GlobalVariable>(Base)) {        // If the global may be defined differently in another compilation unit        // then don't warn about funky memory accesses.        if (GV->hasDefinitiveInitializer()) {          Type *GTy = GV->getType()->getElementType();          if (GTy->isSized()) -          BaseSize = DL.getTypeAllocSize(GTy); +          BaseSize = DL->getTypeAllocSize(GTy);          BaseAlign = GV->getAlignment();          if (BaseAlign == 0 && GTy->isSized()) -          BaseAlign = DL.getABITypeAlignment(GTy); +          BaseAlign = DL->getABITypeAlignment(GTy);        }      } @@ -462,7 +461,7 @@ void Lint::visitMemoryReference(Instruction &I,      // Accesses that say that the memory is more aligned than it is are not      // defined.      if (Align == 0 && Ty && Ty->isSized()) -      Align = DL.getABITypeAlignment(Ty); +      Align = DL->getABITypeAlignment(Ty);      Assert(!BaseAlign || Align <= MinAlign(BaseAlign, Offset),             "Undefined behavior: Memory reference address is misaligned", &I);    } @@ -470,13 +469,13 @@ void Lint::visitMemoryReference(Instruction &I,  void Lint::visitLoadInst(LoadInst &I) {    visitMemoryReference(I, I.getPointerOperand(), -                       AA->getTypeStoreSize(I.getType()), I.getAlignment(), +                       DL->getTypeStoreSize(I.getType()), I.getAlignment(),                         I.getType(), MemRef::Read);  }  void Lint::visitStoreInst(StoreInst &I) {    visitMemoryReference(I, I.getPointerOperand(), -                       AA->getTypeStoreSize(I.getOperand(0)->getType()), +                       DL->getTypeStoreSize(I.getOperand(0)->getType()),                         I.getAlignment(),                         I.getOperand(0)->getType(), MemRef::Write);  } @@ -492,23 +491,22 @@ void Lint::visitSub(BinaryOperator &I) {  }  void Lint::visitLShr(BinaryOperator &I) { -  if (ConstantInt *CI = dyn_cast<ConstantInt>( -          findValue(I.getOperand(1), I.getModule()->getDataLayout(), -                    /*OffsetOk=*/false))) +  if (ConstantInt *CI = dyn_cast<ConstantInt>(findValue(I.getOperand(1), +                                                        /*OffsetOk=*/false)))      Assert(CI->getValue().ult(cast<IntegerType>(I.getType())->getBitWidth()),             "Undefined result: Shift count out of range", &I);  }  void Lint::visitAShr(BinaryOperator &I) { -  if (ConstantInt *CI = dyn_cast<ConstantInt>(findValue( -          I.getOperand(1), I.getModule()->getDataLayout(), /*OffsetOk=*/false))) +  if (ConstantInt *CI = +          dyn_cast<ConstantInt>(findValue(I.getOperand(1), /*OffsetOk=*/false)))      Assert(CI->getValue().ult(cast<IntegerType>(I.getType())->getBitWidth()),             "Undefined result: Shift count out of range", &I);  }  void Lint::visitShl(BinaryOperator &I) { -  if (ConstantInt *CI = dyn_cast<ConstantInt>(findValue( -          I.getOperand(1), I.getModule()->getDataLayout(), /*OffsetOk=*/false))) +  if (ConstantInt *CI = +          dyn_cast<ConstantInt>(findValue(I.getOperand(1), /*OffsetOk=*/false)))      Assert(CI->getValue().ult(cast<IntegerType>(I.getType())->getBitWidth()),             "Undefined result: Shift count out of range", &I);  } @@ -777,17 +775,15 @@ void Lint::visitIndirectBrInst(IndirectBrInst &I) {  }  void Lint::visitExtractElementInst(ExtractElementInst &I) { -  if (ConstantInt *CI = dyn_cast<ConstantInt>( -          findValue(I.getIndexOperand(), I.getModule()->getDataLayout(), -                    /*OffsetOk=*/false))) +  if (ConstantInt *CI = dyn_cast<ConstantInt>(findValue(I.getIndexOperand(), +                                                        /*OffsetOk=*/false)))      Assert(CI->getValue().ult(I.getVectorOperandType()->getNumElements()),             "Undefined result: extractelement index out of range", &I);  }  void Lint::visitInsertElementInst(InsertElementInst &I) { -  if (ConstantInt *CI = dyn_cast<ConstantInt>( -          findValue(I.getOperand(2), I.getModule()->getDataLayout(), -                    /*OffsetOk=*/false))) +  if (ConstantInt *CI = dyn_cast<ConstantInt>(findValue(I.getOperand(2), +                                                        /*OffsetOk=*/false)))      Assert(CI->getValue().ult(I.getType()->getNumElements()),             "Undefined result: insertelement index out of range", &I);  } @@ -808,13 +804,13 @@ void Lint::visitUnreachableInst(UnreachableInst &I) {  /// Most analysis passes don't require this logic, because instcombine  /// will simplify most of these kinds of things away. But it's a goal of  /// this Lint pass to be useful even on non-optimized IR. -Value *Lint::findValue(Value *V, const DataLayout &DL, bool OffsetOk) const { +Value *Lint::findValue(Value *V, bool OffsetOk) const {    SmallPtrSet<Value *, 4> Visited; -  return findValueImpl(V, DL, OffsetOk, Visited); +  return findValueImpl(V, OffsetOk, Visited);  }  /// findValueImpl - Implementation helper for findValue. -Value *Lint::findValueImpl(Value *V, const DataLayout &DL, bool OffsetOk, +Value *Lint::findValueImpl(Value *V, bool OffsetOk,                             SmallPtrSetImpl<Value *> &Visited) const {    // Detect self-referential values.    if (!Visited.insert(V).second) @@ -825,7 +821,7 @@ Value *Lint::findValueImpl(Value *V, const DataLayout &DL, bool OffsetOk,    // TODO: Look through eliminable cast pairs.    // TODO: Look through calls with unique return values.    // TODO: Look through vector insert/extract/shuffle. -  V = OffsetOk ? GetUnderlyingObject(V, DL) : V->stripPointerCasts(); +  V = OffsetOk ? GetUnderlyingObject(V, *DL) : V->stripPointerCasts();    if (LoadInst *L = dyn_cast<LoadInst>(V)) {      BasicBlock::iterator BBI = L;      BasicBlock *BB = L->getParent(); @@ -835,7 +831,7 @@ Value *Lint::findValueImpl(Value *V, const DataLayout &DL, bool OffsetOk,          break;        if (Value *U = FindAvailableLoadedValue(L->getPointerOperand(),                                                BB, BBI, 6, AA)) -        return findValueImpl(U, DL, OffsetOk, Visited); +        return findValueImpl(U, OffsetOk, Visited);        if (BBI != BB->begin()) break;        BB = BB->getUniquePredecessor();        if (!BB) break; @@ -844,38 +840,38 @@ Value *Lint::findValueImpl(Value *V, const DataLayout &DL, bool OffsetOk,    } else if (PHINode *PN = dyn_cast<PHINode>(V)) {      if (Value *W = PN->hasConstantValue())        if (W != V) -        return findValueImpl(W, DL, OffsetOk, Visited); +        return findValueImpl(W, OffsetOk, Visited);    } else if (CastInst *CI = dyn_cast<CastInst>(V)) { -    if (CI->isNoopCast(DL)) -      return findValueImpl(CI->getOperand(0), DL, OffsetOk, Visited); +    if (CI->isNoopCast(*DL)) +      return findValueImpl(CI->getOperand(0), OffsetOk, Visited);    } else if (ExtractValueInst *Ex = dyn_cast<ExtractValueInst>(V)) {      if (Value *W = FindInsertedValue(Ex->getAggregateOperand(),                                       Ex->getIndices()))        if (W != V) -        return findValueImpl(W, DL, OffsetOk, Visited); +        return findValueImpl(W, OffsetOk, Visited);    } else if (ConstantExpr *CE = dyn_cast<ConstantExpr>(V)) {      // Same as above, but for ConstantExpr instead of Instruction.      if (Instruction::isCast(CE->getOpcode())) {        if (CastInst::isNoopCast(Instruction::CastOps(CE->getOpcode()),                                 CE->getOperand(0)->getType(), CE->getType(), -                               DL.getIntPtrType(V->getType()))) -        return findValueImpl(CE->getOperand(0), DL, OffsetOk, Visited); +                               DL->getIntPtrType(V->getType()))) +        return findValueImpl(CE->getOperand(0), OffsetOk, Visited);      } else if (CE->getOpcode() == Instruction::ExtractValue) {        ArrayRef<unsigned> Indices = CE->getIndices();        if (Value *W = FindInsertedValue(CE->getOperand(0), Indices))          if (W != V) -          return findValueImpl(W, DL, OffsetOk, Visited); +          return findValueImpl(W, OffsetOk, Visited);      }    }    // As a last resort, try SimplifyInstruction or constant folding.    if (Instruction *Inst = dyn_cast<Instruction>(V)) { -    if (Value *W = SimplifyInstruction(Inst, DL, TLI, DT, AC)) -      return findValueImpl(W, DL, OffsetOk, Visited); +    if (Value *W = SimplifyInstruction(Inst, *DL, TLI, DT, AC)) +      return findValueImpl(W, OffsetOk, Visited);    } else if (ConstantExpr *CE = dyn_cast<ConstantExpr>(V)) { -    if (Value *W = ConstantFoldConstantExpression(CE, DL, TLI)) +    if (Value *W = ConstantFoldConstantExpression(CE, *DL, TLI))        if (W != V) -        return findValueImpl(W, DL, OffsetOk, Visited); +        return findValueImpl(W, OffsetOk, Visited);    }    return V; diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp index b103910e8e5..99a74cdb8e6 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp @@ -2953,8 +2953,8 @@ void SelectionDAGBuilder::visitLoad(const LoadInst &I) {    if (isVolatile || NumValues > MaxParallelChains)      // Serialize volatile loads with other side effects.      Root = getRoot(); -  else if (AA->pointsToConstantMemory( -               MemoryLocation(SV, AA->getTypeStoreSize(Ty), AAInfo))) { +  else if (AA->pointsToConstantMemory(MemoryLocation( +               SV, DAG.getDataLayout().getTypeStoreSize(Ty), AAInfo))) {      // Do not serialize (non-volatile) loads of constant memory with anything.      Root = DAG.getEntryNode();      ConstantMemory = true; @@ -3203,7 +3203,8 @@ void SelectionDAGBuilder::visitMaskedLoad(const CallInst &I) {    SDValue InChain = DAG.getRoot();    if (AA->pointsToConstantMemory(MemoryLocation( -          PtrOperand, AA->getTypeStoreSize(I.getType()), AAInfo))) { +          PtrOperand, DAG.getDataLayout().getTypeStoreSize(I.getType()), +          AAInfo))) {      // Do not serialize (non-volatile) loads of constant memory with anything.      InChain = DAG.getEntryNode();    } @@ -3246,8 +3247,9 @@ void SelectionDAGBuilder::visitMaskedGather(const CallInst &I) {    bool UniformBase = getUniformBase(BasePtr, Base, Index, this);    bool ConstantMemory = false;    if (UniformBase && -      AA->pointsToConstantMemory( -          MemoryLocation(BasePtr, AA->getTypeStoreSize(I.getType()), AAInfo))) { +      AA->pointsToConstantMemory(MemoryLocation( +          BasePtr, DAG.getDataLayout().getTypeStoreSize(I.getType()), +          AAInfo))) {      // Do not serialize (non-volatile) loads of constant memory with anything.      Root = DAG.getEntryNode();      ConstantMemory = true; diff --git a/llvm/lib/Transforms/Scalar/LICM.cpp b/llvm/lib/Transforms/Scalar/LICM.cpp index 8f3839f40bc..bcc05c38a04 100644 --- a/llvm/lib/Transforms/Scalar/LICM.cpp +++ b/llvm/lib/Transforms/Scalar/LICM.cpp @@ -445,7 +445,7 @@ bool canSinkOrHoistInst(Instruction &I, AliasAnalysis *AA, DominatorTree *DT,      // Don't hoist loads which have may-aliased stores in loop.      uint64_t Size = 0;      if (LI->getType()->isSized()) -      Size = AA->getTypeStoreSize(LI->getType()); +      Size = I.getModule()->getDataLayout().getTypeStoreSize(LI->getType());      AAMDNodes AAInfo;      LI->getAAMetadata(AAInfo);  | 

