<HTML><BODY style="word-wrap: break-word; -khtml-nbsp-mode: space; -khtml-line-break: after-white-space; "><DIV><DIV>On Sep 28, 2007, at 2:31 PM, Chuck Rose III wrote:</DIV><BLOCKQUOTE type="cite"><DIV class="Section1"><P class="MsoNormal"><FONT size="2" face="Arial"><SPAN style="font-size:10.0pt; font-family:Arial">Hola LLVMers,</SPAN></FONT></P></DIV></BLOCKQUOTE><DIV>Hey Chuck,</DIV><DIV><BR class="khtml-block-placeholder"></DIV>I'm not certain (Evan and Anton should chime in :), but here is some info:<BR><BLOCKQUOTE type="cite"><DIV class="Section1"><P class="MsoNormal"><FONT size="2" face="Arial"><SPAN style="font-size:10.0pt; font-family:Arial"><SPAN style=""><O:P style=""> <SPAN style="">I’m working on engaging SSE via the LLVM vector ops on x86.  I had some questions a while back that you all helped out on, but I’m seeing similar issues and was hoping you’d have some ideas.  Below is the dump of the LLVM IR of a program which is designed to take a vector stored in a float*, build an LLVM vector from it, copy it to another vector, and then take it apart and store it back out in another float*.  This will live on the boundary of our system and would be a function designed to promote a raw, potentially unaligned, value into a vector that the LLVM system can work with a whole bunch. </SPAN></O:P></SPAN></SPAN></FONT></P></DIV></BLOCKQUOTE><DIV>Two issues with alignment come to mind.  First, LLVM has some issues apparently still on systems that don't have a 16-byte aligned stack:  <A href="http://llvm.org/bugs/show_bug.cgi?id=1649">http://llvm.org/bugs/show_bug.cgi?id=1649</A></DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>The other issue can be that you're emitting an LLVM load to a pointer that is not on the stack and that doesn't have the right alignment.  In this case, a movaps will be generated and you'll get a fault.  In this case, you can mark the load as having an alignment of one byte, and the codegen will produce movups instead.  Using this is generally more efficient than doing 4 scalar loads and insertelements.</DIV><BLOCKQUOTE type="cite"><DIV class="Section1"><P class="MsoNormal"><FONT size="2" face="Arial"><SPAN style="font-size:10.0pt; font-family:Arial">It is dying trying to store a our working vector into one of the LLVM vectors created on the stack.  Despite the align-16 directive on the alloca instruction, it is not always aligning to a 16-byte boundary. <BR></SPAN></FONT></P></DIV></BLOCKQUOTE><DIV>This sounds like the bugzilla entry.</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>-Chris</DIV><BR></DIV><BR></BODY></HTML>