[LLVMdev] Spilled variables using unaligned moves
Nicolas Capens
nicolas at capens.net
Mon Jul 14 13:09:53 PDT 2008
This is on Windows / MSVC++ 2005. I'll file a bug.
From: llvmdev-bounces at cs.uiuc.edu [mailto:llvmdev-bounces at cs.uiuc.edu] On
Behalf Of Evan Cheng
Sent: Monday, 14 July, 2008 20:35
To: LLVM Developers Mailing List
Cc: anton at korobeynikov.info
Subject: Re: [LLVMdev] Spilled variables using unaligned moves
This is on Windows / Cygwin? I think the dynamic stack pointer re-alignment
doesn't happen until post- register allocation.
Assuming there aren't other instructions between the prologue and the first
movups that mess up esp (there shouldn't), this is indeed a bug. Please file
a bug and attach a bc file. Thanks.
Evan
On Jul 14, 2008, at 7:43 AM, Nicolas Capens wrote:
Hi all,
It looks like vector spills don't use aligned moves even though the stack is
aligned. This seems like an optimization opportunity.
The attached replacement of fibonacci.cpp generates x86 code like this:
03A70010 push ebp
03A70011 mov ebp,esp
03A70013 and esp,0FFFFFFF0h
03A70019 sub esp,1A0h
...
03A7006C movups xmmword ptr [esp+180h],xmm7
...
03A70229 mulps xmm1,xmmword ptr [esp+180h]
...
03A70682 movups xmm0,xmmword ptr [esp+180h]
Note how stores and loads use unaligned moves while it could use aligned
moves. It's also interesting that the multiply does correctly assume the
stack to be 16-byte aligned.
Is there something I'm doing wrong (again), or is this already known?
Thanks a lot,
Nicolas Capens
<fibonacci.cpp>
_______________________________________________
LLVM Developers mailing list
LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20080714/ace0cca1/attachment.html>
More information about the llvm-dev
mailing list