<div dir="rtl"><div dir="ltr">Thanks, using getUser() indeed works.  I am still confused by the example in the LLVM Programmer's Manual that says</div><div dir="ltr"><br></div><div dir="ltr"><a href="http://www.llvm.org/docs/ProgrammersManual.html#iterating-over-def-use-use-def-chains" target="_blank" style="font-family:arial,sans-serif;font-size:12.727272033691406px">http://www.llvm.org/docs/ProgrammersManual.html#iterating-over-def-use-use-def-chains</a><br>

</div><div dir="ltr"><br></div><div dir="ltr"><span style="color:rgb(0,0,0);font-family:'Lucida Grande','Lucida Sans Unicode',Geneva,Verdana,sans-serif;font-size:14px;line-height:21px">Finding all of the instructions that </span><em style="color:rgb(0,0,0);font-family:'Lucida Grande','Lucida Sans Unicode',Geneva,Verdana,sans-serif;font-size:14px;line-height:21px">use</em><span style="color:rgb(0,0,0);font-family:'Lucida Grande','Lucida Sans Unicode',Geneva,Verdana,sans-serif;font-size:14px;line-height:21px"> </span><tt class="" style="font-size:0.95em;font-family:Consolas,'Deja Vu Sans Mono','Bitstream Vera Sans Mono',monospace;color:rgb(0,0,0);line-height:21px"><span class="">foo</span></tt><span style="color:rgb(0,0,0);font-family:'Lucida Grande','Lucida Sans Unicode',Geneva,Verdana,sans-serif;font-size:14px;line-height:21px"> is as simple as iterating over the </span><em style="color:rgb(0,0,0);font-family:'Lucida Grande','Lucida Sans Unicode',Geneva,Verdana,sans-serif;font-size:14px;line-height:21px">def-use</em><span style="color:rgb(0,0,0);font-family:'Lucida Grande','Lucida Sans Unicode',Geneva,Verdana,sans-serif;font-size:14px;line-height:21px"> chain of </span><tt class="" style="font-size:0.95em;font-family:Consolas,'Deja Vu Sans Mono','Bitstream Vera Sans Mono',monospace;color:rgb(0,0,0);line-height:21px"><span class="">F</span></tt><span style="color:rgb(0,0,0);font-family:'Lucida Grande','Lucida Sans Unicode',Geneva,Verdana,sans-serif;font-size:14px;line-height:21px">:</span></div>

<div dir="ltr"><pre style="font-family:Consolas,'Deja Vu Sans Mono','Bitstream Vera Sans Mono',monospace;font-size:0.95em;line-height:15.960000038146973px;padding:0.5em;border:1px solid rgb(204,204,204);background-color:rgb(248,248,248);color:rgb(0,0,0)">

<span class="">Function</span> <span class="" style="color:rgb(102,102,102)">*</span><span class="">F</span> <span class="" style="color:rgb(102,102,102)">=</span> <span class="">...;</span>

