<html><body><div style="color:#000; background-color:#fff; font-family:Courier New, courier, monaco, monospace, sans-serif;font-size:10pt"><div style="RIGHT: auto"><SPAN style="RIGHT: auto">Hi,</SPAN></div>
<div style="RIGHT: auto"><SPAN style="RIGHT: auto"></SPAN> </div>
<div style="RIGHT: auto"><SPAN style="RIGHT: auto">I had a look at CodeGen/LexicalScopes and decided to use it. I contains almost everything I want (other attributes can be easily extracted).  </SPAN></div>
<div style="RIGHT: auto"><SPAN style="RIGHT: auto">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.</SPAN></div>
<div style="RIGHT: auto"><SPAN style="RIGHT: auto"></SPAN> </div>
<div style="RIGHT: auto"><SPAN style="RIGHT: auto">Thanks. </SPAN></div>
<div style="RIGHT: auto"><SPAN style="RIGHT: auto"><VAR id=yui-ie-cursor></VAR></SPAN> </div>
<div style="RIGHT: auto"><SPAN style="RIGHT: auto">Pankaj</SPAN></div>
<div style="RIGHT: auto"><SPAN style="RIGHT: auto"></SPAN> </div>
<div><BR></div>
<DIV style="FONT-FAMILY: Courier New, courier, monaco, monospace, sans-serif; FONT-SIZE: 10pt">
<DIV style="FONT-FAMILY: times new roman, new york, times, serif; FONT-SIZE: 12pt"><FONT size=2 face=Arial>
<DIV style="BORDER-BOTTOM: #ccc 1px solid; BORDER-LEFT: #ccc 1px solid; PADDING-BOTTOM: 0px; LINE-HEIGHT: 0; MARGIN: 5px 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; HEIGHT: 0px; FONT-SIZE: 0px; BORDER-TOP: #ccc 1px solid; BORDER-RIGHT: #ccc 1px solid; PADDING-TOP: 0px" class=hr contentEditable=false readonly="true"></DIV><B><SPAN style="FONT-WEIGHT: bold">From:</SPAN></B> Devang Patel <dpatel@apple.com><BR><B><SPAN style="FONT-WEIGHT: bold">To:</SPAN></B> Pankaj Gode <godepankaj@yahoo.com><BR><B><SPAN style="FONT-WEIGHT: bold">Cc:</SPAN></B> "llvmdev@cs.uiuc.edu" <llvmdev@cs.uiuc.edu><BR><B><SPAN style="FONT-WEIGHT: bold">Sent:</SPAN></B> Wednesday, October 5, 2011 10:04 PM<BR><B><SPAN style="FONT-WEIGHT: bold">Subject:</SPAN></B> Re: [LLVMdev] collect end line number for scope<BR></FONT><BR>
<DIV id=yiv1035082097>
<DIV>Pankaj,
<DIV><BR></DIV>
<DIV>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.</DIV>
<DIV><BR></DIV>
<DIV>-</DIV>
<DIV>Devang</DIV>
<DIV><BR>
<DIV>
<DIV>On Oct 5, 2011, at 3:48 AM, Pankaj Gode wrote:</DIV><BR class=yiv1035082097Apple-interchange-newline>
<BLOCKQUOTE type="cite">
<DIV>
<DIV style="BACKGROUND-COLOR: rgb(255,255,255); FONT-FAMILY: courier, monaco, monospace, sans-serif; COLOR: rgb(0,0,0); FONT-SIZE: 10pt">
<DIV><SPAN>Hi,</SPAN></DIV>
<DIV><SPAN></SPAN> </DIV>
<DIV><SPAN>The link and the information shared was helpful.</SPAN></DIV>
<DIV><SPAN></SPAN> </DIV>
<DIV><SPAN>I will make my problem definition more clear. </SPAN></DIV>
<DIV><SPAN>While I am "asm printing" target code, I also want to emit scope related information. </SPAN></DIV>
<DIV><SPAN>Scope related information includes, </SPAN></DIV>
<DIV><SPAN>- for each scope, start line, end line, start column, end column</SPAN></DIV>
<DIV><SPAN>and </SPAN></DIV>
<DIV><SPAN>- scope heirarchy. </SPAN></DIV>
<DIV><SPAN>As scope is delimited by "{" and "}" (for an input C/C++ code), hence wanted to collect "endline" for scope. </SPAN></DIV>
<DIV><SPAN>When I went through the ".ll" emitted by llc, i could find the "startline" in metadata. </SPAN></DIV>
<DIV><SPAN></SPAN> </DIV>
<DIV><SPAN>For this I could think of 2 approaches</SPAN></DIV>
<DIV><SPAN>1. Create a pass in llvm, to collect this information from the llvm instructions, by simply traversing them.</SPAN></DIV>
<DIV><SPAN>  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.</SPAN></DIV>
<DIV><SPAN>  My "startline" is least line number associated with lexical block, and "endline" number is max line number associated with lexical block.</SPAN></DIV>
<DIV><SPAN>2. While "asm printing", traverse through the machine instruction and collect the information in similar way as 1. </SPAN></DIV>
<DIV><SPAN></SPAN> </DIV>
<DIV><SPAN>I am not sure whether I should collect it from Clang AST nodes. <VAR id=yiv1035082097yui-ie-cursor></VAR></SPAN></DIV>
<DIV><SPAN></SPAN> </DIV>
<DIV><SPAN>Regards,</SPAN></DIV>
<DIV><SPAN>Pankaj</SPAN></DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV style="FONT-FAMILY: Courier New, courier, monaco, monospace, sans-serif; FONT-SIZE: 10pt">
<DIV style="FONT-FAMILY: times new roman, new york, times, serif; FONT-SIZE: 12pt"><FONT size=2 face=Arial>
<DIV style="BORDER-BOTTOM: #ccc 1px solid; BORDER-LEFT: #ccc 1px solid; PADDING-BOTTOM: 0px; LINE-HEIGHT: 0; MARGIN: 5px 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; HEIGHT: 0px; FONT-SIZE: 0px; BORDER-TOP: #ccc 1px solid; BORDER-RIGHT: #ccc 1px solid; PADDING-TOP: 0px" class=yiv1035082097hr></DIV><B><SPAN style="FONT-WEIGHT: bold">From:</SPAN></B> Devang Patel <<A href="mailto:dpatel@apple.com" rel=nofollow target=_blank ymailto="mailto:dpatel@apple.com">dpatel@apple.com</A>><BR><B><SPAN style="FONT-WEIGHT: bold">To:</SPAN></B> Pankaj Gode <<A href="mailto:godepankaj@yahoo.com" rel=nofollow target=_blank ymailto="mailto:godepankaj@yahoo.com">godepankaj@yahoo.com</A>><BR><B><SPAN style="FONT-WEIGHT: bold">Cc:</SPAN></B> "<A href="mailto:llvmdev@cs.uiuc.edu" rel=nofollow target=_blank ymailto="mailto:llvmdev@cs.uiuc.edu">llvmdev@cs.uiuc.edu</A>" <<A href="mailto:llvmdev@cs.uiuc.edu" rel=nofollow target=_blank
 ymailto="mailto:llvmdev@cs.uiuc.edu">llvmdev@cs.uiuc.edu</A>><BR><B><SPAN style="FONT-WEIGHT: bold">Sent:</SPAN></B> Tuesday, October 4, 2011 10:08 PM<BR><B><SPAN style="FONT-WEIGHT: bold">Subject:</SPAN></B> Re: [LLVMdev] collect end line number for scope<BR></FONT><BR>
