diff options
author | Chris Lattner <sabre@nondot.org> | 2010-01-27 02:12:20 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2010-01-27 02:12:20 +0000 |
commit | 3511c70d180f662c8b2b8506d9c6b45a24720098 (patch) | |
tree | 4943b78b0e53b2c872af9407bb7fea97b46b84a5 /lib/Transforms/Utils/PromoteMemoryToRegister.cpp | |
parent | 5b718e3e4d0512c5099a079b1ad59de1cde21bab (diff) |
some cleanups.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@94649 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/Utils/PromoteMemoryToRegister.cpp')
-rw-r--r-- | lib/Transforms/Utils/PromoteMemoryToRegister.cpp | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/lib/Transforms/Utils/PromoteMemoryToRegister.cpp b/lib/Transforms/Utils/PromoteMemoryToRegister.cpp index af738c784c..c7b998c553 100644 --- a/lib/Transforms/Utils/PromoteMemoryToRegister.cpp +++ b/lib/Transforms/Utils/PromoteMemoryToRegister.cpp @@ -85,8 +85,9 @@ bool llvm::isAllocaPromotable(const AllocaInst *AI) { return true; } -/// Finds the llvm.dbg.declare intrinsic describing V, if any. -static DbgDeclareInst *findDbgDeclare(Value *V) { +/// FindAllocaDbgDeclare - Finds the llvm.dbg.declare intrinsic describing the +/// alloca 'V', if any. +static DbgDeclareInst *FindAllocaDbgDeclare(Value *V) { if (MDNode *DebugNode = MDNode::getIfExists(V->getContext(), &V, 1)) for (Value::use_iterator UI = DebugNode->use_begin(), E = DebugNode->use_end(); UI != E; ++UI) @@ -263,8 +264,7 @@ namespace { LargeBlockInfo &LBI); void PromoteSingleBlockAlloca(AllocaInst *AI, AllocaInfo &Info, LargeBlockInfo &LBI); - void ConvertDebugDeclareToDebugValue(DbgDeclareInst *DDI, StoreInst *SI, - uint64_t Offset); + void ConvertDebugDeclareToDebugValue(DbgDeclareInst *DDI, StoreInst *SI); void RenamePass(BasicBlock *BB, BasicBlock *Pred, @@ -328,7 +328,7 @@ namespace { } } - DbgDeclare = findDbgDeclare(AI); + DbgDeclare = FindAllocaDbgDeclare(AI); } }; } // end of anonymous namespace @@ -374,7 +374,8 @@ void PromoteMem2Reg::run() { // Finally, after the scan, check to see if the store is all that is left. if (Info.UsingBlocks.empty()) { // Record debuginfo for the store before removing it. - ConvertDebugDeclareToDebugValue(Info.DbgDeclare, Info.OnlyStore, 0); + if (DbgDeclareInst *DDI = Info.DbgDeclare) + ConvertDebugDeclareToDebugValue(DDI, Info.OnlyStore); // Remove the (now dead) store and alloca. Info.OnlyStore->eraseFromParent(); LBI.deleteValue(Info.OnlyStore); @@ -404,7 +405,8 @@ void PromoteMem2Reg::run() { while (!AI->use_empty()) { StoreInst *SI = cast<StoreInst>(AI->use_back()); // Record debuginfo for the store before removing it. - ConvertDebugDeclareToDebugValue(Info.DbgDeclare, SI, 0); + if (DbgDeclareInst *DDI = Info.DbgDeclare) + ConvertDebugDeclareToDebugValue(DDI, SI); SI->eraseFromParent(); LBI.deleteValue(SI); } @@ -872,19 +874,17 @@ void PromoteMem2Reg::PromoteSingleBlockAlloca(AllocaInst *AI, AllocaInfo &Info, // Inserts a llvm.dbg.value instrinsic before the stores to an alloca'd value // that has an associated llvm.dbg.decl intrinsic. void PromoteMem2Reg::ConvertDebugDeclareToDebugValue(DbgDeclareInst *DDI, - StoreInst *SI, - uint64_t Offset) { - if (!DDI) - return; - + StoreInst *SI) { DIVariable DIVar(DDI->getVariable()); if (!DIVar.getNode()) return; if (!DIF) DIF = new DIFactory(*SI->getParent()->getParent()->getParent()); - Instruction *DbgVal = DIF->InsertDbgValueIntrinsic(SI->getOperand(0), Offset, + Instruction *DbgVal = DIF->InsertDbgValueIntrinsic(SI->getOperand(0), 0, DIVar, SI); + + // Propagate any debug metadata from the store onto the dbg.value. if (MDNode *SIMD = SI->getMetadata("dbg")) DbgVal->setMetadata("dbg", SIMD); } @@ -1002,7 +1002,8 @@ NextIteration: // what value were we writing? IncomingVals[ai->second] = SI->getOperand(0); // Record debuginfo for the store before removing it. - ConvertDebugDeclareToDebugValue(AllocaDbgDeclares[ai->second], SI, 0); + if (DbgDeclareInst *DDI = AllocaDbgDeclares[ai->second]) + ConvertDebugDeclareToDebugValue(DDI, SI); BB->getInstList().erase(SI); } } |