[LLVMdev] about llvm::use
Daniel Berlin
dberlin at dberlin.org
Tue Mar 24 13:26:10 PDT 2015
On Tue, Mar 24, 2015 at 1:15 PM, Hui Zhang <wayne.huizhang at gmail.com> wrote:
> Hello, all
>
> I don't quite understand the llvm::use class, from the class ref, I read
> that:
>
> *"A Use <http://llvm.org/docs/doxygen/html/classllvm_1_1Use.html>
> represents the edge between a Value
> <http://llvm.org/docs/doxygen/html/classllvm_1_1Value.html> definition and
> its users.This is notionally a two-dimensional linked list"*
>
> I can image that it's like an edge between the operand<->User, but how to
> comprehend the "two-dimensional linked list" ?
>
Dunno what that comment is getting at, other than it covers both the user
and the use itself.
(*Instruction derives from User that derives from Value*)
>
> And I found "use_iterator()" in Value, for example: a Value 'v', if it's
> an operand of many Instructions 'i1,i2,i3...', then in my understanding,
> uses of v are just i1, i2, i3...
>
no, they are the specific parts of i1, i2, i3 that refer to v.
> but what's the difference between use and user in this case ??
>
Use points directly to the *place in the User* that the Value appears
User is the *thing holding the Use*.
So here, i1, i2, i3 are *Users* of Value v. If you use the user_iterator,
that is what it will return
If i1, i2, i3 were looked at as just arrays of operands, like so:
i1 = [foo, v]
i2 = [v, foo]
i3 = [foo, v, bar]
Then the user iterator for v would give you i1, i2, and i3. Those are the
containers that have the use in them.
The use iterator for v will give you something that points to &i1[1],
&i2[0], &i3[1], because those are the actual pointers to the use in those
containers.
Thus, if call setUse on a use, you are *actually changing that specific use
to something*.
There is no setUser.
> Besides, if the Value 'v' here is itself an Instruction, then what are its
> 'uses' and 'users' ??
>
See above
> I feel that the result of an instruction can be an operand of another
> instruction, but it should not be regarded as the instruction itself right
> ??
>
> Very confused...hope I can get some help to clarify my thoughts....
>
> thanks
>
>
>
>
> --
> Best regards
>
>
> Hui Zhang
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150324/2a9396b3/attachment.html>
More information about the llvm-dev
mailing list