From: Duncan Sands Date: Thu, 10 Jul 2008 15:26:17 +0000 (+0000) Subject: Make sure the alignment of the temporary created X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=c5ffb45934a5f6c19b6279a42622f1b4d9e7ec88;p=oota-llvm.git Make sure the alignment of the temporary created 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 --- diff --git a/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp b/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp index ed09c6b7124..7a0a52d97df 100644 --- a/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp +++ b/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp @@ -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);