<div dir="ltr">BTW I managed to get around this problem by flagging all the 128-bit registers as caller saved only.<br><div>On my system, vector registers are more likely to be used on leaf functions anyway.<br><div><br></div>
</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Nov 21, 2013 at 3:24 PM, Hal Finkel <span dir="ltr"><<a href="mailto:hfinkel@anl.gov" target="_blank">hfinkel@anl.gov</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="HOEnZb"><div class="h5">----- Original Message -----<br>
> From: "Hal Finkel" <<a href="mailto:hfinkel@anl.gov">hfinkel@anl.gov</a>><br>
> To: "Francois Pichet" <<a href="mailto:pichet2000@gmail.com">pichet2000@gmail.com</a>><br>
> Cc: "LLVM Developers Mailing List" <<a href="mailto:llvmdev@cs.uiuc.edu">llvmdev@cs.uiuc.edu</a>><br>
> Sent: Monday, November 18, 2013 2:45:53 PM<br>
> Subject: Re: [LLVMdev] Unaligned load/store for callee-saved 128-bit registers<br>
><br>
> ----- Original Message -----<br>
> > From: "Francois Pichet" <<a href="mailto:pichet2000@gmail.com">pichet2000@gmail.com</a>><br>
> > To: "LLVM Developers Mailing List" <<a href="mailto:llvmdev@cs.uiuc.edu">llvmdev@cs.uiuc.edu</a>><br>
> > Sent: Monday, November 18, 2013 2:26:30 PM<br>
> > Subject: [LLVMdev] Unaligned load/store for callee-saved 128-bit<br>
> > registers<br>
> ><br>
> ><br>
> ><br>
> > On my (out-of-tree) target I have 16 128-bit registers.<br>
> > Unaligned load/store are illegal. (must 16-bytes aligned)<br>
> ><br>
> ><br>
> ><br>
> > 8 of those registers are defined as callee-saved and 8<br>
> > caller-saved.<br>
> > The default stack size is 4 bytes.<br>
> > The target implements dynamic stack realign to make sure the stack<br>
> > will always be aligned correctly when necessary.<br>
> ><br>
> ><br>
> > Yet I am still getting unaligned load/store when running this test<br>
> > case: <a href="http://pastie.org/8490604" target="_blank">http://pastie.org/8490604</a><br>
> ><br>
> ><br>
> > The problem is in PEI::calculateCalleeSavedRegisters:<br>
> ><br>
> ><br>
> ><br>
> > // We may not be able to satisfy the desired alignment<br>
> > specification<br>
> > of<br>
> > // the TargetRegisterClass if the stack alignment is smaller. Use<br>
> > the<br>
> > // min.<br>
> > Align = std::min(Align, StackAlign);<br>
> > FrameIdx = MFI->CreateStackObject(RC->getSize(), Align, true);<br>
> ><br>
> ><br>
> > This will create unaligned load/store for a callee-saved 128-bit<br>
> > register on the frame slot because StackAlign is 4.<br>
> ><br>
> ><br>
> > Adding a check for stack realignable or putting all the 128-bit<br>
> > registers as caller-save will fix the problem.<br>
> ><br>
> > if (!TFI->isStackRealignable()) <--- new line<br>
> > Align = std::min(Align, StackAlign);<br>
> ><br>
> > Is this a bug or am I missing something?<br>
> ><br>
><br>
> This looks like a bug. By default, isStackRealignable() always<br>
> returns true (this default comes from the TargetFrameLowering<br>
> constructor). I wonder, however, is this is not correctly<br>
> implemented in some backends (X86RegisterInfo::canRealignStack, for<br>
> example, is not completely trivial). Nadav, do you know how this<br>
> works?<br>
<br>
</div></div>[Trying some other relevant people...]<br>
<br>
Chad, Jakob: thoughts?<br>
<span class="HOEnZb"><font color="#888888"><br>
 -Hal<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
><br>
>  -Hal<br>
><br>
> ><br>
> > Thanks,<br>
> > Francois Pichet, Octasic.<br>
> ><br>
> > _______________________________________________<br>
> > LLVM Developers mailing list<br>
> > <a href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><br>
> > <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
> ><br>
><br>
> --<br>
> Hal Finkel<br>
> Assistant Computational Scientist<br>
> Leadership Computing Facility<br>
> Argonne National Laboratory<br>
> _______________________________________________<br>
> LLVM Developers mailing list<br>
> <a href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
><br>
<br>
--<br>
Hal Finkel<br>
Assistant Computational Scientist<br>
Leadership Computing Facility<br>
Argonne National Laboratory<br>
</div></div></blockquote></div><br></div></div>