[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