[llvm-commits] [llvm] r136953 - in /llvm/trunk: include/llvm/Analysis/DebugInfo.h lib/Analysis/DebugInfo.cpp lib/CodeGen/AsmPrinter/DwarfDebug.cpp lib/Transforms/Utils/InlineFunction.cpp

Devang Patel dpatel at apple.com
Wed Aug 10 14:53:33 PDT 2011


Chandler,

I updated LiveDebugVariable to speedup compile time (r 137250) and reapplied this patch in r137253. Please try again and let me know if you see compile time slowdowns.
-
Devang

On Aug 4, 2011, at 5:51 PM, Chandler Carruth wrote:

> Author: chandlerc
> Date: Thu Aug  4 19:51:31 2011
> New Revision: 136953
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=136953&view=rev
> Log:
> Temporarily revert r135528 which distinguishes between two copies of one
> inlined variable, based on the discussion in PR10542.
> 
> This explodes the runtime of several passes down the pipeline due to
> a large number of "copies" remaining live across a large function. This
> only shows up with both debug and opt, but when it does it creates
> a many-minute compile when self-hosting LLVM+Clang. There are several
> other cases that show these types of regressions.
> 
> All of this is tracked in PR10542, and progress is being made on fixing
> the issue. Once its addressed, the re-instated, but until then this
> restores the performance for self-hosting and other opt+debug builds.
> 
> Devang, let me know if this causes any trouble, or impedes fixing it in
> any way, and thanks for working on this!
> 
> Modified:
>    llvm/trunk/include/llvm/Analysis/DebugInfo.h
>    llvm/trunk/lib/Analysis/DebugInfo.cpp
>    llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
>    llvm/trunk/lib/Transforms/Utils/InlineFunction.cpp
> 
> Modified: llvm/trunk/include/llvm/Analysis/DebugInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/DebugInfo.h?rev=136953&r1=136952&r2=136953&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Analysis/DebugInfo.h (original)
> +++ llvm/trunk/include/llvm/Analysis/DebugInfo.h Thu Aug  4 19:51:31 2011
> @@ -727,9 +727,6 @@
>   DIVariable createInlinedVariable(MDNode *DV, MDNode *InlinedScope,
>                                    LLVMContext &VMContext);
> 
> -  /// cleanseInlinedVariable - Remove inlined scope from the variable.
> -  DIVariable cleanseInlinedVariable(MDNode *DV, LLVMContext &VMContext);
> -
>   class DebugInfoFinder {
>   public:
>     /// processModule - Process entire module and collect debug info
> 
> Modified: llvm/trunk/lib/Analysis/DebugInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/DebugInfo.cpp?rev=136953&r1=136952&r2=136953&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Analysis/DebugInfo.cpp (original)
> +++ llvm/trunk/lib/Analysis/DebugInfo.cpp Thu Aug  4 19:51:31 2011
> @@ -782,17 +782,6 @@
>   return DIVariable(MDNode::get(VMContext, Elts));
> }
> 
> -/// cleanseInlinedVariable - Remove inlined scope from the variable.
> -DIVariable llvm::cleanseInlinedVariable(MDNode *DV, LLVMContext &VMContext) {
> -  SmallVector<Value *, 16> Elts;
> -  // Insert inlined scope as 7th element.
> -  for (unsigned i = 0, e = DV->getNumOperands(); i != e; ++i)
> -    i == 7 ? 
> -      Elts.push_back(llvm::Constant::getNullValue(Type::getInt32Ty(VMContext))):
> -      Elts.push_back(DV->getOperand(i));
> -  return DIVariable(MDNode::get(VMContext, Elts));
> -}
> -
> //===----------------------------------------------------------------------===//
> // DebugInfoFinder implementations.
> //===----------------------------------------------------------------------===//
> 
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=136953&r1=136952&r2=136953&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Thu Aug  4 19:51:31 2011
> @@ -1286,18 +1286,14 @@
> }
> 
> /// findAbstractVariable - Find abstract variable, if any, associated with Var.
> -DbgVariable *DwarfDebug::findAbstractVariable(DIVariable &DV,
> +DbgVariable *DwarfDebug::findAbstractVariable(DIVariable &Var,
>                                               DebugLoc ScopeLoc) {
> -  LLVMContext &Ctx = DV->getContext();
> -
> -  // More then one inlined variable corresponds to one abstract variable.
> -  DIVariable Var = cleanseInlinedVariable(DV, Ctx);
> 
>   DbgVariable *AbsDbgVariable = AbstractVariables.lookup(Var);
>   if (AbsDbgVariable)
>     return AbsDbgVariable;
> 
> -
> +  LLVMContext &Ctx = Var->getContext();
>   DbgScope *Scope = AbstractScopes.lookup(ScopeLoc.getScope(Ctx));
>   if (!Scope)
>     return NULL;
> 
> Modified: llvm/trunk/lib/Transforms/Utils/InlineFunction.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/InlineFunction.cpp?rev=136953&r1=136952&r2=136953&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Utils/InlineFunction.cpp (original)
> +++ llvm/trunk/lib/Transforms/Utils/InlineFunction.cpp Thu Aug  4 19:51:31 2011
> @@ -770,15 +770,8 @@
>     for (BasicBlock::iterator BI = FI->begin(), BE = FI->end();
>          BI != BE; ++BI) {
>       DebugLoc DL = BI->getDebugLoc();
> -      if (!DL.isUnknown()) {
> +      if (!DL.isUnknown())
>         BI->setDebugLoc(updateInlinedAtInfo(DL, TheCallDL, BI->getContext()));
> -        if (DbgValueInst *DVI = dyn_cast<DbgValueInst>(BI)) {
> -          LLVMContext &Ctx = BI->getContext();
> -          MDNode *InlinedAt = BI->getDebugLoc().getInlinedAt(Ctx);
> -          DVI->setOperand(2, createInlinedVariable(DVI->getVariable(), 
> -                                                   InlinedAt, Ctx));
> -        }
> -      }
>     }
>   }
> }
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list