[LLVMdev] collect end line number for scope

Pankaj Gode godepankaj at yahoo.com
Fri Oct 7 07:47:03 PDT 2011

I had a look at CodeGen/LexicalScopes and decided to use it. I contains almost everything I want (other attributes can be easily extracted).  
As I am using llvm 2.9 and can't migrate to the latest llvm as of now, so I am using the LexicalScopes information while printing.

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: Wednesday, October 5, 2011 10:04 PM
Subject: Re: [LLVMdev] collect end line number for scope


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:

>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
>- 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. 
>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
>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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20111007/bf75e681/attachment.html>

More information about the llvm-dev mailing list