[LLVMdev] Handling of DebugLocs during CSE of SelectionDAG nodes.
Devang Patel
dpatel at apple.com
Tue Sep 13 09:40:06 PDT 2011
On Sep 13, 2011, at 4:01 AM, Kyriakos Georgiou wrote:
> 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?
Only other alternative is to avoid falling back on DAG, at -O0, as much as possible. If … FastISel handles everything then you completely sidestep DAG nodes at -O0.
-
Devang
>
> 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 }
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
More information about the llvm-dev
mailing list