From 13a16083abcdacf2ee44ae95b084f87937ea9ace Mon Sep 17 00:00:00 2001 From: Cameron Zwarich Date: Tue, 24 May 2011 06:00:08 +0000 Subject: [PATCH] Clean up the lazy initialization of DIBuilder a bit. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@131956 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Transforms/Utils/SSAUpdater.h | 4 ++-- lib/Transforms/Scalar/LICM.cpp | 3 +-- lib/Transforms/Scalar/ScalarReplAggregates.cpp | 2 ++ lib/Transforms/Utils/SSAUpdater.cpp | 12 +++--------- 4 files changed, 8 insertions(+), 13 deletions(-) diff --git a/include/llvm/Transforms/Utils/SSAUpdater.h b/include/llvm/Transforms/Utils/SSAUpdater.h index 707862f5886..51c8467d22f 100644 --- a/include/llvm/Transforms/Utils/SSAUpdater.h +++ b/include/llvm/Transforms/Utils/SSAUpdater.h @@ -123,10 +123,10 @@ class LoadAndStorePromoter { protected: SSAUpdater &SSA; DbgDeclareInst *DDI; - DIBuilder *&DIB; + DIBuilder *DIB; public: LoadAndStorePromoter(const SmallVectorImpl &Insts, - SSAUpdater &S, DbgDeclareInst *DDI, DIBuilder *&DIB, + SSAUpdater &S, DbgDeclareInst *DDI, DIBuilder *DIB, StringRef Name = StringRef()); virtual ~LoadAndStorePromoter() {} diff --git a/lib/Transforms/Scalar/LICM.cpp b/lib/Transforms/Scalar/LICM.cpp index f706cc2a55b..d42d4ff837b 100644 --- a/lib/Transforms/Scalar/LICM.cpp +++ b/lib/Transforms/Scalar/LICM.cpp @@ -602,13 +602,12 @@ namespace { SmallPtrSet &PointerMustAliases; SmallVectorImpl &LoopExitBlocks; AliasSetTracker * - DIBuilder *DIB; // Only passed to LoadAndStorePromoter. public: LoopPromoter(Value *SP, const SmallVectorImpl &Insts, SSAUpdater &S, SmallPtrSet &PMA, SmallVectorImpl &LEB, AliasSetTracker &ast) - : LoadAndStorePromoter(Insts, S, 0, DIB), SomePtr(SP), + : LoadAndStorePromoter(Insts, S, 0, 0), SomePtr(SP), PointerMustAliases(PMA), LoopExitBlocks(LEB), AST(ast) {} virtual bool isInstInList(Instruction *I, diff --git a/lib/Transforms/Scalar/ScalarReplAggregates.cpp b/lib/Transforms/Scalar/ScalarReplAggregates.cpp index ebcb88c0157..eb683b8af80 100644 --- a/lib/Transforms/Scalar/ScalarReplAggregates.cpp +++ b/lib/Transforms/Scalar/ScalarReplAggregates.cpp @@ -1367,6 +1367,8 @@ bool SROA::performPromotion(Function &F) { Insts.push_back(cast(*UI)); DbgDeclareInst *DDI = FindAllocaDbgDeclare(AI); + if (DDI && !DIB) + DIB = new DIBuilder(*AI->getParent()->getParent()->getParent()); AllocaPromoter(Insts, SSA, DDI, DIB).run(AI, Insts); Insts.clear(); } diff --git a/lib/Transforms/Utils/SSAUpdater.cpp b/lib/Transforms/Utils/SSAUpdater.cpp index 09f0a50cb03..b336194a35e 100644 --- a/lib/Transforms/Utils/SSAUpdater.cpp +++ b/lib/Transforms/Utils/SSAUpdater.cpp @@ -358,7 +358,7 @@ Value *SSAUpdater::GetValueAtEndOfBlockInternal(BasicBlock *BB) { LoadAndStorePromoter:: LoadAndStorePromoter(const SmallVectorImpl &Insts, - SSAUpdater &S, DbgDeclareInst *DD, DIBuilder *&DB, + SSAUpdater &S, DbgDeclareInst *DD, DIBuilder *DB, StringRef BaseName) : SSA(S), DDI(DD), DIB(DB) { if (Insts.empty()) return; @@ -407,11 +407,8 @@ run(const SmallVectorImpl &Insts) const { if (BlockUses.size() == 1) { // If it is a store, it is a trivial def of the value in the block. if (StoreInst *SI = dyn_cast(User)) { - if (DDI) { - if (!DIB) - DIB = new DIBuilder(*SI->getParent()->getParent()->getParent()); + if (DDI) ConvertDebugDeclareToDebugValue(DDI, SI, *DIB); - } SSA.AddAvailableValue(BB, SI->getOperand(0)); } else // Otherwise it is a load, queue it to rewrite as a live-in load. @@ -466,11 +463,8 @@ run(const SmallVectorImpl &Insts) const { // If this is a store to an unrelated pointer, ignore it. if (!isInstInList(SI, Insts)) continue; - if (DDI) { - if (!DIB) - DIB = new DIBuilder(*SI->getParent()->getParent()->getParent()); + if (DDI) ConvertDebugDeclareToDebugValue(DDI, SI, *DIB); - } // Remember that this is the active value in the block. StoredValue = SI->getOperand(0);