<span class="" style="color:rgb(0,112,32);font-weight:bold">for</span> <span class="">(</span><span class="">Value</span><span class="" style="color:rgb(102,102,102)">::</span><span class="">use_iterator</span> <span class="">i</span> <span class="" style="color:rgb(102,102,102)">=</span> <span class="">F</span><span class="" style="color:rgb(102,102,102)">-></span><span class="">use_begin</span><span class="">(),</span> <span class="">e</span> <span class="" style="color:rgb(102,102,102)">=</span> <span class="">F</span><span class="" style="color:rgb(102,102,102)">-></span><span class="">use_end</span><span class="">();</span> <span class="">i</span> <span class="" style="color:rgb(102,102,102)">!=</span> <span class="">e</span><span class="">;</span> <span class="" style="color:rgb(102,102,102)">++</span><span class="">i</span><span class="">)</span>
  <span class="" style="color:rgb(0,112,32);font-weight:bold">if</span> <span class="">(</span><span class="">Instruction</span> <span class="" style="color:rgb(102,102,102)">*</span><span class="">Inst</span> <span class="" style="color:rgb(102,102,102)">=</span> <span class="">dyn_cast</span><span class="" style="color:rgb(102,102,102)"><</span><span class="">Instruction</span><span class="" style="color:rgb(102,102,102)">></span><span class="">(</span><b><span class="" style="color:rgb(102,102,102)">*</span><span class="">i</span></b><span class="">))</span> <span class="">{</span></pre>

</div><div dir="ltr"><font color="#000000" face="Lucida Grande, Lucida Sans Unicode, Geneva, Verdana, sans-serif"><span style="line-height:21px">won't (*i) get us back the llvm::Value (def) which is F ?</span></font></div>

<div dir="ltr"><font color="#000000" face="Lucida Grande, Lucida Sans Unicode, Geneva, Verdana, sans-serif"><span style="line-height:21px">should the example code read</span></font></div><div dir="ltr"><pre style="font-size:0.95em;font-family:Consolas,'Deja Vu Sans Mono','Bitstream Vera Sans Mono',monospace;line-height:15.960000038146973px;padding:0.5em;border:1px solid rgb(204,204,204);background-color:rgb(248,248,248);color:rgb(0,0,0)">

  <span class="" style="color:rgb(0,112,32);font-weight:bold">if</span> <span class="">(</span><span class="">Instruction</span> <span class="" style="color:rgb(102,102,102)">*</span><span class="">Inst</span> <span class="" style="color:rgb(102,102,102)">=</span> <span class="">dyn_cast</span><span class="" style="color:rgb(102,102,102)"><</span><span class="">Instruction</span><span class="" style="color:rgb(102,102,102)">></span><span class="">(</span><span class=""><b>i->getUser()</b></span><span class="">))</span> <span class="">{</span></pre>

</div><div class="gmail_extra"><div dir="ltr">Yaron<br></div><div dir="ltr"><br><br><div class="gmail_quote">2014-04-30 12:49 GMT+03:00 James Molloy <span dir="ltr"><<a href="mailto:james@jamesmolloy.co.uk" target="_blank">james@jamesmolloy.co.uk</a>></span>:<br>

<blockquote class="gmail_quote" style="margin:0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;border-right-width:1px;border-right-color:rgb(204,204,204);border-right-style:solid;padding-left:1ex;padding-right:1ex">

Hi Yaron,<div><br></div><div>A Use is an edge between a Value and its users. If you dereference a Use, you get the Value it points to (which of course is your function - the thing that "is being used" is F). What you want is the *user* of that use, so you need to call U.getUser().</div>


<div><br></div><div><a href="http://llvm.org/docs/doxygen/html/classllvm_1_1Use.html#details" target="_blank">http://llvm.org/docs/doxygen/html/classllvm_1_1Use.html#details</a><br></div><div><br></div><div>Cheers,</div>

<div><br></div><div>
James</div></blockquote></div><div class="gmail_extra"><br><br><div class="gmail_quote"><div><div class="h5">On 30 April 2014 10:01, Yaron Keren <span dir="ltr"><<a href="mailto:yaron.keren@gmail.com" target="_blank">yaron.keren@gmail.com</a>></span> wrote:<br>


</div></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div><div class="h5"><div dir="rtl"><div dir="ltr">

Hi,</div><div dir="ltr"><br></div><div dir="ltr">I use the code from the LLVM programmer manual</div>
<div dir="ltr"><br></div><div dir="ltr"><a href="http://www.llvm.org/docs/ProgrammersManual.html#iterating-over-def-use-use-def-chains" target="_blank">http://www.llvm.org/docs/ProgrammersManual.html#iterating-over-def-use-use-def-chains</a><br>




</div><div dir="ltr"><br></div><div dir="ltr"><div dir="ltr">  <font face="courier new, monospace">for (llvm::Value::use_iterator i = F->use_begin(), e = F->use_end(); i != e; ++i) {</font></div><div><br></div></div>




<div dir="ltr">to iterate over Function '_Z2tcv' uses in the trivial module</div><div dir="ltr"><br></div><div dir="ltr"><div dir="ltr"><font face="courier new, monospace">; ModuleID = 'module'</font></div>




<div dir="ltr"><font face="courier new, monospace">target datalayout = "e-m:w-p:32:32-i64:64-f80:32-n8:16:32-S32"</font></div><div dir="ltr"><font face="courier new, monospace">target triple = "i686-pc-windows-gnu"</font></div>




<div dir="ltr"><font face="courier new, monospace"><br></font></div><div dir="ltr"><font face="courier new, monospace">; Function Attrs: nounwind</font></div><div dir="ltr"><font face="courier new, monospace">define void @_Z2tcv() #0 {</font></div>




<div dir="ltr"><font face="courier new, monospace">entry:</font></div><div dir="ltr"><font face="courier new, monospace">  ret void</font></div><div dir="ltr"><font face="courier new, monospace">}</font></div><div dir="ltr">




<font face="courier new, monospace"><br></font></div><div dir="ltr"><font face="courier new, monospace">; Function Attrs: nounwind</font></div><div dir="ltr"><font face="courier new, monospace">define i32 @main() #0 {</font></div>




<div dir="ltr"><font face="courier new, monospace">entry:</font></div><div dir="ltr"><font face="courier new, monospace">  call void @_Z2tcv()</font></div><div dir="ltr"><font face="courier new, monospace">  ret i32 0</font></div>




<div dir="ltr"><font face="courier new, monospace">}</font></div><div dir="ltr"><font face="courier new, monospace"><br></font></div><div dir="ltr"><font face="courier new, monospace">attributes #0 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"</font></div>




<div dir="ltr"><font face="courier new, monospace">"no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft</font></div>




<div dir="ltr"><font face="courier new, monospace">-float"="false" }</font></div><div dir="ltr"><font face="courier new, monospace"><br></font></div><div dir="ltr"><font face="courier new, monospace">!llvm.ident = !{!0}</font></div>




<div dir="ltr"><font face="courier new, monospace"><br></font></div><div dir="ltr"><font face="courier new, monospace">!0 = metadata !{metadata !"clang version 3.5.0 (207351)"}</font></div><div dir="ltr"><br></div>




<div>_Z2tcv has indeed one use, as expected, but the use is not a call instruction as in main as expected so</div><div><br></div><div><font face="courier new, monospace"> llvm::Instruction *Inst = dyn_cast<llvm::Instruction>(*i)</font><br>




</div><div><br></div><div>results in NULL.</div><div><br></div><div>Examining the use value with the code<br></div><div><br></div><div><font face="courier new, monospace">const llvm::Use &U = (*i);</font><br></div><div>




<br></div><div>indeed shows that U is same value as F, so F uses itself??</div><div><br></div><div>I have seen this in more complicated cases, the number of uses is as expected but the uses always point to the function or variable and not the real users.</div>




<div><br></div><div>What is wrong?<br></div><div><br></div><div>Thanks, Yaron</div><div><br></div><div dir="ltr"><br></div></div></div>
<br></div></div>_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@cs.uiuc.edu" target="_blank">cfe-dev@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
<br></blockquote></div><br></div></div></div></div>