[LLVMdev] Bitcasts between pointers with different address spaces
Mon Ping Wang
monping at apple.com
Fri Sep 7 23:56:55 PDT 2012
On Sep 7, 2012, at 11:10 PM, Nick Lewycky <nicholas at mxc.ca> wrote:
> Mon Ping Wang wrote:
>> I don't think we should make bit casts between pointers with different
>> address spaces illegal. Address spaces are not required to be disjoint.
>> In the N1169 spec, it says
>> A non-null pointer into an address space A can be cast to a pointer into
>> another address space B, but such a cast is undefined if the source
>> pointer does not point to a location in B.
> Use a ptrtoint + inttoptr to implement the cast.
I find that strange. One has to pick an intermediate integer type that is safe to convert to and from. It would seem more natural then to define a ptrtoptr operation that will truncate/extended as appropriate. It would make auto upgraded of old LLVM IR files easier to change bitcast of pointer to pointer.
>> If the address spaces overlap, one should be able to bticast between them.
> I am not okay with having the verifier accept or reject a bitcast based on the contents of the TargetData. Given that we intend to permit different address spaces to have different sized pointers, we'll need to reject all cross address-space bitcasts and casts will need to go through ptrtoint+inttoptr which makes the potential for truncation and extension of the value explicit.
I agree that the verifier shouldn't depend on TargetData for this and bitcast is no longer appropriate to use since pointer sizes can't be used.
-- Mon Ping
> Is that acceptable? In particular, it still permits you to have overlapping address spaces, right?
>> On Sep 7, 2012, at 10:47 AM, Villmow, Micah wrote:
>>> Should LLVM make bitcasts between pointers with different address
>>> spaces illegal?
>>> This will require a small clarification in the documentation and an
>>> assertion check added to the verifier, but I think this would be a
>>> good approach.
>>> The reason being is that in different address spaces, pointers are not
>>> always the same size.
>>> This could be limited to make it legal only if the size of the pointer
>>> in source and destination address spaces are equivalent, but that
>>> seems like more of a work-around than a proper solution.
>>> LLVM Developers mailing list
>>> LLVMdev at cs.uiuc.edu <mailto:LLVMdev at cs.uiuc.edu>http://llvm.cs.uiuc.edu
>> LLVM Developers mailing list
>> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
More information about the llvm-dev