mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-21 18:29:46 +00:00
Update DebugLoc while merging nodes at -O0.
Patch by Kyriakos Georgiou! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146670 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
0481143fcf
commit
0508d047fe
@ -139,6 +139,7 @@ class SelectionDAG {
|
||||
const TargetSelectionDAGInfo &TSI;
|
||||
MachineFunction *MF;
|
||||
LLVMContext *Context;
|
||||
CodeGenOpt::Level OptLevel;
|
||||
|
||||
/// EntryNode - The starting token.
|
||||
SDNode EntryNode;
|
||||
@ -187,7 +188,7 @@ class SelectionDAG {
|
||||
SelectionDAG(const SelectionDAG&); // Do not implement.
|
||||
|
||||
public:
|
||||
explicit SelectionDAG(const TargetMachine &TM);
|
||||
explicit SelectionDAG(const TargetMachine &TM, llvm::CodeGenOpt::Level);
|
||||
~SelectionDAG();
|
||||
|
||||
/// init - Prepare this SelectionDAG to process code in the given
|
||||
@ -1034,6 +1035,7 @@ private:
|
||||
void *&InsertPos);
|
||||
SDNode *FindModifiedNodeSlot(SDNode *N, const SDValue *Ops, unsigned NumOps,
|
||||
void *&InsertPos);
|
||||
SDNode *UpdadeDebugLocOnMergedSDNode(SDNode *N, DebugLoc loc);
|
||||
|
||||
void DeleteNodeNotInCSEMaps(SDNode *N);
|
||||
void DeallocateNode(SDNode *N);
|
||||
|
@ -840,9 +840,9 @@ unsigned SelectionDAG::getEVTAlignment(EVT VT) const {
|
||||
}
|
||||
|
||||
// EntryNode could meaningfully have debug info if we can find it...
|
||||
SelectionDAG::SelectionDAG(const TargetMachine &tm)
|
||||
SelectionDAG::SelectionDAG(const TargetMachine &tm, CodeGenOpt::Level OL)
|
||||
: TM(tm), TLI(*tm.getTargetLowering()), TSI(*tm.getSelectionDAGInfo()),
|
||||
EntryNode(ISD::EntryToken, DebugLoc(), getVTList(MVT::Other)),
|
||||
OptLevel(OL), EntryNode(ISD::EntryToken, DebugLoc(), getVTList(MVT::Other)),
|
||||
Root(getEntryNode()), Ordering(0) {
|
||||
AllNodes.push_back(&EntryNode);
|
||||
Ordering = new SDNodeOrdering();
|
||||
@ -4918,6 +4918,20 @@ SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
|
||||
return N;
|
||||
}
|
||||
|
||||
/// UpdadeDebugLocOnMergedSDNode - If the opt level is -O0 then it throws away
|
||||
/// the line number information on the merged node since it is not possible to
|
||||
/// preserve the information that operation is associated with multiple lines.
|
||||
/// This will make the debugger working better at -O0, were there is a higher
|
||||
/// probability having other instructions associated with that line.
|
||||
///
|
||||
SDNode *SelectionDAG::UpdadeDebugLocOnMergedSDNode(SDNode *N, DebugLoc OLoc) {
|
||||
DebugLoc NLoc = N->getDebugLoc();
|
||||
if (!(NLoc.isUnknown()) && (OptLevel == CodeGenOpt::None) && (OLoc != NLoc)) {
|
||||
N->setDebugLoc(DebugLoc());
|
||||
}
|
||||
return N;
|
||||
}
|
||||
|
||||
/// MorphNodeTo - This *mutates* the specified node to have the specified
|
||||
/// return type, opcode, and operands.
|
||||
///
|
||||
@ -4939,7 +4953,7 @@ SDNode *SelectionDAG::MorphNodeTo(SDNode *N, unsigned Opc,
|
||||
FoldingSetNodeID ID;
|
||||
AddNodeIDNode(ID, Opc, VTs, Ops, NumOps);
|
||||
if (SDNode *ON = CSEMap.FindNodeOrInsertPos(ID, IP))
|
||||
return ON;
|
||||
return UpdadeDebugLocOnMergedSDNode(ON, N->getDebugLoc());
|
||||
}
|
||||
|
||||
if (!RemoveNodeFromCSEMaps(N))
|
||||
@ -5143,8 +5157,9 @@ SelectionDAG::getMachineNode(unsigned Opcode, DebugLoc DL, SDVTList VTs,
|
||||
FoldingSetNodeID ID;
|
||||
AddNodeIDNode(ID, ~Opcode, VTs, Ops, NumOps);
|
||||
IP = 0;
|
||||
if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
|
||||
return cast<MachineSDNode>(E);
|
||||
if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) {
|
||||
return cast<MachineSDNode>(UpdadeDebugLocOnMergedSDNode(E, DL));
|
||||
}
|
||||
}
|
||||
|
||||
// Allocate a new MachineSDNode.
|
||||
|
@ -266,7 +266,7 @@ SelectionDAGISel::SelectionDAGISel(const TargetMachine &tm,
|
||||
CodeGenOpt::Level OL) :
|
||||
MachineFunctionPass(ID), TM(tm), TLI(*tm.getTargetLowering()),
|
||||
FuncInfo(new FunctionLoweringInfo(TLI)),
|
||||
CurDAG(new SelectionDAG(tm)),
|
||||
CurDAG(new SelectionDAG(tm, OL)),
|
||||
SDB(new SelectionDAGBuilder(*CurDAG, *FuncInfo, OL)),
|
||||
GFI(),
|
||||
OptLevel(OL),
|
||||
|
Loading…
Reference in New Issue
Block a user