[LLVMdev] 32bit pointers on a (pure) 64bit architecture
Matt Arsenault
Matthew.Arsenault at amd.com
Thu Apr 3 15:56:02 PDT 2014
On 04/03/2014 03:31 PM, Jeroen Dobbelaere wrote:
> Hi,
>
> I am trying to get llvm working for an architecture that has 64bit
> registers, but 32bit addresses.
> Because of that, I want the pointers to also be 32bit, although they
> will live in a 64 bit register.
>
> On the frontend, I do not encounter any issues, but when I provide a
> ...
> "p:32:32:32"
> ...
> DataLayout specification to the backend, things get ugly:
> - SelectionDag is producing a mix of 64bit and 32bit nodes, and it
> seems that a number of
> necessary legalizations/promotions are missing.
>
> After adding support for 'PromoteIntRes_GlobalAddress(...)', I get a
> failure, because a 'store' node now has a mix of operands:
> - some of the operands were already 'i64' from the beginning,
> - others were 'i32' (due to the 32bit pointers) and have been promoted
> to 'i64'
>
> Because of the latter, the 'PromoteIntOp_STORE' is called. This uses
> 'GetPromotedInteger' to access the operands.
> But, GetPromotedInteger fails if the operand was not promoted. So it
> fails on the operands of the 'store' that were already legal (i64).
>
> What would be the recommended way to fix this ?
> (Or did I miss something, and should 32bit pointers on a 64bit
> architecture be done in a completely different way)
>
How are you implementing GlobalAddress?
R600/SI has both 32-bit and 64-bit pointers, and (sort of) 64-bit
registers if you want to see how it handles it.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140403/b09e1ced/attachment.html>
More information about the llvm-dev
mailing list