mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-17 21:29:20 +00:00
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:
parent
7d78a2ab7e
commit
5bf6f25b4a
@ -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.
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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();
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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]>;
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user