- Use the "Fast" flag instead of "OptimizeForSize" to determine whether to emit
a DBG_LABEL or not. We want to fall back to the original way of emitting debug
info when we're in -O0/-fast mode.
- Add plumbing in to pass the "Fast" flag to places that need it.
- XFAIL DebugInfo/deaddebuglabel.ll. This is finding 11 labels instead of 8. I
need to investigate still.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@65367 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/include/llvm/CodeGen/DwarfWriter.h b/include/llvm/CodeGen/DwarfWriter.h
index dc844e1..14fc89b 100644
--- a/include/llvm/CodeGen/DwarfWriter.h
+++ b/include/llvm/CodeGen/DwarfWriter.h
@@ -48,7 +48,10 @@
/// DE - Provides the DwarfWriter exception implementation.
///
DwarfException *DE;
-
+
+ /// FastCodeGen - True if generating code via the "fast" isel.
+ ///
+ bool FastCodeGen;
public:
static char ID; // Pass identification, replacement for typeid
@@ -104,6 +107,9 @@
/// ShouldEmitDwarfDebug - Returns true if Dwarf debugging declarations should
/// be emitted.
bool ShouldEmitDwarfDebug() const;
+
+ bool getFastCodeGen() const { return FastCodeGen; }
+ void setFastCodeGen(bool Fast) { FastCodeGen = Fast; }
};
diff --git a/include/llvm/CodeGen/SelectionDAG.h b/include/llvm/CodeGen/SelectionDAG.h
index 5f3196a..32d9f42 100644
--- a/include/llvm/CodeGen/SelectionDAG.h
+++ b/include/llvm/CodeGen/SelectionDAG.h
@@ -216,7 +216,7 @@
///
/// Note that this is an involved process that may invalidate pointers into
/// the graph.
- void Legalize(bool TypesNeedLegalizing);
+ void Legalize(bool TypesNeedLegalizing, bool Fast);
/// RemoveDeadNodes - This method deletes all unreachable nodes in the
/// SelectionDAG.
diff --git a/lib/CodeGen/SelectionDAG/FastISel.cpp b/lib/CodeGen/SelectionDAG/FastISel.cpp
index fb3d101..c1b93bf 100644
--- a/lib/CodeGen/SelectionDAG/FastISel.cpp
+++ b/lib/CodeGen/SelectionDAG/FastISel.cpp
@@ -370,6 +370,7 @@
unsigned Line = Subprogram.getLineNumber();
unsigned LabelID = DW->RecordSourceLine(Line, 0, SrcFile);
setCurDebugLoc(DebugLoc::get(MF.getOrCreateDebugLocID(SrcFile, Line, 0)));
+ DW->setFastCodeGen(true);
if (DW->getRecordSourceLineCount() != 1) {
const TargetInstrDesc &II = TII.get(TargetInstrInfo::DBG_LABEL);
diff --git a/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp b/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
index 0ab7496..3cfe4f4 100644
--- a/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
+++ b/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
@@ -56,6 +56,7 @@
TargetLowering &TLI;
SelectionDAG &DAG;
bool TypesNeedLegalizing;
+ bool Fast;
// Libcall insertion helpers.
@@ -137,7 +138,8 @@
}
public:
- explicit SelectionDAGLegalize(SelectionDAG &DAG, bool TypesNeedLegalizing);
+ explicit SelectionDAGLegalize(SelectionDAG &DAG, bool TypesNeedLegalizing,
+ bool fast);
/// getTypeAction - Return how we should legalize values of this type, either
/// it is already legal or we need to expand it into multiple registers of
@@ -362,9 +364,10 @@
return TLI.isShuffleMaskLegal(Mask, VT) ? Mask.getNode() : 0;
}
-SelectionDAGLegalize::SelectionDAGLegalize(SelectionDAG &dag, bool types)
+SelectionDAGLegalize::SelectionDAGLegalize(SelectionDAG &dag,
+ bool types, bool fast)
: TLI(dag.getTargetLoweringInfo()), DAG(dag), TypesNeedLegalizing(types),
- ValueTypeActions(TLI.getValueTypeActions()) {
+ Fast(fast), ValueTypeActions(TLI.getValueTypeActions()) {
assert(MVT::LAST_VALUETYPE <= 32 &&
"Too many value types for ValueTypeActions to hold!");
}
@@ -1289,9 +1292,8 @@
unsigned Line = DSP->getLine();
unsigned Col = DSP->getColumn();
- const Function *F = DAG.getMachineFunction().getFunction();
- if (!F->hasFnAttr(Attribute::OptimizeForSize)) {
+ if (Fast) {
// A bit self-referential to have DebugLoc on Debug_Loc nodes, but it
// won't hurt anything.
if (useDEBUG_LOC) {
@@ -8640,9 +8642,9 @@
// SelectionDAG::Legalize - This is the entry point for the file.
//
-void SelectionDAG::Legalize(bool TypesNeedLegalizing) {
+void SelectionDAG::Legalize(bool TypesNeedLegalizing, bool Fast) {
/// run - This is the main entry point to this class.
///
- SelectionDAGLegalize(*this, TypesNeedLegalizing).LegalizeDAG();
+ SelectionDAGLegalize(*this, TypesNeedLegalizing, Fast).LegalizeDAG();
}
diff --git a/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp b/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp
index 4c73729..bc41713 100644
--- a/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp
+++ b/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp
@@ -3915,6 +3915,7 @@
if (Fast)
DAG.setRoot(DAG.getLabel(ISD::DBG_LABEL, getCurDebugLoc(),
getRoot(), LabelID));
+ DW->setFastCodeGen(Fast);
}
return 0;
@@ -3950,9 +3951,7 @@
// create a label if this is a beginning of inlined function.
unsigned Line = Subprogram.getLineNumber();
- // FIXME: Support more than just -Os.
- const Function *F = I.getParent()->getParent();
- if (!F->hasFnAttr(Attribute::OptimizeForSize)) {
+ if (Fast) {
unsigned LabelID = DW->RecordSourceLine(Line, 0, SrcFile);
if (DW->getRecordSourceLineCount() != 1)
DAG.setRoot(DAG.getLabel(ISD::DBG_LABEL, getCurDebugLoc(),
@@ -3966,8 +3965,7 @@
return 0;
}
case Intrinsic::dbg_declare: {
- const Function *F = I.getParent()->getParent();
- if (!F->hasFnAttr(Attribute::OptimizeForSize)) {
+ if (Fast) {
DwarfWriter *DW = DAG.getDwarfWriter();
DbgDeclareInst &DI = cast<DbgDeclareInst>(I);
Value *Variable = DI.getVariable();
diff --git a/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
index dc5f7d7..e2b1c9e 100644
--- a/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
+++ b/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
@@ -621,9 +621,9 @@
if (TimePassesIsEnabled) {
NamedRegionTimer T("DAG Legalization", GroupName);
- CurDAG->Legalize(DisableLegalizeTypes);
+ CurDAG->Legalize(DisableLegalizeTypes, Fast);
} else {
- CurDAG->Legalize(DisableLegalizeTypes);
+ CurDAG->Legalize(DisableLegalizeTypes, Fast);
}
DOUT << "Legalized selection DAG:\n";
diff --git a/test/DebugInfo/2009-01-30-Method.ll b/test/DebugInfo/2009-01-30-Method.ll
index 6b2a8b9..c17dca1 100644
--- a/test/DebugInfo/2009-01-30-Method.ll
+++ b/test/DebugInfo/2009-01-30-Method.ll
@@ -1,4 +1,4 @@
-; RUN: llvm-as < %s | llc | grep "\\"foo" | count 3
+; RUN: llvm-as < %s | llc -fast | grep "\\"foo" | count 3
; 1 declaration, 1 definition and 1 pubnames entry.
target triple = "i386-apple-darwin*"
%llvm.dbg.anchor.type = type { i32, i32 }
diff --git a/test/DebugInfo/deaddebuglabel.ll b/test/DebugInfo/deaddebuglabel.ll
index d183b8a..5efa27a 100644
--- a/test/DebugInfo/deaddebuglabel.ll
+++ b/test/DebugInfo/deaddebuglabel.ll
@@ -1,5 +1,6 @@
+; RUN: llvm-as < %s | llc -fast | grep "label" | count 8
; PR2614
-; RUN: llvm-as < %s | llc | grep "label" | count 8
+; XFAIL: *
target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-f80:32:32-v64:64:64-v128:128:128-a0:0:64"
target triple = "i686-pc-linux-gnu"
diff --git a/test/DebugInfo/forwardDecl.ll b/test/DebugInfo/forwardDecl.ll
index c918f32..f3e95dd 100644
--- a/test/DebugInfo/forwardDecl.ll
+++ b/test/DebugInfo/forwardDecl.ll
@@ -1,4 +1,4 @@
-; RUN: llvm-as < %s | llc | %prcontext ST 1 | grep 0x1 | count 1
+; RUN: llvm-as < %s | llc -fast | %prcontext ST 1 | grep 0x1 | count 1
target triple = "i386-apple-darwin9.6"
%llvm.dbg.anchor.type = type { i32, i32 }
diff --git a/test/FrontendC++/2006-11-06-StackTrace.cpp b/test/FrontendC++/2006-11-06-StackTrace.cpp
index 55b34ad..15c88df 100644
--- a/test/FrontendC++/2006-11-06-StackTrace.cpp
+++ b/test/FrontendC++/2006-11-06-StackTrace.cpp
@@ -1,6 +1,7 @@
// This is a regression test on debug info to make sure that we can get a
// meaningful stack trace from a C++ program.
-// RUN: %llvmgcc -S -O0 -g %s -o - | llvm-as | llc --disable-fp-elim -o %t.s -f
+// RUN: %llvmgcc -S -O0 -g %s -o - | llvm-as | \
+// RUN: llc --disable-fp-elim -o %t.s -f -fast -relocation-model=pic
// RUN: %compile_c %t.s -o %t.o
// RUN: %link %t.o -o %t.exe
// RUN: echo {break DeepStack::deepest\nrun 17\nwhere\n} > %t.in
diff --git a/test/FrontendC++/2006-11-30-Pubnames.cpp b/test/FrontendC++/2006-11-30-Pubnames.cpp
index 8af99e3..b53d6aa 100644
--- a/test/FrontendC++/2006-11-30-Pubnames.cpp
+++ b/test/FrontendC++/2006-11-30-Pubnames.cpp
@@ -1,7 +1,7 @@
// This is a regression test on debug info to make sure that we can access
// qualified global names.
// RUN: %llvmgcc -S -O0 -g %s -o - | llvm-as | \
-// RUN: llc --disable-fp-elim -o %t.s -f
+// RUN: llc --disable-fp-elim -o %t.s -f -fast
// RUN: %compile_c %t.s -o %t.o
// RUN: %link %t.o -o %t.exe
// RUN: %llvmdsymutil %t.exe
diff --git a/utils/TableGen/AsmWriterEmitter.cpp b/utils/TableGen/AsmWriterEmitter.cpp
index 06495d8..128b893 100644
--- a/utils/TableGen/AsmWriterEmitter.cpp
+++ b/utils/TableGen/AsmWriterEmitter.cpp
@@ -641,7 +641,8 @@
O << "\";\n\n";
O << " if (TAI->doesSupportDebugInformation() &&\n"
- << " DW->ShouldEmitDwarfDebug()) {\n"
+ << " DW->ShouldEmitDwarfDebug() &&\n"
+ << " !DW->getFastCodeGen()) {\n"
<< " const MachineFunction *MF = MI->getParent()->getParent();\n"
<< " DebugLoc CurDL = MI->getDebugLoc();\n\n"
<< " if (!CurDL.isUnknown()) {\n"