[LLVMbugs] [Bug 21438] New: Separate User from the Value inheritance hierarchy
bugzilla-daemon at llvm.org
bugzilla-daemon at llvm.org
Fri Oct 31 17:55:35 PDT 2014
http://llvm.org/bugs/show_bug.cgi?id=21438
Bug ID: 21438
Summary: Separate User from the Value inheritance hierarchy
Product: libraries
Version: trunk
Hardware: PC
OS: All
Status: NEW
Severity: normal
Priority: P
Component: Core LLVM classes
Assignee: unassignedbugs at nondot.org
Reporter: dexonsmith at apple.com
CC: llvmbugs at cs.uiuc.edu
Classification: Unclassified
Currently, `User` inherits from `Value`. Most subclasses of `Value` -- even
those that don't have the concept of an operand -- inherit from `User`.
Instead, we should separate `User` from the `Value` inheritance hierarchy.
The current model is strange for operand-less `Instruction`s and `Constant`s.
Moreover, it makes the inheritance structure of the new metadata types from bug
21432 especially awkward [1].
[1]: http://lists.cs.uiuc.edu/pipermail/llvmdev/2014-October/078261.html
See the comments about the relationships between MDNode/MDString/MDUser.
**Design needed.** Nevertheless, here's the sketch of a straw man:
1. `Value` has a bit indicating whether it's a `User` (perhaps borrowed from
`ValueName *Name`).
2. `Use::getUser()` returns `Value` and asserts that the bit is set.
Alternatively, it returns a wrapper around `Value *` called `UserRef` that has
operand-related API.
3. Eventual subclasses of `Value` that have operands use multiple inheritance
to inherit from `User`. Note that every child of `User` already needs to
specialize `User` with `OperandTraits`, so this doesn't add boilerplate -- in
fact, it should clean it up a bit.
4. Change the `Use *OperandList` in `User` to be allocated in front of it
(like the operands in `FixedNumOperandTraits`). This makes it accessible from
`Value` without knowing the common subclass between `Value` and `User`.
I won't have time in the short-term to design, qualify, and roll this out, but
I thought I'd get the idea down while the issues are paged in.
--
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20141101/a192a10d/attachment.html>
More information about the llvm-bugs
mailing list