[llvm-commits] [llvm] r110607 - in /llvm/trunk: include/llvm/Analysis/DebugInfo.h lib/Analysis/DebugInfo.cpp lib/CodeGen/AsmPrinter/DwarfDebug.cpp

Devang Patel dpatel at apple.com
Mon Aug 9 23:36:37 PDT 2010


This check-in also included DebugInfo.h changes. Update DIGlobalVariable to handle Constant.
On Aug 9, 2010, at 2:39 PM, Devang Patel wrote:

> Author: dpatel
> Date: Mon Aug  9 16:39:24 2010
> New Revision: 110607
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=110607&view=rev
> Log:
> Refactor.
> 
> Modified:
>    llvm/trunk/include/llvm/Analysis/DebugInfo.h
>    llvm/trunk/lib/Analysis/DebugInfo.cpp
>    llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
> 
> Modified: llvm/trunk/include/llvm/Analysis/DebugInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/DebugInfo.h?rev=110607&r1=110606&r2=110607&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Analysis/DebugInfo.h (original)
> +++ llvm/trunk/include/llvm/Analysis/DebugInfo.h Mon Aug  9 16:39:24 2010
> @@ -62,6 +62,7 @@
>     }
> 
>     GlobalVariable *getGlobalVariableField(unsigned Elt) const;
> +    Constant *getConstantField(unsigned Elt) const;
>     Function *getFunctionField(unsigned Elt) const;
> 
>   public:
> @@ -447,6 +448,7 @@
>     unsigned isDefinition() const       { return getUnsignedField(10); }
> 
>     GlobalVariable *getGlobal() const { return getGlobalVariableField(11); }
> +    Constant *getConstant() const   { return getConstantField(11); }
> 
>     /// Verify - Verify that a global variable descriptor is well formed.
>     bool Verify() const;
> @@ -696,6 +698,15 @@
>                          unsigned LineNo, DIType Ty, bool isLocalToUnit,
>                          bool isDefinition, llvm::GlobalVariable *GV);
> 
> +    /// CreateGlobalVariable - Create a new descriptor for the specified constant.
> +    DIGlobalVariable
> +    CreateGlobalVariable(DIDescriptor Context, StringRef Name,
> +                         StringRef DisplayName,
> +                         StringRef LinkageName,
> +                         DIFile F,
> +                         unsigned LineNo, DIType Ty, bool isLocalToUnit,
> +                         bool isDefinition, llvm::Constant *C);
> +
>     /// CreateVariable - Create a new descriptor for the specified variable.
>     DIVariable CreateVariable(unsigned Tag, DIDescriptor Context,
>                               StringRef Name,
> 
> Modified: llvm/trunk/lib/Analysis/DebugInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/DebugInfo.cpp?rev=110607&r1=110606&r2=110607&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Analysis/DebugInfo.cpp (original)
> +++ llvm/trunk/lib/Analysis/DebugInfo.cpp Mon Aug  9 16:39:24 2010
> @@ -89,6 +89,15 @@
>   return 0;
> }
> 
> +Constant *DIDescriptor::getConstantField(unsigned Elt) const {
> +  if (DbgNode == 0)
> +    return 0;
> +
> +  if (Elt < DbgNode->getNumOperands())
> +      return dyn_cast_or_null<Constant>(DbgNode->getOperand(Elt));
> +  return 0;
> +}
> +
> Function *DIDescriptor::getFunctionField(unsigned Elt) const {
>   if (DbgNode == 0)
>     return 0;
> @@ -341,7 +350,7 @@
>   if (!Ty.Verify())
>     return false;
> 
> -  if (!getGlobal())
> +  if (!getGlobal() && !getConstant())
>     return false;
> 
>   return true;
> @@ -1060,6 +1069,38 @@
>   return DIGlobalVariable(Node);
> }
> 
> +/// CreateGlobalVariable - Create a new descriptor for the specified constant.
> +DIGlobalVariable
> +DIFactory::CreateGlobalVariable(DIDescriptor Context, StringRef Name,
> +                                StringRef DisplayName,
> +                                StringRef LinkageName,
> +                                DIFile F,
> +                                unsigned LineNo, DIType Ty,bool isLocalToUnit,
> +                                bool isDefinition, llvm::Constant *Val) {
> +  Value *Elts[] = {
> +    GetTagConstant(dwarf::DW_TAG_variable),
> +    llvm::Constant::getNullValue(Type::getInt32Ty(VMContext)),
> +    Context,
> +    MDString::get(VMContext, Name),
> +    MDString::get(VMContext, DisplayName),
> +    MDString::get(VMContext, LinkageName),
> +    F,
> +    ConstantInt::get(Type::getInt32Ty(VMContext), LineNo),
> +    Ty,
> +    ConstantInt::get(Type::getInt1Ty(VMContext), isLocalToUnit),
> +    ConstantInt::get(Type::getInt1Ty(VMContext), isDefinition),
> +    Val
> +  };
> +
> +  Value *const *Vs = &Elts[0];
> +  MDNode *Node = MDNode::get(VMContext,Vs, 12);
> +
> +  // Create a named metadata so that we do not lose this mdnode.
> +  NamedMDNode *NMD = M.getOrInsertNamedMetadata("llvm.dbg.gv");
> +  NMD->addOperand(Node);
> +
> +  return DIGlobalVariable(Node);
> +}
> 
> /// CreateVariable - Create a new descriptor for the specified variable.
> DIVariable DIFactory::CreateVariable(unsigned Tag, DIDescriptor Context,
> 
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=110607&r1=110606&r2=110607&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Mon Aug  9 16:39:24 2010
> @@ -1190,7 +1190,7 @@
> DIE *DwarfDebug::createGlobalVariableDIE(const DIGlobalVariable &GV) {
>   // If the global variable was optmized out then no need to create debug info
>   // entry.
> -  if (!GV.getGlobal()) return NULL;
> +  if (!GV.Verify()) return NULL;
>   if (GV.getDisplayName().empty()) return NULL;
> 
>   DIE *GVDie = new DIE(dwarf::DW_TAG_variable);
> @@ -1908,6 +1908,10 @@
> 
>   // Add to context owner.
>   DIDescriptor GVContext = DI_GV.getContext();
> +  DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
> +  addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_addr);
> +  addLabel(Block, 0, dwarf::DW_FORM_udata,
> +           Asm->Mang->getSymbol(DI_GV.getGlobal()));
>   // Do not create specification DIE if context is either compile unit
>   // or a subprogram.
>   if (DI_GV.isDefinition() && !GVContext.isCompileUnit() &&
> @@ -1917,18 +1921,10 @@
>     DIE *VariableSpecDIE = new DIE(dwarf::DW_TAG_variable);
>     addDIEEntry(VariableSpecDIE, dwarf::DW_AT_specification,
>                 dwarf::DW_FORM_ref4, VariableDie);
> -    DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
> -    addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_addr);
> -    addLabel(Block, 0, dwarf::DW_FORM_udata,
> -             Asm->Mang->getSymbol(DI_GV.getGlobal()));
>     addBlock(VariableSpecDIE, dwarf::DW_AT_location, 0, Block);
>     addUInt(VariableDie, dwarf::DW_AT_declaration, dwarf::DW_FORM_flag, 1);
>     TheCU->addDie(VariableSpecDIE);
>   } else {
> -    DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
> -    addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_addr);
> -    addLabel(Block, 0, dwarf::DW_FORM_udata,
> -             Asm->Mang->getSymbol(DI_GV.getGlobal()));
>     addBlock(VariableDie, dwarf::DW_AT_location, 0, Block);
>   }
>   addToContextOwner(VariableDie, GVContext);
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits

-
Devang





More information about the llvm-commits mailing list