[LLVMdev] The use iterator not working...
Jonathan Roelofs
jonathan at codesourcery.com
Tue Jun 9 19:25:08 PDT 2015
On 6/9/15 8:02 PM, Zack Waters wrote:
> Hi,
>
> 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).
>
> for (auto i = inst_begin(f), ie = inst_end(f); i != ie; ++i)
> Instruction* pDef = &(*i);
> errs() << "Def: " << *pDef << "\n";
>
> for (auto ui = pDef->use_begin(), uie =
> pDef->use_end(); ui != uie; ++ui)
> {
'user' != 'use'.
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.
http://llvm.org/docs/doxygen/html/classllvm_1_1Use.html
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`.
HTH,
Jon
> Instruction* pUse = dyn_cast<Instruction>(*ui);
> errs() << " Use: \t" << *pUse << "\n";
> }
> }
>
> However, everything works as expected when using the range-based use
> iterator with the following code.
>
> for (auto i = inst_begin(f), ie = inst_end(f); i != ie; ++i)
> {
> Instruction* pDef = &(*i);
> errs() << "Def: " << *pDef << "\n";
>
> for (User* pUser : pDef->users())
> {
> Instruction* pUse = dyn_cast<Instruction>(pUser);
> errs() << " Use: \t" << *pUse << "\n";
> }
> }
>
> 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.
>
> 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?
>
> Thanks,
> Zack
>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
--
Jon Roelofs
jonathan at codesourcery.com
CodeSourcery / Mentor Embedded
More information about the llvm-dev
mailing list