[LLVMdev] Spilled variables using unaligned moves

Nicolas Capens nicolas at capens.net
Mon Jul 14 07:43:57 PDT 2008


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

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20080714/2854bfae/attachment.html>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: fibonacci.cpp
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20080714/2854bfae/attachment.ksh>


More information about the llvm-dev mailing list