[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