[llvm-dev] RFC: Absolute or "fixed address" symbols as immediate operands

Rafael EspĂ­ndola via llvm-dev llvm-dev at lists.llvm.org
Tue Oct 25 05:43:46 PDT 2016


On 24 October 2016 at 16:54, Peter Collingbourne via llvm-dev
<llvm-dev at lists.llvm.org> wrote:
>
>
> On Mon, Oct 24, 2016 at 1:36 PM, Friedman, Eli <efriedma at codeaurora.org>
> wrote:
>>
>> On 10/24/2016 1:07 PM, Peter Collingbourne via llvm-dev wrote:
>>
>> 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
>>
>>
>> This is equivalent to writing "foo = 42" in assembly?
>
>
> Yes.


Back in the day the idea was to use an alias whose ConstantExpr was
just 42. Would that work?

Cheers,
Rafael


More information about the llvm-dev mailing list