[llvm] r222903 - AArch64: treat [N x Ty] as a block during procedure calls.
Oliver Stannard
oliver.stannard at arm.com
Mon Dec 8 05:59:42 PST 2014
Sorry, but I've found another regression caused by this:
typedef struct {
__fp16 x;
__fp16 y;
} Z;
__fp16 foo(float a, float b, float c, float d, float e, float f, float g, Z h) {
return h.x;
}
This should load `h.x' from [sp,sp+2), but instead gets it from v7, splitting the struct between the V registers and the stack. This affects big and little endian.
Correct assembly:
foo:
ldr h0, [sp]
ret
Current incorrect assembly:
foo:
mov v0.16b, v7.16b
ret
Oliver
> -----Original Message-----
> From: Tim Northover [mailto:t.p.northover at gmail.com]
> Sent: 03 December 2014 17:50
> To: Oliver Stannard
> Cc: llvm-commits; Kevin Qin
> Subject: Re: [llvm] r222903 - AArch64: treat [N x Ty] as a block during
> procedure calls.
>
> On 3 December 2014 at 02:38, Oliver Stannard <oliver.stannard at arm.com>
> wrote:
> > Unfortunately this is still not quite right for big-endian, for
> example:
>
> Oh dear. Should be fixed in r223247.
>
> Cheers.
>
> Tim.
More information about the llvm-commits
mailing list