[LLVMdev] Handling of DebugLocs during CSE of SelectionDAG nodes.
Kyriakos Georgiou
kyriakos at xmos.com
Tue Sep 13 04:01:19 PDT 2011
I've been investigating a case with the XCore target (which doesn't use
FastISel) where the DWARF line number emitted at -O0 results in the xgdb
visiting source lines in an unexpected order. I've tracked down the
problem to the handling of DebugLocs in the selection DAG, in the getNode
method shown bellow.
It first tries to find if a similar node already exists in order to use that one
otherwise it creates a new one. The problem of this approach is that it will
wrongly use the line number debug info from the first node it will find. I
can not see any reasonable way of dealing with that, but only dropping the
line number info from that node in order to keep the debugger behaving
correctly. Is that the correct approach? Are there any other suggestions?
02367 /// getNode - Gets or creates the specified node.
02368 ///
02369 SDValue SelectionDAG::getNode(unsigned Opcode, DebugLoc DL, EVT VT) {
02370 FoldingSetNodeID ID;
02371 AddNodeIDNode(ID, Opcode, getVTList(VT), 0, 0);
02372 void *IP = 0;
02373 if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
02374 return SDValue(E, 0);
02375
02376 SDNode *N = new (NodeAllocator) SDNode(Opcode, DL, getVTList(VT));
02377 CSEMap.InsertNode(N, IP);
02378
02379 AllNodes.push_back(N);
02380 #ifndef NDEBUG
02381 VerifySDNode(N);
02382 #endif
02383 return SDValue(N, 0);
02384 }
More information about the llvm-dev
mailing list