[LLVMdev] Local variable information in scope
Eric Christopher
echristo at apple.com
Fri Oct 14 18:52:50 PDT 2011
With ToT clang I get output that looks something like this:
0x00000051: TAG_subprogram [2] *
AT_sibling( {0x000000be} )
AT_name( "func" )
AT_decl_file( "/Users/echristo/bar.c" )
AT_decl_line( 2 )
AT_prototyped( 0x01 )
AT_type( {0x000000be} ( int ) )
AT_external( 0x01 )
AT_low_pc( 0x0000000000000000 )
AT_high_pc( 0x0000000000000017 )
AT_frame_base( rbp )
0x00000075: TAG_formal_parameter [3]
AT_name( "t" )
AT_decl_file( "/Users/echristo/bar.c" )
AT_decl_line( 1 )
AT_type( {0x000000be} ( int ) )
AT_location( fbreg -4 )
0x00000081: TAG_lexical_block [4] *
AT_low_pc( 0x0000000000000007 )
AT_high_pc( 0x0000000000000017 )
0x00000092: TAG_variable [5]
AT_name( "x" )
AT_decl_file( "/Users/echristo/bar.c" )
AT_decl_line( 3 )
AT_type( {0x000000be} ( int ) )
AT_location( fbreg -8 )
0x0000009e: TAG_lexical_block [4] *
AT_low_pc( 0x0000000000000007 )
AT_high_pc( 0x0000000000000012 )
0x000000af: TAG_variable [5]
AT_name( "a" )
AT_decl_file( "/Users/echristo/bar.c" )
AT_decl_line( 6 )
AT_type( {0x000000be} ( int ) )
AT_location( fbreg -12 )
using your test case from below slightly modified to make sure that a was actually used.
Which appears to be exactly what you were looking for? And yes, it matches the dbg.declare instruction.
-eric
On Oct 13, 2011, at 1:43 AM, Pankaj Gode wrote:
>
> Hi,
>
> I want to list some additional information on this.
>
> The variable collection I am looking at is, "variables 'declared' in scope".
>
> 1. When I traverse the MachineInstructions in the LexicalScopes ranges, and check for variables, I get variables used in this scope.
> The variables listed include variables which may not have been declared in the scope. (for example "int t", which is not declared in scope1, is listed.)
> I do this by checking if the instruction uses memoperands then I collect name of value.
>
> So, for the example below
> int func( int t)
> {
> int x;
> //scope 1
> {
> int a;
> ....
> }
> return x;
> }
>
> what I am expecting is as below:
> <scope name>: <list of variables declared in scope>
> func scope: t, x
> scope 1: a
>
>
> 2. I checked the "CodeGen/AsmPrinter/DwarfDebug.cpp" as reference, to find mapping of "MachineInstruction" to "llvm.dbg.declare", to extract variables declared in scope.
>
> I am not sure whether there is any other way to get to variables declared in scope.
>
>
> Regards,
> Pankaj
>
>
> On Oct 12, 2011, at 3:14 AM, Pankaj Gode wrote:
>
>> Hi all,
>>
>> Using "CodeGen/LexicalScopes" pass, I could collect scope information i.e. start and end line numbers.
>>
>> I also want to collect information of variables within the scope.
>>
>> For the below example:
>>
>> int global;
>> int func( int t)
>> {
>> //scope 1
>> {
>> int a;
>> ....
>> }
>> return x;
>> }
>>
>> For "scope 1", I should be able to collect that "a" is a local variable in scope1 and should also be able to identify whether "a" is static or non-static.
>>
>> Regards,
>> Pankaj
>> _______________________________________________
>> 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20111014/98637b01/attachment.html>
More information about the llvm-dev
mailing list