[LLVMdev] Stack alignment on X86 AVX seems incorrect
Evandro Menezes
emenezes at codeaurora.org
Fri Mar 2 13:38:03 PST 2012
Cameron,
I was the one not completely following you. I missed the detail about
variable-sized variables on the stack.
--
Evandro Menezes Austin, TX emenezes at codeaurora.org
Qualcomm Innovation Center, Inc is a member of the Code Aurora Forum
On 03/02/12 10:58, Cameron McInally wrote:
> On Fri, Mar 2, 2012 at 11:32 AM, Evandro Menezes
> <emenezes at codeaurora.org <mailto:emenezes at codeaurora.org>> wrote:
> ...
> > Figure 3.3 on page 16 of www.x86-64.org/documentation/abi.pdf
> <http://www.x86-64.org/documentation/abi.pdf> is not
> > normative. See foot note 7 in the same page. Figure 3.4 on page 21
> > confirms that the use of a frame-pointer is optional.
> >
> > So, if one doesn't use ENTER in the prologue and uses RSP to access local
> > variables, RBP may be used as a calee-saved GPR.
>
> I am not sure if I am completely following. The issue that required
> aligning the frame to 32 bytes is when there are variable sized objects
> on the stack (e.g. alloca). In that case, the RBP frame pointer is
> required to access the spill slots. If I'm not mistaken, calculating the
> address of spill slots off of RSP would be costly in this case.
>
> Are you suggesting that there is a way to base spill slots off of RSP
> when the stack size is unknown at compile time?
>
> This does bring up an interesting idea though. If we wanted to punt, it
> would be possible to check for variable sized objects on the stack and
> then only issue unaligned moves for 256b spills/reloads. Not ideal for
> performance, but it would work as a stopgap.
>
> -Cameron
More information about the llvm-dev
mailing list