From: Chris Lattner Date: Mon, 5 Apr 2010 02:19:28 +0000 (+0000) Subject: fastisel doesn't need DwarfWriter, remove some tendricles. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=d850ac79b57e6e0bf68ee93a94d0b3dcd9f6ca35;p=oota-llvm.git fastisel doesn't need DwarfWriter, remove some tendricles. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100381 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/CodeGen/FastISel.h b/include/llvm/CodeGen/FastISel.h index 9d0f0d9e57b..487031c1990 100644 --- a/include/llvm/CodeGen/FastISel.h +++ b/include/llvm/CodeGen/FastISel.h @@ -28,7 +28,6 @@ class MachineConstantPool; class MachineFunction; class MachineFrameInfo; class MachineModuleInfo; -class DwarfWriter; class MachineRegisterInfo; class TargetData; class TargetInstrInfo; @@ -51,7 +50,6 @@ protected: #endif MachineFunction &MF; MachineModuleInfo *MMI; - DwarfWriter *DW; MachineRegisterInfo &MRI; MachineFrameInfo &MFI; MachineConstantPool &MCP; @@ -117,7 +115,6 @@ public: protected: FastISel(MachineFunction &mf, MachineModuleInfo *mmi, - DwarfWriter *dw, DenseMap &vm, DenseMap &bm, DenseMap &am diff --git a/include/llvm/CodeGen/SelectionDAGISel.h b/include/llvm/CodeGen/SelectionDAGISel.h index def09c76fcb..a7ce7aa0870 100644 --- a/include/llvm/CodeGen/SelectionDAGISel.h +++ b/include/llvm/CodeGen/SelectionDAGISel.h @@ -30,7 +30,6 @@ namespace llvm { class MachineFunction; class MachineInstr; class MachineModuleInfo; - class DwarfWriter; class TargetLowering; class TargetInstrInfo; class FunctionLoweringInfo; @@ -285,7 +284,6 @@ private: void SelectAllBasicBlocks(Function &Fn, MachineFunction &MF, MachineModuleInfo *MMI, - DwarfWriter *DW, const TargetInstrInfo &TII); void FinishBasicBlock(); diff --git a/include/llvm/Target/TargetLowering.h b/include/llvm/Target/TargetLowering.h index 874f840d194..862a8bad3da 100644 --- a/include/llvm/Target/TargetLowering.h +++ b/include/llvm/Target/TargetLowering.h @@ -50,7 +50,6 @@ namespace llvm { class MachineModuleInfo; class MCContext; class MCExpr; - class DwarfWriter; class SDNode; class SDValue; class SelectionDAG; @@ -1273,8 +1272,7 @@ public: /// createFastISel - This method returns a target specific FastISel object, /// or null if the target does not support "fast" ISel. virtual FastISel * - createFastISel(MachineFunction &, - MachineModuleInfo *, DwarfWriter *, + createFastISel(MachineFunction &, MachineModuleInfo *, DenseMap &, DenseMap &, DenseMap & diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index 539eba0133f..3d86bf6fc91 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -1793,24 +1793,39 @@ void DwarfDebug::constructSubprogramDIE(MDNode *N) { void DwarfDebug::beginModule(Module *M) { if (!Asm->MAI->doesSupportDebugInformation()) return; + + MMI = Asm->MMI; TimeRegion Timer(DebugTimer); - + DebugInfoFinder DbgFinder; DbgFinder.processModule(*M); + bool HasDebugInfo = false; + + // Scan all the compile-units to see if there are any marked as the main unit. + // if not, we do not generate debug info. + for (DebugInfoFinder::iterator I = DbgFinder.compile_unit_begin(), + E = DbgFinder.compile_unit_end(); I != E; ++I) { + if (DICompileUnit(*I).isMain()) { + HasDebugInfo = true; + break; + } + } + + if (!HasDebugInfo) return; + + // Tell MMI that we have debug info. + MMI->setDebugInfoAvailability(true); + // Emit initial sections. - if (DbgFinder.compile_unit_begin() != DbgFinder.compile_unit_end()) - EmitSectionLabels(); + EmitSectionLabels(); // Create all the compile unit DIEs. for (DebugInfoFinder::iterator I = DbgFinder.compile_unit_begin(), E = DbgFinder.compile_unit_end(); I != E; ++I) constructCompileUnit(*I); - if (!ModuleCU) - return; - // Create DIEs for each subprogram. for (DebugInfoFinder::iterator I = DbgFinder.subprogram_begin(), E = DbgFinder.subprogram_end(); I != E; ++I) @@ -1821,10 +1836,6 @@ void DwarfDebug::beginModule(Module *M) { E = DbgFinder.global_variable_end(); I != E; ++I) constructGlobalVariableDIE(*I); - MMI = Asm->MMI; - shouldEmit = true; - MMI->setDebugInfoAvailability(true); - // Prime section data. SectionMap.insert(Asm->getObjFileLowering().getTextSection()); diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.h b/lib/CodeGen/AsmPrinter/DwarfDebug.h index 320691b0592..b38e485117a 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.h +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.h @@ -60,8 +60,10 @@ public: class DwarfDebug { /// Asm - Target of Dwarf emission. AsmPrinter *Asm; +public: /// MMI - Collected machine module information. MachineModuleInfo *MMI; +private: //===--------------------------------------------------------------------===// // Attributes used to construct specific Dwarf sections. diff --git a/lib/CodeGen/AsmPrinter/DwarfWriter.cpp b/lib/CodeGen/AsmPrinter/DwarfWriter.cpp index 1b019cd294a..acc0066937e 100644 --- a/lib/CodeGen/AsmPrinter/DwarfWriter.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfWriter.cpp @@ -72,7 +72,7 @@ void DwarfWriter::EndFunction(const MachineFunction *MF) { /// ShouldEmitDwarfDebug - Returns true if Dwarf debugging declarations should /// be emitted. bool DwarfWriter::ShouldEmitDwarfDebug() const { - return DD && DD->ShouldEmitDwarfDebug(); + return DD && DD->MMI->hasDebugInfo(); } void DwarfWriter::BeginScope(const MachineInstr *MI) { diff --git a/lib/CodeGen/SelectionDAG/FastISel.cpp b/lib/CodeGen/SelectionDAG/FastISel.cpp index d6f8a205c1f..fdb3b5c3ad8 100644 --- a/lib/CodeGen/SelectionDAG/FastISel.cpp +++ b/lib/CodeGen/SelectionDAG/FastISel.cpp @@ -47,7 +47,6 @@ #include "llvm/CodeGen/MachineInstrBuilder.h" #include "llvm/CodeGen/MachineModuleInfo.h" #include "llvm/CodeGen/MachineRegisterInfo.h" -#include "llvm/CodeGen/DwarfWriter.h" #include "llvm/Analysis/DebugInfo.h" #include "llvm/Target/TargetData.h" #include "llvm/Target/TargetInstrInfo.h" @@ -326,8 +325,8 @@ bool FastISel::SelectCall(User *I) { default: break; case Intrinsic::dbg_declare: { DbgDeclareInst *DI = cast(I); - if (!DIDescriptor::ValidDebugInfo(DI->getVariable(), CodeGenOpt::None)||!DW - || !DW->ShouldEmitDwarfDebug()) + if (!DIDescriptor::ValidDebugInfo(DI->getVariable(), CodeGenOpt::None) || + !MMI->hasDebugInfo()) return true; Value *Address = DI->getAddress(); @@ -735,7 +734,6 @@ FastISel::SelectOperator(User *I, unsigned Opcode) { FastISel::FastISel(MachineFunction &mf, MachineModuleInfo *mmi, - DwarfWriter *dw, DenseMap &vm, DenseMap &bm, DenseMap &am @@ -752,7 +750,6 @@ FastISel::FastISel(MachineFunction &mf, #endif MF(mf), MMI(mmi), - DW(dw), MRI(MF.getRegInfo()), MFI(*MF.getFrameInfo()), MCP(*MF.getConstantPool()), diff --git a/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp index d54566b8cd3..69ff94b28c9 100644 --- a/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp +++ b/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp @@ -342,7 +342,7 @@ bool SelectionDAGISel::runOnMachineFunction(MachineFunction &mf) { // Mark landing pad. FuncInfo->MBBMap[Invoke->getSuccessor(1)]->setIsLandingPad(); - SelectAllBasicBlocks(Fn, *MF, MMI, DW, TII); + SelectAllBasicBlocks(Fn, *MF, MMI, TII); // If the first basic block in the function has live ins that need to be // copied into vregs, emit the copies into the top of the block before @@ -845,12 +845,11 @@ void SelectionDAGISel::DoInstructionSelection() { void SelectionDAGISel::SelectAllBasicBlocks(Function &Fn, MachineFunction &MF, MachineModuleInfo *MMI, - DwarfWriter *DW, const TargetInstrInfo &TII) { // Initialize the Fast-ISel state, if needed. FastISel *FastIS = 0; if (EnableFastISel) - FastIS = TLI.createFastISel(MF, MMI, DW, + FastIS = TLI.createFastISel(MF, MMI, FuncInfo->ValueMap, FuncInfo->MBBMap, FuncInfo->StaticAllocaMap diff --git a/lib/Target/X86/X86FastISel.cpp b/lib/Target/X86/X86FastISel.cpp index c69eeb3e900..536c64f8070 100644 --- a/lib/Target/X86/X86FastISel.cpp +++ b/lib/Target/X86/X86FastISel.cpp @@ -55,7 +55,6 @@ class X86FastISel : public FastISel { public: explicit X86FastISel(MachineFunction &mf, MachineModuleInfo *mmi, - DwarfWriter *dw, DenseMap &vm, DenseMap &bm, DenseMap &am @@ -63,7 +62,7 @@ public: , SmallSet &cil #endif ) - : FastISel(mf, mmi, dw, vm, bm, am + : FastISel(mf, mmi, vm, bm, am #ifndef NDEBUG , cil #endif @@ -1754,7 +1753,6 @@ unsigned X86FastISel::TargetMaterializeAlloca(AllocaInst *C) { namespace llvm { llvm::FastISel *X86::createFastISel(MachineFunction &mf, MachineModuleInfo *mmi, - DwarfWriter *dw, DenseMap &vm, DenseMap &bm, DenseMap &am @@ -1762,7 +1760,7 @@ namespace llvm { , SmallSet &cil #endif ) { - return new X86FastISel(mf, mmi, dw, vm, bm, am + return new X86FastISel(mf, mmi, vm, bm, am #ifndef NDEBUG , cil #endif diff --git a/lib/Target/X86/X86ISelLowering.cpp b/lib/Target/X86/X86ISelLowering.cpp index 3eaf64d1de4..7ac6628236f 100644 --- a/lib/Target/X86/X86ISelLowering.cpp +++ b/lib/Target/X86/X86ISelLowering.cpp @@ -2399,7 +2399,6 @@ X86TargetLowering::IsEligibleForTailCallOptimization(SDValue Callee, FastISel * X86TargetLowering::createFastISel(MachineFunction &mf, MachineModuleInfo *mmo, - DwarfWriter *dw, DenseMap &vm, DenseMap &bm, DenseMap &am @@ -2407,7 +2406,7 @@ X86TargetLowering::createFastISel(MachineFunction &mf, MachineModuleInfo *mmo, , SmallSet &cil #endif ) { - return X86::createFastISel(mf, mmo, dw, vm, bm, am + return X86::createFastISel(mf, mmo, vm, bm, am #ifndef NDEBUG , cil #endif diff --git a/lib/Target/X86/X86ISelLowering.h b/lib/Target/X86/X86ISelLowering.h index 9547f1927dc..85099015b9c 100644 --- a/lib/Target/X86/X86ISelLowering.h +++ b/lib/Target/X86/X86ISelLowering.h @@ -574,8 +574,7 @@ namespace llvm { /// createFastISel - This method returns a target specific FastISel object, /// or null if the target does not support "fast" ISel. virtual FastISel * - createFastISel(MachineFunction &mf, - MachineModuleInfo *mmi, DwarfWriter *dw, + createFastISel(MachineFunction &mf, MachineModuleInfo *mmi, DenseMap &, DenseMap &, DenseMap & @@ -816,7 +815,7 @@ namespace llvm { namespace X86 { FastISel *createFastISel(MachineFunction &mf, - MachineModuleInfo *mmi, DwarfWriter *dw, + MachineModuleInfo *mmi, DenseMap &, DenseMap &, DenseMap &