<div dir="ltr">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">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></div><div class="gmail_extra"><br><br><div class="gmail_quote">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>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><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>_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@cs.uiuc.edu">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>