Add unique id to debug location for debug label use (work in progress.)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25096 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Jim Laskey 2006-01-04 15:04:11 +00:00
parent 7d78a2ab7e
commit 5bf6f25b4a
6 changed files with 33 additions and 22 deletions

View File

@ -356,8 +356,9 @@ namespace ISD {
// DEBUG_LOC - This node is used to represent source line information // DEBUG_LOC - This node is used to represent source line information
// embedded in the code. It takes token chain as input, then a line number, // embedded in the code. It takes token chain as input, then a line number,
// then a column then a file id (provided by MachineDebugInfo. It produces // then a column then a file id (provided by MachineDebugInfo), then a
// a token chain as output. // unique id (provided by MachineDebugInfo for label gen). It produces a
// token chain as output.
DEBUG_LOC, DEBUG_LOC,
// BUILTIN_OP_END - This must be the last enum value in this list. // BUILTIN_OP_END - This must be the last enum value in this list.

View File

@ -50,6 +50,7 @@ namespace llvm {
/// doFinalization - Tear down the debug state after completion of a module. /// doFinalization - Tear down the debug state after completion of a module.
/// ///
bool MachineDebugInfo::doFinalization() { bool MachineDebugInfo::doFinalization() {
return true; return true;
} }

View File

@ -2117,7 +2117,8 @@ SDOperand DAGCombiner::visitDEBUGLOC(SDNode *N) {
return DAG.getNode(ISD::DEBUG_LOC, MVT::Other, Chain.getOperand(0), return DAG.getNode(ISD::DEBUG_LOC, MVT::Other, Chain.getOperand(0),
N->getOperand(1), N->getOperand(1),
N->getOperand(2), N->getOperand(2),
N->getOperand(3)); N->getOperand(3),
N->getOperand(4));
} }
return SDOperand(); return SDOperand();

View File

@ -628,8 +628,10 @@ SDOperand SelectionDAGLegalize::LegalizeOp(SDOperand Op) {
cast<StringSDNode>(Node->getOperand(3))->getValue(); cast<StringSDNode>(Node->getOperand(3))->getValue();
const std::string &dirname = const std::string &dirname =
cast<StringSDNode>(Node->getOperand(4))->getValue(); cast<StringSDNode>(Node->getOperand(4))->getValue();
unsigned id = DebugInfo.RecordSource(fname, dirname); unsigned srcfile = DebugInfo.RecordSource(fname, dirname);
Ops.push_back(DAG.getConstant(id, MVT::i32)); // source file id Ops.push_back(DAG.getConstant(srcfile, MVT::i32)); // source file id
unsigned id = DebugInfo.NextUniqueID();
Ops.push_back(DAG.getConstant(id, MVT::i32)); // label id
Result = DAG.getNode(ISD::DEBUG_LOC, MVT::Other, Ops); Result = DAG.getNode(ISD::DEBUG_LOC, MVT::Other, Ops);
} else { } else {
Result = Tmp1; // chain Result = Tmp1; // chain
@ -659,22 +661,27 @@ SDOperand SelectionDAGLegalize::LegalizeOp(SDOperand Op) {
break; break;
case ISD::DEBUG_LOC: case ISD::DEBUG_LOC:
assert(Node->getNumOperands() == 4 && "Invalid DEBUG_LOC node!"); assert(Node->getNumOperands() == 5 && "Invalid DEBUG_LOC node!");
switch (TLI.getOperationAction(ISD::DEBUG_LOC, MVT::Other)) { switch (TLI.getOperationAction(ISD::DEBUG_LOC, MVT::Other)) {
case TargetLowering::Promote: case TargetLowering::Promote:
case TargetLowering::Expand: case TargetLowering::Expand:
default: assert(0 && "This action is not supported yet!"); default: assert(0 && "This action is not supported yet!");
case TargetLowering::Legal: case TargetLowering::Legal: {
SDOperand Tmp5;
Tmp1 = LegalizeOp(Node->getOperand(0)); // Legalize the chain. Tmp1 = LegalizeOp(Node->getOperand(0)); // Legalize the chain.
Tmp2 = LegalizeOp(Node->getOperand(1)); // Legalize the line #. Tmp2 = LegalizeOp(Node->getOperand(1)); // Legalize the line #.
Tmp3 = LegalizeOp(Node->getOperand(2)); // Legalize the col #. Tmp3 = LegalizeOp(Node->getOperand(2)); // Legalize the col #.
Tmp4 = LegalizeOp(Node->getOperand(3)); // Legalize the source file id. Tmp4 = LegalizeOp(Node->getOperand(3)); // Legalize the source file id.
Tmp5 = LegalizeOp(Node->getOperand(4)); // Legalize the label id.
if (Tmp1 != Node->getOperand(0) || if (Tmp1 != Node->getOperand(0) ||
Tmp2 != Node->getOperand(1) || Tmp2 != Node->getOperand(1) ||
Tmp3 != Node->getOperand(2) || Tmp3 != Node->getOperand(2) ||
Tmp4 != Node->getOperand(3)) { Tmp4 != Node->getOperand(3) ||
Result = DAG.getNode(ISD::DEBUG_LOC,MVT::Other, Tmp1, Tmp2, Tmp3, Tmp4); Tmp5 != Node->getOperand(4)) {
Result =
DAG.getNode(ISD::DEBUG_LOC,MVT::Other, Tmp1, Tmp2, Tmp3, Tmp4, Tmp5);
}
} }
break; break;
} }

View File

@ -955,10 +955,11 @@ def V_SET0 : VXForm_setzero<1220, (ops VRRC:$vD),
// DWARF Pseudo Instructions // DWARF Pseudo Instructions
// //
def DWARF_LOC : Pseudo<(ops i32imm:$line, i32imm:$col, i32imm:$file), def DWARF_LOC : Pseudo<(ops i32imm:$line, i32imm:$col, i32imm:$file,
"; .loc $file, $line, $col", i32imm:$id),
"; .loc $file, $line, $col\nLdebug_loc$id:",
[(dwarf_loc (i32 imm:$line), (i32 imm:$col), [(dwarf_loc (i32 imm:$line), (i32 imm:$col),
(i32 imm:$file))]>; (i32 imm:$file), (i32 imm:$id))]>;
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// PowerPC Instruction Patterns // PowerPC Instruction Patterns

View File

@ -440,8 +440,8 @@ class ComplexPattern<ValueType ty, int numops, string fn, list<SDNode> roots = [
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// Dwarf support. // Dwarf support.
// //
def SDT_dwarf_loc : SDTypeProfile<0, 3, def SDT_dwarf_loc : SDTypeProfile<0, 4,
[SDTCisInt<0>, SDTCisInt<1>, SDTCisInt<2>]>; [SDTCisInt<0>, SDTCisInt<1>, SDTCisInt<2>, SDTCisInt<3>]>;
def dwarf_loc : SDNode<"ISD::DEBUG_LOC", SDT_dwarf_loc,[SDNPHasChain]>; def dwarf_loc : SDNode<"ISD::DEBUG_LOC", SDT_dwarf_loc,[SDNPHasChain]>;