summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff options
context:
space:
mode:
authorDan Gohman <gohman@apple.com>2008-09-22 22:40:08 +0000
committerDan Gohman <gohman@apple.com>2008-09-22 22:40:08 +0000
commite2947e1e077205241c94a5bffbccba5b64cf05bf (patch)
tree33dc9c47812405614d5fbf32fa0aa8b64ebf2b35 /llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
parent8f8466dc426263e6f2c257772a98670c2dca50b1 (diff)
downloadbcm5719-llvm-e2947e1e077205241c94a5bffbccba5b64cf05bf.tar.gz
bcm5719-llvm-e2947e1e077205241c94a5bffbccba5b64cf05bf.zip
Fix the alignment of loads from constant pool entries when the
load address has an offset from the base of the constant pool entry. llvm-svn: 56479
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp')
-rw-r--r--llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp2
1 files changed, 2 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
index 0d27e662019..ae6951fd271 100644
--- a/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
@@ -5438,6 +5438,7 @@ ExpandIntToFP(bool isSigned, MVT DestTy, SDValue Source) {
SDValue CPIdx = DAG.getConstantPool(FudgeFactor, TLI.getPointerTy());
unsigned Alignment = 1 << cast<ConstantPoolSDNode>(CPIdx)->getAlignment();
CPIdx = DAG.getNode(ISD::ADD, TLI.getPointerTy(), CPIdx, CstOffset);
+ Alignment = std::min(Alignment, 4u);
SDValue FudgeInReg;
if (DestTy == MVT::f32)
FudgeInReg = DAG.getLoad(MVT::f32, DAG.getEntryNode(), CPIdx,
@@ -5589,6 +5590,7 @@ SDValue SelectionDAGLegalize::ExpandLegalINT_TO_FP(bool isSigned,
SDValue CPIdx = DAG.getConstantPool(FudgeFactor, TLI.getPointerTy());
unsigned Alignment = 1 << cast<ConstantPoolSDNode>(CPIdx)->getAlignment();
CPIdx = DAG.getNode(ISD::ADD, TLI.getPointerTy(), CPIdx, CstOffset);
+ Alignment = std::min(Alignment, 4u);
SDValue FudgeInReg;
if (DestVT == MVT::f32)
FudgeInReg = DAG.getLoad(MVT::f32, DAG.getEntryNode(), CPIdx,
OpenPOWER on IntegriCloud