[LLVMdev] debug stoppoint nodes with -fast option

vasudev vasudev.negi at microchip.com
Fri Apr 17 20:57:42 PDT 2009


Can we help in local variable debug info work.

Dale Johannesen wrote:
> On Apr 7, 2009, at 9:52 PMPDT, vasudev wrote:
>
>   
>> Thanks for the info regarding DebugLoc field.  Another related  
>> question
>> that I have is  regarding debug info for local variables.  With -fast
>> option, ISD::DECLARE nodes are created in DAG for debug info of local
>> variables. I am planning to custom handle these nodes, get the  
>> required
>> info from llvm.dbg.variable global address and emit it in ISel.  But
>> without -fast option ISD::DECLARE nodes are not created. How can i
>> access the debug info for local variables in that case? Is it  
>> available
>> directly somewhere in AsmPrinter  like the debug info for  global  
>> variables?
>>     
>
> Not yet.  The Declare nodes interfere with optimizations, as do the  
> Stoppoint nodes:  they count as an extra Use, which affects many  
> optimizations that are looking for a single Use (of the alloca node,  
> or whatever).   Rather than try to hunt these all down, the plan is to  
> reimplement declarations in a way that isn't represented as a Use.   
> This is in the early stages yet and I can't give you a date when it  
> will work, sorry.
>
>   
>> Dale Johannesen wrote:
>>     
>>> On Apr 5, 2009, at 11:54 PMPDT, vasudev wrote:
>>>       
>>>> I need to generate line number debug information for PIC16 target.
>>>> PIC16 does not support dwarf format. It supports coff format. So I
>>>> need
>>>> to custom handle the STOPPOINT nodes. Without -fast option the
>>>> STOPPOINT
>>>> nodes are not created in dag because of the below check in
>>>> SelectionDAGBuild.cpp
>>>>    if (Fast)
>>>>       DAG.setRoot(DAG.getDbgStopPoint(getRoot(),
>>>> If I give -fast option then the Fast flag is true, but the dag  
>>>> doesn't
>>>> contain STOPPOINT nodes.
>>>>
>>>>         
>>> Right.  Currently, the way we tell whether optimization was requested
>>> at the command line level is to look at -fast; -O0 == -fast.
>>> The stoppoint nodes enforce an ordering of loads and stores
>>> corresponding to the original source, which means that putting them  
>>> in
>>> without -fast would lead to codegen (scheduling) differences  
>>> between -
>>> O and -O -g.  We don't want that.
>>>
>>> Instead, the debug info is transferred at this point from stoppoint
>>> nodes to the DebugLoc field in each MachineInstr node.  You should
>>> probably use that.
>>>
>>> (The current state of debug info with -O is that we think -g never
>>> affects codegen; violations of that should be reported as bugs.  The
>>> quality of the debug info has not been worked on much and is
>>> problematic.)
>>>
>>>
>>>       
>>>> If  I have simple loads and stores in source
>>>> code, the dag doesn't contain them too. Why are these nodes not  
>>>> being
>>>> created?
>>>>
>>>>         
>>> I don't know.  Something to do with your target, they appear for me.
>>>
>>> _______________________________________________
>>> LLVM Developers mailing list
>>> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>>
>>>       
>> _______________________________________________
>> LLVM Developers mailing list
>> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>     
>
> _______________________________________________
> 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