<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:"Calibri Light";
        panose-1:2 15 3 2 2 2 4 3 2 4;}
@font-face
        {font-family:"\@SimSun";
        panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">Hi Stephen,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">A tool within LLVM has been developed to address your issue. Here is a brief description for this tool. Please let me know if you have any questions.
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">Thanks,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">Jin<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">The existing LLVM compiler only provides incomplete hierarchical information such as loopInfo and regionInfo. It does not provide any information to model
 the if branches. It does not provide accurate information to understand whether the loop is do-while loop, while loop or do-loop either. This information is essential for compiler analysis, transformations and program understanding.  In order to overcome these
 issues, the SNodeInfo is designed to provide the complete hierarchical information.
</span><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">An SNode represents a single structured control flow element, e.g. if-then, if-then-else, do-while-loop, while-loop, do-loop,
 switch. In the extreme case, it represents one basic block. At the top level, SNodes are linked to each other
<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">via the Pred/Succ lists to form a complete CFG for the routine. Each SNode consists of one or more structural sub-elements,
 or Children. For example, an if-then-else has Children representing the conditional SNode, the then SNode, and the else SNode. Each child is itself at the top of an arbitrarily complex tree of
<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">SNodes.<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">Given an example in C code and the corresponding LLVM IR, it is hard to figure out the control flow inside the loop from the
 LLVM IR. After the SNodeInfo is built on top of the LLVM IR, it is easy to understand there is a if-then statement inside a loop.<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">void foo(int n, int *b)<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">{<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">    for (int j=0;j<n;j++) {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">      b[j] = j;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">    }<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">}<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">LLVM IR for the example compiled with -g<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">; Function Attrs: nounwind uwtable<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">define void @foo(i32 %n, i32* nocapture %b) #0 !dbg !7 {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">entry:<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">  tail call void @llvm.dbg.value(metadata i32 %n, i64 0, metadata !13, metadata !17), !dbg !18<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">  tail call void @llvm.dbg.value(metadata i32* %b, i64 0, metadata !14, metadata !17), !dbg !18<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">  tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !15, metadata !17), !dbg !19<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">  %cmp5 = icmp sgt i32 %n, 0, !dbg !20<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">  br i1 %cmp5, label %for.body, label %for.cond.cleanup, !dbg !20<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">for.cond.cleanup:                                 ; preds = %for.body, %entry<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">  ret void, !dbg !23<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">for.body:                                         ; preds = %entry, %for.body<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">  %arrayidx = getelementptr inbounds i32, i32* %b, i64 %indvars.iv, !dbg !24<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">  %0 = trunc i64 %indvars.iv to i32, !dbg !24<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">  store i32 %0, i32* %arrayidx, align 4, !dbg !24, !tbaa !26<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1, !dbg !20<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">  %lftr.wideiv = trunc i64 %indvars.iv.next to i32, !dbg !20<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">  %exitcond = icmp eq i32 %lftr.wideiv, %n, !dbg !20<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">  br i1 %exitcond, label %for.cond.cleanup, label %for.body, !dbg !20<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">}<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">Pretty print of SNode Graph<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">   /* B[%entry]  */<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">   /* Line 1 */<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">   tail call void @llvm.dbg.value(metadata i32 %n, i64 0, metadata !13, metadata !17), !dbg !18<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">   tail call void @llvm.dbg.value(metadata i32* %b, i64 0, metadata !14, metadata !17), !dbg !18<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">   /* Line 3 */<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">   tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !15, metadata !17), !dbg !19<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">   %cmp5 = icmp sgt i32 %n, 0, !dbg !20<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">   br i1 %cmp5, label %for.body, label %for.cond.cleanup, !dbg !20<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">   if (%cmp5) {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">      do {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">         /* B[%for.body]  */<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">         %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">         /* Line 4 */<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">         %arrayidx = getelementptr inbounds i32, i32* %b, i64 %indvars.iv, !dbg !24<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">         %0 = trunc i64 %indvars.iv to i32, !dbg !24<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">         store i32 %0, i32* %arrayidx, align 4, !dbg !24, !tbaa !26<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">         /* Line 3 */<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">         %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1, !dbg !20<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">         %lftr.wideiv = trunc i64 %indvars.iv.next to i32, !dbg !20<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">         %exitcond = icmp eq i32 %lftr.wideiv, %n, !dbg !20<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">         br i1 %exitcond, label %for.cond.cleanup, label %for.body, !dbg !20<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">      } while (%exitcond == false)<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">   }<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">   /* B[%for.cond.cleanup]  */<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">   /* Line 6 */<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">   ret void, !dbg !23<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0"><o:p> </o:p></span></p>
<p class="MsoNormal"><a name="_MailEndCompose"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0"><o:p> </o:p></span></a></p>
<p class="MsoNormal"><a name="_____replyseparator"></a><b><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">From:</span></b><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0"> llvm-dev [mailto:llvm-dev-bounces@lists.llvm.org]
<b>On Behalf Of </b>Eli Friedman via llvm-dev<br>
<b>Sent:</b> Wednesday, July 13, 2016 10:55 AM<br>
<b>To:</b> Stephen Thomas <stephen.warner.thomas@gmail.com><br>
<b>Cc:</b> llvm-dev <llvm-dev@lists.llvm.org><br>
<b>Subject:</b> Re: [llvm-dev] IR -> source pretty printing?<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0"><o:p> </o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">On Wed, Jul 13, 2016 at 7:00 AM, Stephen Thomas via llvm-dev <</span><a href="mailto:llvm-dev@lists.llvm.org" target="_blank"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">llvm-dev@lists.llvm.org</span></a><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">>
 wrote:<o:p></o:p></span></p>
<div>
<div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0in;margin-bottom:5.0pt">
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">Hi,<o:p></o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">I often find myself staring at IR and wanting to look at the C source code it corresponds to. To do so, I look up the debug identifier for the given IR
 line, scroll to the bottom of the IR file to find the debug identifier, look at the debug location (source and column), and then look at the source file. Too many steps. What would be great is a tool that took two files, i.e., a .c file and a .bc file, and
 printed out the IR with the corresponding C source right beneath each IR line. <o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">It wouldn't be too hard for me to write such a tool, but I thought I'd check to see if something already exists before I reinvent the wheel. Is there anything
 out there?<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0"><o:p> </o:p></span></p>
</div>
</div>
</blockquote>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">llvm-dis has a -show-annotations option; not precisely what you're looking for, but it does print the line numbers inline.<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri Light",sans-serif;color:#0070C0">-Eli<o:p></o:p></span></p>
</div>
</div>
</div>
</div>
</div>
</body>
</html>