From: Chris Lattner Date: Thu, 9 Feb 2006 02:23:13 +0000 (+0000) Subject: Make MachineConstantPool entries alignments explicit X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=948d9668a7bc96b435de7ebc1b4a28b70aeb0fc3;p=oota-llvm.git Make MachineConstantPool entries alignments explicit git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26071 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp b/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp index 15748705690..ff4ae335f2d 100644 --- a/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp +++ b/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp @@ -23,6 +23,7 @@ #include "llvm/Target/TargetInstrItineraries.h" #include "llvm/Target/TargetLowering.h" #include "llvm/Support/Debug.h" +#include "llvm/Constant.h" #include using namespace llvm; @@ -194,8 +195,17 @@ void ScheduleDAG::EmitNode(NodeInfo *NI) { MI->addFrameIndexOperand(FI->getIndex()); } else if (ConstantPoolSDNode *CP = dyn_cast(Node->getOperand(i))) { - unsigned Idx = ConstPool->getConstantPoolIndex(CP->get(), - CP->getAlignment()); + unsigned Align = CP->getAlignment(); + // MachineConstantPool wants an explicit alignment. + if (Align == 0) { + if (CP->get()->getType() == Type::DoubleTy) + Align = 3; // always 8-byte align doubles. + else + Align = TM.getTargetData() + .getTypeAlignmentShift(CP->get()->getType()); + } + + unsigned Idx = ConstPool->getConstantPoolIndex(CP->get(), Align); MI->addConstantPoolIndexOperand(Idx); } else if (ExternalSymbolSDNode *ES = dyn_cast(Node->getOperand(i))) {