<DIV id=yiv1035082097>
<DIV>Pankaj, 
<DIV><BR>
<DIV>
<DIV>On Oct 3, 2011, at 4:36 AM, Pankaj Gode wrote:</DIV><BR class=yiv1035082097Apple-interchange-newline>
<BLOCKQUOTE type="cite">
<DIV>
<DIV style="BACKGROUND-COLOR: rgb(255,255,255); FONT-FAMILY: courier, monaco, monospace, sans-serif; COLOR: rgb(0,0,0); FONT-SIZE: 10pt">
<DIV>Hi All,</DIV>
<DIV> </DIV>
<DIV>int global;</DIV>
<DIV>int func( int t)</DIV>
<DIV>{  </DIV>
<DIV>  //scope 1</DIV>
<DIV>  {</DIV>
<DIV>     ....</DIV>
<DIV>  } <-----</DIV>
<DIV>  return x;</DIV>
<DIV>} <VAR id=yiv1035082097yui-ie-cursor></VAR></DIV>
<DIV> </DIV>
<DIV>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 ? </DIV>
<DIV> </DIV></DIV></DIV></BLOCKQUOTE></DIV><BR>
<DIV>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.</DIV>
<DIV><BR></DIV>
<DIV>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.</DIV>
<DIV><BR></DIV>
<DIV>-</DIV>
<DIV>Devang</DIV></DIV></DIV></DIV><BR><BR></DIV></DIV></DIV></DIV></BLOCKQUOTE></DIV><BR></DIV></DIV></DIV><BR><BR></DIV></DIV></div></body></html>