<div dir="ltr">Thanks Dan and Jon. I made an incorrect assumption that the "use" iterator was actually giving me the "user" when de-referencing it.<div><br></div><div>Did it always have this behavior in previous LLVM versions? I've seen lots of examples of the "use" iterator being dereferenced and resulting Instruction pointer being treated as the "user"?</div><div><br></div><div>Thanks,</div><div>Zack</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jun 9, 2015 at 7:25 PM, Jonathan Roelofs <span dir="ltr"><<a href="mailto:jonathan@codesourcery.com" target="_blank">jonathan@codesourcery.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=""><br>
<br>
On 6/9/15 8:02 PM, Zack Waters wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi,<br>
<br>
I'm having a problem with the use iterator. Each "use" that I see, when<br>
using the use_iterator, is the same as the "def". Meaning, in the code<br>
below the pDef is always equal to pUse pointer for every instruction in<br>
all basic blocks (except terminators).<br>
<br>
             for (auto i = inst_begin(f), ie = inst_end(f); i != ie; ++i)<br>
                 Instruction* pDef = &(*i);<br>
                 errs() << "Def: " << *pDef << "\n";<br>
<br>
                 for (auto ui = pDef->use_begin(), uie =<br>
pDef->use_end(); ui != uie; ++ui)<br>
                 {<br>
</blockquote>
<br></span>
'user' != 'use'.<br>
<br>
Think of llvm::Use as the edge between the place where a value is produced, and the place where that value is consumed. The consumer is the 'User', and the Use points at it.<br>
<br>
<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_docs_doxygen_html_classllvm-5F1-5F1Use.html&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=Mfk2qtn1LTDThVkh6-oGglNfMADXfJdty4_bhmuhMHA&m=P9nO53gRzaeWOd6JcPss24m-SNOOVI-ki0Gmt8jG2a4&s=vHntZspdmEIervA_wRJRemP18BYspEqdQnW_J99QC28&e=" target="_blank">http://llvm.org/docs/doxygen/html/classllvm_1_1Use.html</a><br>
<br>
The confusing thing that's happening below is that the llvm::Use is implicitly converted via `llvm::Use::operator Value *() const` to a `Value*`, and that `Value*` is `pDef`.<br>
<br>
<br>
HTH,<br>
<br>
Jon<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">
                     Instruction* pUse = dyn_cast<Instruction>(*ui);<br>
                     errs() << "  Use: \t" << *pUse << "\n";<br>
                 }<br>
             }<br>
<br>
However, everything works as expected when using the range-based use<br>
iterator with the following code.<br>
<br>
             for (auto i = inst_begin(f), ie = inst_end(f); i != ie; ++i)<br>
             {<br>
                 Instruction* pDef = &(*i);<br>
                 errs() << "Def: " << *pDef << "\n";<br>
<br>
                 for (User* pUser : pDef->users())<br>
                 {<br>
                     Instruction* pUse = dyn_cast<Instruction>(pUser);<br>
                     errs() << "  Use: \t" << *pUse << "\n";<br>
                 }<br>
             }<br>
<br>
Also, the code is executed inside a function pass. So was initially<br>
thinking I somehow screwed up the use information in a previous pass.<br>
However, I would assume the range-based iterator would not work as well<br>
but it does.<br>
<br>
Finally, I'm currently using LLVM 3.5.1 built for Windows. Google hasn't<br>
been much help. Anybody have any suggestions as to why the first example<br>
above doesn't work?<br>
<br>
Thanks,<br>
Zack<br>
<br>
<br></span>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:LLVMdev@cs.uiuc.edu" target="_blank">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
<br><span class="HOEnZb"><font color="#888888">
</font></span></blockquote><span class="HOEnZb"><font color="#888888">
<br>
-- <br>
Jon Roelofs<br>
<a href="mailto:jonathan@codesourcery.com" target="_blank">jonathan@codesourcery.com</a><br>
CodeSourcery / Mentor Embedded<br>
</font></span></blockquote></div><br></div>