Make sure the alignment of the temporary created
authorDuncan Sands <baldrick@free.fr>
Thu, 10 Jul 2008 15:26:17 +0000 (15:26 +0000)
committerDuncan Sands <baldrick@free.fr>
Thu, 10 Jul 2008 15:26:17 +0000 (15:26 +0000)
in CreateStackStoreLoad is good enough for both
the source and destination types.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53404 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SelectionDAG/LegalizeTypes.cpp

index ed09c6b71248881300c085db0ce7283897543902..7a0a52d97df3bf3f4dd8ea3851851b6823e13e23 100644 (file)
@@ -16,6 +16,7 @@
 #include "LegalizeTypes.h"
 #include "llvm/CallingConv.h"
 #include "llvm/Support/CommandLine.h"
+#include "llvm/Target/TargetData.h"
 using namespace llvm;
 
 #ifndef NDEBUG
@@ -547,8 +548,11 @@ SDOperand DAGTypeLegalizer::BitConvertToInteger(SDOperand Op) {
 
 SDOperand DAGTypeLegalizer::CreateStackStoreLoad(SDOperand Op,
                                                  MVT DestVT) {
-  // Create the stack frame object.
-  SDOperand FIPtr = DAG.CreateStackTemporary(DestVT);
+  // Create the stack frame object.  Make sure it is aligned for both
+  // the source and destination types.
+  unsigned SrcAlign =
+   TLI.getTargetData()->getPrefTypeAlignment(Op.getValueType().getTypeForMVT());
+  SDOperand FIPtr = DAG.CreateStackTemporary(DestVT, SrcAlign);
 
   // Emit a store to the stack slot.
   SDOperand Store = DAG.getStore(DAG.getEntryNode(), Op, FIPtr, NULL, 0);