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/396fc5b5/attachment.html>
Pankaj, 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. - Devang 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>
Hi, 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. Thanks. 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: Wednesday, October 5, 2011 10:04 PM Subject: Re: [LLVMdev] collect end line number for scope Pankaj, 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. - Devang 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/20111007/bf75e681/attachment.html>