<div dir="ltr">Hi,<div><br></div><div>I'm having a problem with the use iterator. Each "use" that I see, when using the use_iterator, is the same as the "def". Meaning, in the code below the pDef is always equal to pUse pointer for every instruction in all basic blocks (except terminators).</div><div><br></div><div><div>            for (auto i = inst_begin(f), ie = inst_end(f); i != ie; ++i)</div><div>          </div><div>                Instruction* pDef = &(*i);</div><div>                errs() << "Def: " << *pDef << "\n";</div><div><br></div><div>                for (auto ui = pDef->use_begin(), uie = pDef->use_end(); ui != uie; ++ui)</div><div>                {<br></div><div>                    Instruction* pUse = dyn_cast<Instruction>(*ui);</div><div>                    errs() << "  Use: \t" << *pUse << "\n";</div><div>                }</div><div>            }</div></div><div><br></div><div>However, everything works as expected when using the range-based use iterator with the following code.</div><div><br></div><div><div>            for (auto i = inst_begin(f), ie = inst_end(f); i != ie; ++i)</div><div>            {</div><div>                Instruction* pDef = &(*i);</div><div>                errs() << "Def: " << *pDef << "\n";</div><div><br></div><div>                for (User* pUser : pDef->users())</div><div>                {</div><div>                    Instruction* pUse = dyn_cast<Instruction>(pUser);</div><div>                    errs() << "  Use: \t" << *pUse << "\n";</div><div>                }</div><div>            }</div></div><div><br></div><div>Also, the code is executed inside a function pass. So was initially thinking I somehow screwed up the use information in a previous pass. However, I would assume the range-based iterator would not work as well but it does.<br></div><div><br></div><div>Finally, I'm currently using LLVM 3.5.1 built for Windows. Google hasn't been much help. Anybody have any suggestions as to why the first example above doesn't work?</div><div><br></div><div>Thanks,<br>Zack</div></div>