diff options
author | Bill Wendling <isanbard@gmail.com> | 2009-02-17 01:04:54 +0000 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2009-02-17 01:04:54 +0000 |
commit | 86e6cb924b85e7a288a4d8bfde5d1a8fb9810c88 (patch) | |
tree | c3e72b8f2057840adab445095bd46766d9fdddc8 | |
parent | 1236df4aaa571461301eaa40c56de559a5a4f2f0 (diff) |
--- Merging (from foreign repository) r64714 into '.':
U include/llvm/CodeGen/DebugLoc.h
U lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
U lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp
U lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp
Enable debug location generation at -Os. This goes with the reapplication of the
r63639 patch.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@64715 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/CodeGen/DebugLoc.h | 7 | ||||
-rw-r--r-- | lib/CodeGen/SelectionDAG/LegalizeDAG.cpp | 23 | ||||
-rw-r--r-- | lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp | 48 | ||||
-rw-r--r-- | lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp | 19 |
4 files changed, 61 insertions, 36 deletions
diff --git a/include/llvm/CodeGen/DebugLoc.h b/include/llvm/CodeGen/DebugLoc.h index 77e8ca505c..505292846d 100644 --- a/include/llvm/CodeGen/DebugLoc.h +++ b/include/llvm/CodeGen/DebugLoc.h @@ -37,17 +37,14 @@ namespace llvm { public: DebugLoc() : Idx(~0U) {} // Defaults to invalid. - static DebugLoc getUnknownLoc() { DebugLoc L; L.Idx = 0; return L; } + static DebugLoc getUnknownLoc() { DebugLoc L; L.Idx = ~0U; return L; } static DebugLoc get(unsigned idx) { DebugLoc L; L.Idx = idx; return L; } unsigned getIndex() const { return Idx; } - /// isInvalid - Return true if the DebugLoc is invalid. - bool isInvalid() const { return Idx == ~0U; } - /// isUnknown - Return true if there is no debug info for the SDNode / /// MachineInstr. - bool isUnknown() const { return Idx == 0; } + bool isUnknown() const { return Idx == ~0U; } bool operator==(const DebugLoc &DL) const { return Idx == DL.Idx; } bool operator!=(const DebugLoc &DL) const { return !(*this == DL); } diff --git a/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp b/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp index e5a30c88be..c37f8cd294 100644 --- a/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp +++ b/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp @@ -28,6 +28,7 @@ #include "llvm/CallingConv.h" #include "llvm/Constants.h" #include "llvm/DerivedTypes.h" +#include "llvm/Function.h" #include "llvm/GlobalVariable.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/Compiler.h" @@ -1289,17 +1290,23 @@ SDValue SelectionDAGLegalize::LegalizeOp(SDValue Op) { unsigned Line = DSP->getLine(); unsigned Col = DSP->getColumn(); - - // A bit self-referential to have DebugLoc on Debug_Loc nodes, but - // it won't hurt anything. - if (useDEBUG_LOC) { - SDValue Ops[] = { Tmp1, DAG.getConstant(Line, MVT::i32), + + const Function *F = DAG.getMachineFunction().getFunction(); + + if (!F->hasFnAttr(Attribute::OptimizeForSize)) { + // A bit self-referential to have DebugLoc on Debug_Loc nodes, but it + // won't hurt anything. + if (useDEBUG_LOC) { + SDValue Ops[] = { Tmp1, DAG.getConstant(Line, MVT::i32), DAG.getConstant(Col, MVT::i32), DAG.getConstant(SrcFile, MVT::i32) }; - Result = DAG.getNode(ISD::DEBUG_LOC, dl, MVT::Other, Ops, 4); + Result = DAG.getNode(ISD::DEBUG_LOC, dl, MVT::Other, Ops, 4); + } else { + unsigned ID = DW->RecordSourceLine(Line, Col, SrcFile); + Result = DAG.getLabel(ISD::DBG_LABEL, dl, Tmp1, ID); + } } else { - unsigned ID = DW->RecordSourceLine(Line, Col, SrcFile); - Result = DAG.getLabel(ISD::DBG_LABEL, dl, Tmp1, ID); + Result = Tmp1; // chain } } else { Result = Tmp1; // chain diff --git a/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp b/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp index 6139638dab..60e8f34651 100644 --- a/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp +++ b/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp @@ -3915,8 +3915,12 @@ SelectionDAGLowering::visitIntrinsicCall(CallInst &I, unsigned Intrinsic) { if (DW && DW->ValidDebugInfo(RSI.getContext())) { unsigned LabelID = DW->RecordRegionStart(cast<GlobalVariable>(RSI.getContext())); - DAG.setRoot(DAG.getLabel(ISD::DBG_LABEL, getCurDebugLoc(), - getRoot(), LabelID)); + const Function *F = I.getParent()->getParent(); + + // FIXME: Support more than just -Os. + if (!F->hasFnAttr(Attribute::OptimizeForSize)) + DAG.setRoot(DAG.getLabel(ISD::DBG_LABEL, getCurDebugLoc(), + getRoot(), LabelID)); } return 0; @@ -3927,8 +3931,12 @@ SelectionDAGLowering::visitIntrinsicCall(CallInst &I, unsigned Intrinsic) { if (DW && DW->ValidDebugInfo(REI.getContext())) { unsigned LabelID = DW->RecordRegionEnd(cast<GlobalVariable>(REI.getContext())); - DAG.setRoot(DAG.getLabel(ISD::DBG_LABEL, getCurDebugLoc(), - getRoot(), LabelID)); + const Function *F = I.getParent()->getParent(); + + // FIXME: Support more than just -Os. + if (!F->hasFnAttr(Attribute::OptimizeForSize)) + DAG.setRoot(DAG.getLabel(ISD::DBG_LABEL, getCurDebugLoc(), + getRoot(), LabelID)); } return 0; @@ -3950,28 +3958,36 @@ SelectionDAGLowering::visitIntrinsicCall(CallInst &I, unsigned Intrinsic) { // function start. It will be emitted at asm emission time. However, // create a label if this is a beginning of inlined function. unsigned Line = Subprogram.getLineNumber(); - unsigned LabelID = DW->RecordSourceLine(Line, 0, SrcFile); - if (DW->getRecordSourceLineCount() != 1) - DAG.setRoot(DAG.getLabel(ISD::DBG_LABEL, getCurDebugLoc(), - getRoot(), LabelID)); + // FIXME: Support more than just -Os. + const Function *F = I.getParent()->getParent(); + if (!F->hasFnAttr(Attribute::OptimizeForSize)) { + unsigned LabelID = DW->RecordSourceLine(Line, 0, SrcFile); + if (DW->getRecordSourceLineCount() != 1) + DAG.setRoot(DAG.getLabel(ISD::DBG_LABEL, getCurDebugLoc(), + getRoot(), LabelID)); + } setCurDebugLoc(DebugLoc::get(DAG.getMachineFunction(). - getOrCreateDebugLocID(SrcFile, Line, 0))); + getOrCreateDebugLocID(SrcFile, Line, 0))); } return 0; } case Intrinsic::dbg_declare: { - DwarfWriter *DW = DAG.getDwarfWriter(); - DbgDeclareInst &DI = cast<DbgDeclareInst>(I); - Value *Variable = DI.getVariable(); - if (DW && DW->ValidDebugInfo(Variable)) - DAG.setRoot(DAG.getNode(ISD::DECLARE, dl, MVT::Other, getRoot(), - getValue(DI.getAddress()), getValue(Variable))); + const Function *F = I.getParent()->getParent(); + if (!F->hasFnAttr(Attribute::OptimizeForSize)) { + DwarfWriter *DW = DAG.getDwarfWriter(); + DbgDeclareInst &DI = cast<DbgDeclareInst>(I); + Value *Variable = DI.getVariable(); + if (DW && DW->ValidDebugInfo(Variable)) + DAG.setRoot(DAG.getNode(ISD::DECLARE, dl, MVT::Other, getRoot(), + getValue(DI.getAddress()), getValue(Variable))); + } else { + // FIXME: Do something sensible here when we support debug declare. + } return 0; } - case Intrinsic::eh_exception: { if (!CurMBB->isLandingPad()) { // FIXME: Mark exception register as live in. Hack for PR1508. diff --git a/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp b/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp index 847355c50d..75a34a6ec6 100644 --- a/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp +++ b/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp @@ -726,15 +726,20 @@ void X86ATTAsmPrinter::printMachineInstruction(const MachineInstr *MI) { ++EmittedInsts; if (TAI->doesSupportDebugInformation()) { - static DebugLoc PrevDL = DebugLoc::getUnknownLoc(); - DebugLoc CurDL = MI->getDebugLoc(); + const Function *F = MF->getFunction(); - if (!CurDL.isInvalid() && !CurDL.isUnknown() && PrevDL != CurDL) { - DebugLocTuple DLT = MF->getDebugLocTuple(CurDL); - printLabel(DW->RecordSourceLine(DLT.Line, DLT.Col, DLT.Src)); - } + // FIXME: Support more than '-Os'. + if (F->hasFnAttr(Attribute::OptimizeForSize)) { + static DebugLoc PrevDL = DebugLoc::getUnknownLoc(); + DebugLoc CurDL = MI->getDebugLoc(); + + if (!CurDL.isUnknown() && PrevDL != CurDL) { + DebugLocTuple DLT = MF->getDebugLocTuple(CurDL); + printLabel(DW->RecordSourceLine(DLT.Line, DLT.Col, DLT.Src)); + } - PrevDL = CurDL; + PrevDL = CurDL; + } } // Call the autogenerated instruction printer routines. |