diff options
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/Scalar/SROA.cpp | 4 | ||||
| -rw-r--r-- | llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp | 6 | ||||
| -rw-r--r-- | llvm/lib/Transforms/Utils/Local.cpp | 39 | 
3 files changed, 24 insertions, 25 deletions
diff --git a/llvm/lib/Transforms/Scalar/SROA.cpp b/llvm/lib/Transforms/Scalar/SROA.cpp index ada44cd5d28..6c01826a064 100644 --- a/llvm/lib/Transforms/Scalar/SROA.cpp +++ b/llvm/lib/Transforms/Scalar/SROA.cpp @@ -891,8 +891,8 @@ public:          continue;        }        Instruction *DbgVal = -        DIB.insertDbgValueIntrinsic(Arg, 0, DIVariable(DVI->getVariable()), -                                     Inst); +          DIB.insertDbgValueIntrinsic(Arg, 0, DIVariable(DVI->getVariable()), +                                      DIExpression(DVI->getExpression()), Inst);        DbgVal->setDebugLoc(DVI->getDebugLoc());      }    } diff --git a/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp b/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp index eb8d2a6f73f..c6d6ec73761 100644 --- a/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp +++ b/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp @@ -1124,9 +1124,9 @@ public:        } else {          continue;        } -      Instruction *DbgVal = -        DIB->insertDbgValueIntrinsic(Arg, 0, DIVariable(DVI->getVariable()), -                                     Inst); +      Instruction *DbgVal = DIB->insertDbgValueIntrinsic( +          Arg, 0, DIVariable(DVI->getVariable()), +          DIExpression(DVI->getExpression()), Inst);        DbgVal->setDebugLoc(DVI->getDebugLoc());      }    } diff --git a/llvm/lib/Transforms/Utils/Local.cpp b/llvm/lib/Transforms/Utils/Local.cpp index e4ce699ecb4..69c9346c027 100644 --- a/llvm/lib/Transforms/Utils/Local.cpp +++ b/llvm/lib/Transforms/Utils/Local.cpp @@ -993,6 +993,7 @@ static bool LdStHasDebugValue(DIVariable &DIVar, Instruction *I) {  bool llvm::ConvertDebugDeclareToDebugValue(DbgDeclareInst *DDI,                                             StoreInst *SI, DIBuilder &Builder) {    DIVariable DIVar(DDI->getVariable()); +  DIExpression DIExpr(DDI->getExpression());    assert((!DIVar || DIVar.isVariable()) &&           "Variable in DbgDeclareInst should be either null or a DIVariable.");    if (!DIVar) @@ -1010,9 +1011,10 @@ bool llvm::ConvertDebugDeclareToDebugValue(DbgDeclareInst *DDI,    if (SExtInst *SExt = dyn_cast<SExtInst>(SI->getOperand(0)))      ExtendedArg = dyn_cast<Argument>(SExt->getOperand(0));    if (ExtendedArg) -    DbgVal = Builder.insertDbgValueIntrinsic(ExtendedArg, 0, DIVar, SI); +    DbgVal = Builder.insertDbgValueIntrinsic(ExtendedArg, 0, DIVar, DIExpr, SI);    else -    DbgVal = Builder.insertDbgValueIntrinsic(SI->getOperand(0), 0, DIVar, SI); +    DbgVal = Builder.insertDbgValueIntrinsic(SI->getOperand(0), 0, DIVar, +                                             DIExpr, SI);    DbgVal->setDebugLoc(DDI->getDebugLoc());    return true;  } @@ -1022,6 +1024,7 @@ bool llvm::ConvertDebugDeclareToDebugValue(DbgDeclareInst *DDI,  bool llvm::ConvertDebugDeclareToDebugValue(DbgDeclareInst *DDI,                                             LoadInst *LI, DIBuilder &Builder) {    DIVariable DIVar(DDI->getVariable()); +  DIExpression DIExpr(DDI->getExpression());    assert((!DIVar || DIVar.isVariable()) &&           "Variable in DbgDeclareInst should be either null or a DIVariable.");    if (!DIVar) @@ -1031,8 +1034,7 @@ bool llvm::ConvertDebugDeclareToDebugValue(DbgDeclareInst *DDI,      return true;    Instruction *DbgVal = -    Builder.insertDbgValueIntrinsic(LI->getOperand(0), 0, -                                    DIVar, LI); +      Builder.insertDbgValueIntrinsic(LI->getOperand(0), 0, DIVar, DIExpr, LI);    DbgVal->setDebugLoc(DDI->getDebugLoc());    return true;  } @@ -1075,11 +1077,11 @@ bool llvm::LowerDbgDeclare(Function &F) {  	  // This is a call by-value or some other instruction that  	  // takes a pointer to the variable. Insert a *value*  	  // intrinsic that describes the alloca. -	  auto DbgVal = -	    DIB.insertDbgValueIntrinsic(AI, 0, -					DIVariable(DDI->getVariable()), CI); -	  DbgVal->setDebugLoc(DDI->getDebugLoc()); -	} +          auto DbgVal = DIB.insertDbgValueIntrinsic( +              AI, 0, DIVariable(DDI->getVariable()), +              DIExpression(DDI->getExpression()), CI); +          DbgVal->setDebugLoc(DDI->getDebugLoc()); +        }        DDI->eraseFromParent();      }    } @@ -1103,6 +1105,7 @@ bool llvm::replaceDbgDeclareForAlloca(AllocaInst *AI, Value *NewAllocaAddress,    if (!DDI)      return false;    DIVariable DIVar(DDI->getVariable()); +  DIExpression DIExpr(DDI->getExpression());    assert((!DIVar || DIVar.isVariable()) &&           "Variable in DbgDeclareInst should be either null or a DIVariable.");    if (!DIVar) @@ -1113,23 +1116,19 @@ bool llvm::replaceDbgDeclareForAlloca(AllocaInst *AI, Value *NewAllocaAddress,    // will take a value storing address of the memory for variable, not    // alloca itself.    Type *Int64Ty = Type::getInt64Ty(AI->getContext()); -  SmallVector<Value*, 4> NewDIVarAddress; -  if (DIVar.hasComplexAddress()) { -    for (unsigned i = 0, n = DIVar.getNumAddrElements(); i < n; ++i) { -      NewDIVarAddress.push_back( -          ConstantInt::get(Int64Ty, DIVar.getAddrElement(i))); +  SmallVector<Value *, 4> NewDIExpr; +  if (DIExpr) { +    for (unsigned i = 0, n = DIExpr.getNumElements(); i < n; ++i) { +      NewDIExpr.push_back(ConstantInt::get(Int64Ty, DIExpr.getElement(i)));      }    } -  NewDIVarAddress.push_back(ConstantInt::get(Int64Ty, DIBuilder::OpDeref)); -  DIVariable NewDIVar = Builder.createComplexVariable( -      DIVar.getTag(), DIVar.getContext(), DIVar.getName(), -      DIVar.getFile(), DIVar.getLineNumber(), DIVar.getType(), -      NewDIVarAddress, DIVar.getArgNumber()); +  NewDIExpr.push_back(ConstantInt::get(Int64Ty, dwarf::DW_OP_deref));    // Insert llvm.dbg.declare in the same basic block as the original alloca,    // and remove old llvm.dbg.declare.    BasicBlock *BB = AI->getParent(); -  Builder.insertDeclare(NewAllocaAddress, NewDIVar, BB); +  Builder.insertDeclare(NewAllocaAddress, DIVar, +                        Builder.createExpression(NewDIExpr), BB);    DDI->eraseFromParent();    return true;  }  | 

