[LLVMdev] collect end line number for scope

Devang Patel dpatel at apple.com
Wed Oct 5 09:34:13 PDT 2011


If you want to decorate MachineInstrs then for the end of scope you're not looking at "}" but instead you're looking at _last_ machine instruction in that scope. Now, if you want to find out start and end MachineInstrs for a lexical scope (and corresponding line numbers) then see CodeGen/LexicalScopes pass. It collects lexical scope information and maps MIs to respective lexical scopes.


On Oct 5, 2011, at 3:48 AM, Pankaj Gode wrote:

> Hi,
> The link and the information shared was helpful.
> I will make my problem definition more clear.
> While I am "asm printing" target code, I also want to emit scope related information.
> Scope related information includes,
> - for each scope, start line, end line, start column, end column
> and
> - scope heirarchy.
> As scope is delimited by "{" and "}" (for an input C/C++ code), hence wanted to collect "endline" for scope.
> When I went through the ".ll" emitted by llc, i could find the "startline" in metadata.
> For this I could think of 2 approaches
> 1. Create a pass in llvm, to collect this information from the llvm instructions, by simply traversing them.
>   Identifying line number for each instruction and checking on the lexical block it points to. Also would maintain the parent/child lexical block relation using metadata information.
>   My "startline" is least line number associated with lexical block, and "endline" number is max line number associated with lexical block.
> 2. While "asm printing", traverse through the machine instruction and collect the information in similar way as 1.
> I am not sure whether I should collect it from Clang AST nodes.
> Regards,
> Pankaj
> From: Devang Patel <dpatel at apple.com>
> To: Pankaj Gode <godepankaj at yahoo.com>
> Cc: "llvmdev at cs.uiuc.edu" <llvmdev at cs.uiuc.edu>
> Sent: Tuesday, October 4, 2011 10:08 PM
> Subject: Re: [LLVMdev] collect end line number for scope
> Pankaj,
> On Oct 3, 2011, at 4:36 AM, Pankaj Gode wrote:
>> Hi All,
>> int global;
>> int func( int t)
>> { 
>>   //scope 1
>>   {
>>      ....
>>   } <-----
>>   return x;
>> }
>> For the above code, i want to collect endline (indicated by <---) for the scope. Can we get this information from the Dwarf Information in llvm 2.9 ?
> If there is no code generated for a source line with just "}", so you are not going to get that line number in debug info (because there is not any llvm instruction). You can access the line number for the last statement/expression in the scope. See http://llvm.org/docs/SourceLevelDebugging.html#ccxx_compile_units for a code snippet on how to get line number from an llvm instruction.
> What exactly are you trying to do? Depending on your needs, you may be able to access clang AST nodes to get exact line and column number information for "}" irrespective of debug info.
> -
> Devang

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20111005/1b2db5b7/attachment.html>

More information about the llvm-dev mailing list