<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">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>