[llvm] r196272 - Revert r196270, "Generalize debug info / EH emission in AsmPrinter"

Timur Iskhodzhanov timurrrr at google.com
Tue Dec 3 06:35:02 PST 2013


So it turned out I had asserts disabled in the build directory where I was
testing the patch before committing...

Sorry for the inconvenience!


2013/12/3 NAKAMURA Takumi <geek4civic at gmail.com>

> I guess, your LLVM_TARGETS_TO_BUILD would not be "all" but
> "ARM;....;X86" (w/o R600).
>
> 2013/12/3 Timur Iskhodzhanov <timurrrr at google.com>:
> > Thanks for taking care of this while I was away.
> >
> > Curious why I haven't seen this locally...
> >
> >
> >
> > 2013/12/3 NAKAMURA Takumi <geek4civic at gmail.com>
> >>
> >> Author: chapuni
> >> Date: Tue Dec  3 07:15:54 2013
> >> New Revision: 196272
> >>
> >> URL: http://llvm.org/viewvc/llvm-project?rev=196272&view=rev
> >> Log:
> >> Revert r196270, "Generalize debug info / EH emission in AsmPrinter"
> >>
> >> It broke CodeGen/R600 tests with +Asserts.
> >>
> >> Removed:
> >>     llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinterHandler.h
> >> Modified:
> >>     llvm/trunk/include/llvm/CodeGen/AsmPrinter.h
> >>     llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
> >>     llvm/trunk/lib/CodeGen/AsmPrinter/DIE.cpp
> >>     llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
> >>     llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h
> >>     llvm/trunk/lib/CodeGen/AsmPrinter/DwarfException.h
> >>
> >> Modified: llvm/trunk/include/llvm/CodeGen/AsmPrinter.h
> >> URL:
> >>
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/AsmPrinter.h?rev=196272&r1=196271&r2=196272&view=diff
> >>
> >>
> ==============================================================================
> >> --- llvm/trunk/include/llvm/CodeGen/AsmPrinter.h (original)
> >> +++ llvm/trunk/include/llvm/CodeGen/AsmPrinter.h Tue Dec  3 07:15:54
> 2013
> >> @@ -22,7 +22,6 @@
> >>  #include "llvm/Support/ErrorHandling.h"
> >>
> >>  namespace llvm {
> >> -  class AsmPrinterHandler;
> >>    class BlockAddress;
> >>    class GCStrategy;
> >>    class Constant;
> >> @@ -111,21 +110,13 @@ namespace llvm {
> >>      /// function.
> >>      MachineLoopInfo *LI;
> >>
> >> -    struct HandlerInfo {
> >> -      AsmPrinterHandler *Handler;
> >> -      const char *TimerName, *TimerGroupName;
> >> -      HandlerInfo(AsmPrinterHandler *Handler, const char *TimerName,
> >> -                  const char *TimerGroupName)
> >> -          : Handler(Handler), TimerName(TimerName),
> >> -            TimerGroupName(TimerGroupName) {}
> >> -    };
> >> -    /// Handlers - a vector of all debug/EH info emitters we should
> use.
> >> -    /// This vector maintains ownership of the emitters.
> >> -    SmallVector<HandlerInfo, 1> Handlers;
> >> -
> >>      /// DD - If the target supports dwarf debug info, this pointer is
> >> non-null.
> >>      DwarfDebug *DD;
> >>
> >> +    /// DE - If the target supports dwarf exception info, this pointer
> is
> >> +    /// non-null.
> >> +    DwarfException *DE;
> >> +
> >>    protected:
> >>      explicit AsmPrinter(TargetMachine &TM, MCStreamer &Streamer);
> >>
> >>
> >> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
> >> URL:
> >>
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp?rev=196272&r1=196271&r2=196272&view=diff
> >>
> >>
> ==============================================================================
> >> --- llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp (original)
> >> +++ llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp Tue Dec  3 07:15:54
> >> 2013
> >> @@ -99,14 +99,14 @@ AsmPrinter::AsmPrinter(TargetMachine &tm
> >>      OutContext(Streamer.getContext()),
> >>      OutStreamer(Streamer),
> >>      LastMI(0), LastFn(0), Counter(~0U), SetCounter(0) {
> >> -  DD = 0; MMI = 0; LI = 0; MF = 0;
> >> +  DD = 0; DE = 0; MMI = 0; LI = 0; MF = 0;
> >>    CurrentFnSym = CurrentFnSymForSize = 0;
> >>    GCMetadataPrinters = 0;
> >>    VerboseAsm = Streamer.isVerboseAsm();
> >>  }
> >>
> >>  AsmPrinter::~AsmPrinter() {
> >> -  assert(DD == 0 && Handlers.empty() && "Debug/EH info didn't get
> >> finalized");
> >> +  assert(DD == 0 && DE == 0 && "Debug/EH info didn't get finalized");
> >>
> >>    if (GCMetadataPrinters != 0) {
> >>      gcp_map_type &GCMap = getGCMap(GCMetadataPrinters);
> >> @@ -192,29 +192,25 @@ bool AsmPrinter::doInitialization(Module
> >>      OutStreamer.AddBlankLine();
> >>    }
> >>
> >> -  if (MAI->doesSupportDebugInformation()) {
> >> +  if (MAI->doesSupportDebugInformation())
> >>      DD = new DwarfDebug(this, &M);
> >> -    Handlers.push_back(HandlerInfo(DD, DbgTimerName, DWARFGroupName));
> >> -  }
> >>
> >> -  DwarfException *DE = 0;
> >>    switch (MAI->getExceptionHandlingType()) {
> >>    case ExceptionHandling::None:
> >> -    break;
> >> +    return false;
> >>    case ExceptionHandling::SjLj:
> >>    case ExceptionHandling::DwarfCFI:
> >>      DE = new DwarfCFIException(this);
> >> -    break;
> >> +    return false;
> >>    case ExceptionHandling::ARM:
> >>      DE = new ARMException(this);
> >> -    break;
> >> +    return false;
> >>    case ExceptionHandling::Win64:
> >>      DE = new Win64Exception(this);
> >> -    break;
> >> +    return false;
> >>    }
> >> -  if (DE)
> >> -    Handlers.push_back(HandlerInfo(DE, EHTimerName, DWARFGroupName));
> >> -  return false;
> >> +
> >> +  llvm_unreachable("Unknown exception type.");
> >>  }
> >>
> >>  void AsmPrinter::EmitLinkage(const GlobalValue *GV, MCSymbol *GVSym)
> >> const {
> >> @@ -315,11 +311,8 @@ void AsmPrinter::EmitGlobalVariable(cons
> >>    // sections and expected to be contiguous (e.g. ObjC metadata).
> >>    unsigned AlignLog = getGVAlignmentLog2(GV, *DL);
> >>
> >> -  for (unsigned I = 0, E = Handlers.size(); I != E; ++I) {
> >> -    const HandlerInfo &OI = Handlers[I];
> >> -    NamedRegionTimer T(OI.TimerName, OI.TimerGroupName,
> >> TimePassesIsEnabled);
> >> -    OI.Handler->setSymbolSize(GVSym, Size);
> >> -  }
> >> +  if (DD)
> >> +    DD->setSymbolSize(GVSym, Size);
> >>
> >>    // Handle common and BSS local symbols (.lcomm).
> >>    if (GVKind.isCommon() || GVKind.isBSSLocal()) {
> >> @@ -489,10 +482,13 @@ void AsmPrinter::EmitFunctionHeader() {
> >>    }
> >>
> >>    // Emit pre-function debug and/or EH information.
> >> -  for (unsigned I = 0, E = Handlers.size(); I != E; ++I) {
> >> -    const HandlerInfo &OI = Handlers[I];
> >> -    NamedRegionTimer T(OI.TimerName, OI.TimerGroupName,
> >> TimePassesIsEnabled);
> >> -    OI.Handler->beginFunction(MF);
> >> +  if (DE) {
> >> +    NamedRegionTimer T(EHTimerName, DWARFGroupName,
> TimePassesIsEnabled);
> >> +    DE->beginFunction(MF);
> >> +  }
> >> +  if (DD) {
> >> +    NamedRegionTimer T(DbgTimerName, DWARFGroupName,
> >> TimePassesIsEnabled);
> >> +    DD->beginFunction(MF);
> >>    }
> >>
> >>    // Emit the prefix data.
> >> @@ -697,7 +693,7 @@ void AsmPrinter::EmitFunctionBody() {
> >>    // Emit target-specific gunk before the function body.
> >>    EmitFunctionBodyStart();
> >>
> >> -  bool ShouldPrintDebugScopes = MMI->hasDebugInfo();
> >> +  bool ShouldPrintDebugScopes = DD && MMI->hasDebugInfo();
> >>
> >>    // Print out code for the function.
> >>    bool HasAnyRealCode = false;
> >> @@ -718,12 +714,8 @@ void AsmPrinter::EmitFunctionBody() {
> >>        }
> >>
> >>        if (ShouldPrintDebugScopes) {
> >> -        for (unsigned III = 0, EEE = Handlers.size(); III != EEE;
> ++III)
> >> {
> >> -          const HandlerInfo &OI = Handlers[III];
> >> -          NamedRegionTimer T(OI.TimerName, OI.TimerGroupName,
> >> -                             TimePassesIsEnabled);
> >> -          OI.Handler->beginInstruction(II);
> >> -        }
> >> +        NamedRegionTimer T(DbgTimerName, DWARFGroupName,
> >> TimePassesIsEnabled);
> >> +        DD->beginInstruction(II);
> >>        }
> >>
> >>        if (isVerbose())
> >> @@ -762,12 +754,8 @@ void AsmPrinter::EmitFunctionBody() {
> >>        }
> >>
> >>        if (ShouldPrintDebugScopes) {
> >> -        for (unsigned III = 0, EEE = Handlers.size(); III != EEE;
> ++III)
> >> {
> >> -          const HandlerInfo &OI = Handlers[III];
> >> -          NamedRegionTimer T(OI.TimerName, OI.TimerGroupName,
> >> -                             TimePassesIsEnabled);
> >> -          OI.Handler->endInstruction();
> >> -        }
> >> +        NamedRegionTimer T(DbgTimerName, DWARFGroupName,
> >> TimePassesIsEnabled);
> >> +        DD->endInstruction(II);
> >>        }
> >>      }
> >>    }
> >> @@ -823,11 +811,14 @@ void AsmPrinter::EmitFunctionBody() {
> >>      OutStreamer.EmitELFSize(CurrentFnSym, SizeExp);
> >>    }
> >>
> >> -  // Emit post-function debug and/or EH information.
> >> -  for (unsigned I = 0, E = Handlers.size(); I != E; ++I) {
> >> -    const HandlerInfo &OI = Handlers[I];
> >> -    NamedRegionTimer T(OI.TimerName, OI.TimerGroupName,
> >> TimePassesIsEnabled);
> >> -    OI.Handler->endFunction();
> >> +  // Emit post-function debug information.
> >> +  if (DD) {
> >> +    NamedRegionTimer T(DbgTimerName, DWARFGroupName,
> >> TimePassesIsEnabled);
> >> +    DD->endFunction(MF);
> >> +  }
> >> +  if (DE) {
> >> +    NamedRegionTimer T(EHTimerName, DWARFGroupName,
> TimePassesIsEnabled);
> >> +    DE->endFunction();
> >>    }
> >>    MMI->EndFunction();
> >>
> >> @@ -916,15 +907,20 @@ bool AsmPrinter::doFinalization(Module &
> >>    OutStreamer.Flush();
> >>
> >>    // Finalize debug and EH information.
> >> -  for (unsigned I = 0, E = Handlers.size(); I != E; ++I) {
> >> -    const HandlerInfo &OI = Handlers[I];
> >> -    NamedRegionTimer T(OI.TimerName, OI.TimerGroupName,
> >> -                       TimePassesIsEnabled);
> >> -    OI.Handler->endModule();
> >> -    delete OI.Handler;
> >> +  if (DE) {
> >> +    {
> >> +      NamedRegionTimer T(EHTimerName, DWARFGroupName,
> >> TimePassesIsEnabled);
> >> +      DE->endModule();
> >> +    }
> >> +    delete DE; DE = 0;
> >> +  }
> >> +  if (DD) {
> >> +    {
> >> +      NamedRegionTimer T(DbgTimerName, DWARFGroupName,
> >> TimePassesIsEnabled);
> >> +      DD->endModule();
> >> +    }
> >> +    delete DD; DD = 0;
> >>    }
> >> -  Handlers.clear();
> >> -  DD = 0;
> >>
> >>    // If the target wants to know about weak references, print them all.
> >>    if (MAI->getWeakRefDirective()) {
> >>
> >> Removed: llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinterHandler.h
> >> URL:
> >>
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinterHandler.h?rev=196271&view=auto
> >>
> >>
> ==============================================================================
> >> --- llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinterHandler.h (original)
> >> +++ llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinterHandler.h (removed)
> >> @@ -1,53 +0,0 @@
> >> -//===-- lib/CodeGen/AsmPrinter/AsmPrinterHandler.h -------------*- C++
> >> -*--===//
> >> -//
> >> -//                     The LLVM Compiler Infrastructure
> >> -//
> >> -// This file is distributed under the University of Illinois Open
> Source
> >> -// License. See LICENSE.TXT for details.
> >> -//
> >>
> >>
> -//===----------------------------------------------------------------------===//
> >> -//
> >> -// This file contains a generic interface for AsmPrinter handlers,
> >> -// like debug and EH info emitters.
> >> -//
> >>
> >>
> -//===----------------------------------------------------------------------===//
> >> -
> >> -#ifndef CODEGEN_ASMPRINTER_ASMPRINTERHANDLER_H__
> >> -#define CODEGEN_ASMPRINTER_ASMPRINTERHANDLER_H__
> >> -
> >> -#include "llvm/Support/DataTypes.h"
> >> -
> >> -namespace llvm {
> >> -
> >> -class MachineFunction;
> >> -class MachineInstr;
> >> -class MCSymbol;
> >> -
> >> -/// \brief Collects and handles AsmPrinter objects required to build
> >> debug
> >> -/// or EH information.
> >> -class AsmPrinterHandler {
> >> -public:
> >> -  virtual ~AsmPrinterHandler() {}
> >> -
> >> -  /// \brief For symbols that have a size designated (e.g. common
> >> symbols),
> >> -  /// this tracks that size.
> >> -  virtual void setSymbolSize(const MCSymbol *Sym, uint64_t Size) = 0;
> >> -
> >> -  /// \brief Emit all sections that should come after the content.
> >> -  virtual void endModule() = 0;
> >> -
> >> -  /// \brief Gather pre-function debug information.
> >> -  virtual void beginFunction(const MachineFunction *MF) = 0;
> >> -
> >> -  /// \brief Gather post-function debug information.
> >> -  virtual void endFunction() = 0;
> >> -
> >> -  /// \brief Process beginning of an instruction.
> >> -  virtual void beginInstruction(const MachineInstr *MI) = 0;
> >> -
> >> -  /// \brief Process end of an instruction.
> >> -  virtual void endInstruction() = 0;
> >> -};
> >> -} // End of namespace llvm
> >> -
> >> -#endif
> >>
> >> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DIE.cpp
> >> URL:
> >>
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DIE.cpp?rev=196272&r1=196271&r2=196272&view=diff
> >>
> >>
> ==============================================================================
> >> --- llvm/trunk/lib/CodeGen/AsmPrinter/DIE.cpp (original)
> >> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DIE.cpp Tue Dec  3 07:15:54 2013
> >> @@ -390,9 +390,7 @@ unsigned DIEEntry::getRefAddrSize(AsmPri
> >>    // specified to be four bytes in the DWARF 32-bit format and eight
> >> bytes
> >>    // in the DWARF 64-bit format, while DWARF Version 2 specifies that
> >> such
> >>    // references have the same size as an address on the target system.
> >> -  const DwarfDebug *DD = AP->getDwarfDebug();
> >> -  assert(DD && "Expected Dwarf Debug info to be available");
> >> -  if (DD->getDwarfVersion() == 2)
> >> +  if (AP->getDwarfDebug()->getDwarfVersion() == 2)
> >>      return AP->getDataLayout().getPointerSize();
> >>    return sizeof(int32_t);
> >>  }
> >>
> >> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
> >> URL:
> >>
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=196272&r1=196271&r2=196272&view=diff
> >>
> >>
> ==============================================================================
> >> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original)
> >> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Tue Dec  3 07:15:54
> >> 2013
> >> @@ -197,7 +197,6 @@ DwarfDebug::DwarfDebug(AsmPrinter *A, Mo
> >>    DwarfAddrSectionSym = 0;
> >>    DwarfAbbrevDWOSectionSym = DwarfStrDWOSectionSym = 0;
> >>    FunctionBeginSym = FunctionEndSym = 0;
> >> -  CurFn = 0; CurMI = 0;
> >>
> >>    // Turn on accelerator tables for Darwin by default, pubnames by
> >>    // default for non-Darwin, and handle split dwarf.
> >> @@ -1145,7 +1144,6 @@ void DwarfDebug::endSections() {
> >>
> >>  // Emit all Dwarf sections that should come after the content.
> >>  void DwarfDebug::endModule() {
> >> -  assert(CurFn == 0);
> >>
> >>    if (!FirstCU)
> >>      return;
> >> @@ -1227,7 +1225,8 @@ DbgVariable *DwarfDebug::findAbstractVar
> >>  }
> >>
> >>  // If Var is a current function argument then add it to
> >> CurrentFnArguments list.
> >> -bool DwarfDebug::addCurrentFnArgument(DbgVariable *Var, LexicalScope
> >> *Scope) {
> >> +bool DwarfDebug::addCurrentFnArgument(const MachineFunction *MF,
> >> +                                      DbgVariable *Var, LexicalScope
> >> *Scope) {
> >>    if (!LScopes.isCurrentFunctionScope(Scope))
> >>      return false;
> >>    DIVariable DV = Var->getVariable();
> >> @@ -1239,7 +1238,7 @@ bool DwarfDebug::addCurrentFnArgument(Db
> >>
> >>    size_t Size = CurrentFnArguments.size();
> >>    if (Size == 0)
> >> -    CurrentFnArguments.resize(CurFn->getFunction()->arg_size());
> >> +    CurrentFnArguments.resize(MF->getFunction()->arg_size());
> >>    // llvm::Function argument size is not good indicator of how many
> >>    // arguments does the function have at source level.
> >>    if (ArgNo > Size)
> >> @@ -1250,7 +1249,7 @@ bool DwarfDebug::addCurrentFnArgument(Db
> >>
> >>  // Collect variable information from side table maintained by MMI.
> >>  void DwarfDebug::collectVariableInfoFromMMITable(
> >> -    SmallPtrSet<const MDNode *, 16> &Processed) {
> >> +    const MachineFunction *MF, SmallPtrSet<const MDNode *, 16>
> >> &Processed) {
> >>    MachineModuleInfo::VariableDbgInfoMapTy &VMap =
> >> MMI->getVariableDbgInfo();
> >>    for (MachineModuleInfo::VariableDbgInfoMapTy::iterator VI =
> >> VMap.begin(),
> >>                                                           VE =
> VMap.end();
> >> @@ -1271,7 +1270,7 @@ void DwarfDebug::collectVariableInfoFrom
> >>      DbgVariable *AbsDbgVariable = findAbstractVariable(DV, VP.second);
> >>      DbgVariable *RegVar = new DbgVariable(DV, AbsDbgVariable, this);
> >>      RegVar->setFrameIndex(VP.first);
> >> -    if (!addCurrentFnArgument(RegVar, Scope))
> >> +    if (!addCurrentFnArgument(MF, RegVar, Scope))
> >>        addScopeVariable(Scope, RegVar);
> >>      if (AbsDbgVariable)
> >>        AbsDbgVariable->setFrameIndex(VP.first);
> >> @@ -1318,10 +1317,11 @@ static DotDebugLocEntry getDebugLocEntry
> >>
> >>  // Find variables for each lexical scope.
> >>  void
> >> -DwarfDebug::collectVariableInfo(SmallPtrSet<const MDNode *, 16>
> >> &Processed) {
> >> +DwarfDebug::collectVariableInfo(const MachineFunction *MF,
> >> +                                SmallPtrSet<const MDNode *, 16>
> >> &Processed) {
> >>
> >>    // Grab the variable info that was squirreled away in the MMI
> >> side-table.
> >> -  collectVariableInfoFromMMITable(Processed);
> >> +  collectVariableInfoFromMMITable(MF, Processed);
> >>
> >>    for (SmallVectorImpl<const MDNode *>::const_iterator
> >>             UVI = UserVariables.begin(),
> >> @@ -1341,7 +1341,7 @@ DwarfDebug::collectVariableInfo(SmallPtr
> >>      DIVariable DV(Var);
> >>      LexicalScope *Scope = NULL;
> >>      if (DV.getTag() == dwarf::DW_TAG_arg_variable &&
> >> -        DISubprogram(DV.getContext()).describes(CurFn->getFunction()))
> >> +        DISubprogram(DV.getContext()).describes(MF->getFunction()))
> >>        Scope = LScopes.getCurrentFunctionScope();
> >>      else if (MDNode *IA = DV.getInlinedAt())
> >>        Scope =
> LScopes.findInlinedScope(DebugLoc::getFromDILocation(IA));
> >> @@ -1355,7 +1355,7 @@ DwarfDebug::collectVariableInfo(SmallPtr
> >>      assert(MInsn->isDebugValue() && "History must begin with debug
> >> value");
> >>      DbgVariable *AbsVar = findAbstractVariable(DV,
> MInsn->getDebugLoc());
> >>      DbgVariable *RegVar = new DbgVariable(DV, AbsVar, this);
> >> -    if (!addCurrentFnArgument(RegVar, Scope))
> >> +    if (!addCurrentFnArgument(MF, RegVar, Scope))
> >>        addScopeVariable(Scope, RegVar);
> >>      if (AbsVar)
> >>        AbsVar->setMInsn(MInsn);
> >> @@ -1437,8 +1437,6 @@ MCSymbol *DwarfDebug::getLabelAfterInsn(
> >>
> >>  // Process beginning of an instruction.
> >>  void DwarfDebug::beginInstruction(const MachineInstr *MI) {
> >> -  assert(CurMI == 0);
> >> -  CurMI = MI;
> >>    // Check if source location changes, but ignore DBG_VALUE locations.
> >>    if (!MI->isDebugValue()) {
> >>      DebugLoc DL = MI->getDebugLoc();
> >> @@ -1480,16 +1478,14 @@ void DwarfDebug::beginInstruction(const
> >>  }
> >>
> >>  // Process end of an instruction.
> >> -void DwarfDebug::endInstruction() {
> >> -  assert(CurMI != 0);
> >> +void DwarfDebug::endInstruction(const MachineInstr *MI) {
> >>    // Don't create a new label after DBG_VALUE instructions.
> >>    // They don't generate code.
> >> -  if (!CurMI->isDebugValue())
> >> +  if (!MI->isDebugValue())
> >>      PrevLabel = 0;
> >>
> >>    DenseMap<const MachineInstr *, MCSymbol *>::iterator I =
> >> -      LabelsAfterInsn.find(CurMI);
> >> -  CurMI = 0;
> >> +      LabelsAfterInsn.find(MI);
> >>
> >>    // No label needed.
> >>    if (I == LabelsAfterInsn.end())
> >> @@ -1569,7 +1565,6 @@ static DebugLoc getFnDebugLoc(DebugLoc D
> >>  // Gather pre-function debug information.  Assumes being called
> >> immediately
> >>  // after the function entry point has been emitted.
> >>  void DwarfDebug::beginFunction(const MachineFunction *MF) {
> >> -  CurFn = MF;
> >>
> >>    // If there's no debug info for the function we're not going to do
> >> anything.
> >>    if (!MMI->hasDebugInfo())
> >> @@ -1796,13 +1791,9 @@ void DwarfDebug::addScopeVariable(Lexica
> >>  }
> >>
> >>  // Gather and emit post-function debug information.
> >> -void DwarfDebug::endFunction() {
> >> -  assert(CurFn != 0);
> >> -
> >> -  if (!MMI->hasDebugInfo() || LScopes.empty()) {
> >> -    CurFn = 0;
> >> +void DwarfDebug::endFunction(const MachineFunction *MF) {
> >> +  if (!MMI->hasDebugInfo() || LScopes.empty())
> >>      return;
> >> -  }
> >>
> >>    // Define end label for subprogram.
> >>    FunctionEndSym = Asm->GetTempSymbol("func_end",
> >> Asm->getFunctionNumber());
> >> @@ -1812,7 +1803,7 @@ void DwarfDebug::endFunction() {
> >>    Asm->OutStreamer.getContext().setDwarfCompileUnitID(0);
> >>
> >>    SmallPtrSet<const MDNode *, 16> ProcessedVars;
> >> -  collectVariableInfo(ProcessedVars);
> >> +  collectVariableInfo(MF, ProcessedVars);
> >>
> >>    LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
> >>    CompileUnit *TheCU = SPMap.lookup(FnScope->getScopeNode());
> >> @@ -1846,7 +1837,7 @@ void DwarfDebug::endFunction() {
> >>
> >>    DIE *CurFnDIE = constructScopeDIE(TheCU, FnScope);
> >>
> >> -  if (!CurFn->getTarget().Options.DisableFramePointerElim(*CurFn))
> >> +  if (!MF->getTarget().Options.DisableFramePointerElim(*MF))
> >>      TheCU->addFlag(CurFnDIE, dwarf::DW_AT_APPLE_omit_frame_ptr);
> >>
> >>    // Clear debug info
> >> @@ -1862,7 +1853,6 @@ void DwarfDebug::endFunction() {
> >>    LabelsBeforeInsn.clear();
> >>    LabelsAfterInsn.clear();
> >>    PrevLabel = NULL;
> >> -  CurFn = 0;
> >>  }
> >>
> >>  // Register a source line with debug info. Returns the  unique label
> that
> >> was
> >>
> >> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h
> >> URL:
> >>
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h?rev=196272&r1=196271&r2=196272&view=diff
> >>
> >>
> ==============================================================================
> >> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h (original)
> >> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h Tue Dec  3 07:15:54
> >> 2013
> >> @@ -14,7 +14,6 @@
> >>  #ifndef CODEGEN_ASMPRINTER_DWARFDEBUG_H__
> >>  #define CODEGEN_ASMPRINTER_DWARFDEBUG_H__
> >>
> >> -#include "AsmPrinterHandler.h"
> >>  #include "DIE.h"
> >>  #include "llvm/ADT/DenseMap.h"
> >>  #include "llvm/ADT/FoldingSet.h"
> >> @@ -317,7 +316,7 @@ struct SymbolCU {
> >>  };
> >>
> >>  /// \brief Collects and handles dwarf debug information.
> >> -class DwarfDebug : public AsmPrinterHandler {
> >> +class DwarfDebug {
> >>    // Target of Dwarf emission.
> >>    AsmPrinter *Asm;
> >>
> >> @@ -419,12 +418,6 @@ class DwarfDebug : public AsmPrinterHand
> >>    // body.
> >>    DebugLoc PrologEndLoc;
> >>
> >> -  // If nonnull, stores the current machine function we're processing.
> >> -  const MachineFunction *CurFn;
> >> -
> >> -  // If nonnull, stores the current machine instruction we're
> processing.
> >> -  const MachineInstr *CurMI;
> >> -
> >>    // Section Symbols: these are assembler temporary labels that are
> >> emitted at
> >>    // the beginning of each supported dwarf section.  These are used to
> >> form
> >>    // section offsets and are created by EmitSectionLabels.
> >> @@ -655,14 +648,17 @@ class DwarfDebug : public AsmPrinterHand
> >>
> >>    /// \brief If Var is an current function argument that add it in
> >>    /// CurrentFnArguments list.
> >> -  bool addCurrentFnArgument(DbgVariable *Var, LexicalScope *Scope);
> >> +  bool addCurrentFnArgument(const MachineFunction *MF,
> >> +                            DbgVariable *Var, LexicalScope *Scope);
> >>
> >>    /// \brief Populate LexicalScope entries with variables' info.
> >> -  void collectVariableInfo(SmallPtrSet<const MDNode *, 16>
> >> &ProcessedVars);
> >> +  void collectVariableInfo(const MachineFunction *,
> >> +                           SmallPtrSet<const MDNode *, 16>
> >> &ProcessedVars);
> >>
> >>    /// \brief Collect variable information from the side table
> maintained
> >>    /// by MMI.
> >> -  void collectVariableInfoFromMMITable(SmallPtrSet<const MDNode *, 16>
> >> &P);
> >> +  void collectVariableInfoFromMMITable(const MachineFunction * MF,
> >> +                                       SmallPtrSet<const MDNode *, 16>
> >> &P);
> >>
> >>    /// \brief Ensure that a label will be emitted before MI.
> >>    void requestLabelBeforeInsn(const MachineInstr *MI) {
> >> @@ -704,13 +700,13 @@ public:
> >>    void beginFunction(const MachineFunction *MF);
> >>
> >>    /// \brief Gather and emit post-function debug information.
> >> -  void endFunction();
> >> +  void endFunction(const MachineFunction *MF);
> >>
> >>    /// \brief Process beginning of an instruction.
> >>    void beginInstruction(const MachineInstr *MI);
> >>
> >>    /// \brief Process end of an instruction.
> >> -  void endInstruction();
> >> +  void endInstruction(const MachineInstr *MI);
> >>
> >>    /// \brief Add a DIE to the set of types that we're going to pull
> into
> >>    /// type units.
> >>
> >> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfException.h
> >> URL:
> >>
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfException.h?rev=196272&r1=196271&r2=196272&view=diff
> >>
> >>
> ==============================================================================
> >> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfException.h (original)
> >> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfException.h Tue Dec  3
> 07:15:54
> >> 2013
> >> @@ -14,7 +14,6 @@
> >>  #ifndef LLVM_CODEGEN_ASMPRINTER_DWARFEXCEPTION_H
> >>  #define LLVM_CODEGEN_ASMPRINTER_DWARFEXCEPTION_H
> >>
> >> -#include "AsmPrinterHandler.h"
> >>  #include "llvm/ADT/DenseMap.h"
> >>  #include "llvm/CodeGen/AsmPrinter.h"
> >>  #include <vector>
> >> @@ -36,7 +35,7 @@ class AsmPrinter;
> >>
> >>
> //===----------------------------------------------------------------------===//
> >>  /// DwarfException - Emits Dwarf exception handling directives.
> >>  ///
> >> -class DwarfException : public AsmPrinterHandler {
> >> +class DwarfException {
> >>  protected:
> >>    /// Asm - Target of Dwarf emission.
> >>    AsmPrinter *Asm;
> >> @@ -141,11 +140,6 @@ public:
> >>
> >>    /// endFunction - Gather and emit post-function exception
> information.
> >>    virtual void endFunction();
> >> -
> >> -  // We don't need these.
> >> -  virtual void setSymbolSize(const MCSymbol *Sym, uint64_t Size) {}
> >> -  virtual void beginInstruction(const MachineInstr *MI) {}
> >> -  virtual void endInstruction() {}
> >>  };
> >>
> >>  class DwarfCFIException : public DwarfException {
> >>
> >>
> >> _______________________________________________
> >> llvm-commits mailing list
> >> llvm-commits at cs.uiuc.edu
> >> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20131203/a82e87fc/attachment.html>


More information about the llvm-commits mailing list