[llvm-dev] RFC: Absolute or "fixed address" symbols as immediate operands
Peter Collingbourne via llvm-dev
llvm-dev at lists.llvm.org
Mon Oct 24 13:07:03 PDT 2016
On Mon, Oct 10, 2016 at 8:12 PM, Peter Collingbourne <peter at pcc.me.uk>
wrote:
> The specific change I have in mind is to allow !range metadata on
> GlobalObjects. This would
> be similar to existing !range metadata, but it would apply to the
> "address" of the attached GlobalObject, rather than any value loaded from
> it. Its presence on a GlobalObject would also imply that the address of the
> GlobalObject is "fixed" at link time.
>
Going back to IR-level representation: here is an alternative
representation based on a suggestion from Eli.
Introduce a new type of GlobalValue called GlobalConstant. GlobalConstant
would fit into the GlobalValue hierarchy like this:
- GlobalValue
- GlobalConstant
- GlobalPointer
- GlobalIndirectSymbol
- GlobalAlias
- GlobalIFunc
- GlobalObject
- Function
- GlobalVariable
GlobalValue would no longer be assumed to be of pointer type. The getType()
overload that takes a PointerType, as well as getValueType() would be moved
down to GlobalPointer. (A nice side benefit of this is that it would help
flush out cases where we are unnecessarily depending on global pointee
types.)
A GlobalConstant can either be a definition or a declaration. A definition
would look like this:
@foo = globalconst i32 42
while a declaration would look like this:
@foo = external globalconst i32
GlobalConstant could also hold a linkage and visibility. Looking at the
other attributes that a GlobalValue can hold, many of them do not seem
appropriate for GlobalConstant and could potentially be moved to
GlobalPointer.
Thoughts?
Thanks,
--
--
Peter
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20161024/1d347c75/attachment.html>
More information about the llvm-dev
mailing list