diff options
| author | Venkatraman Govindaraju <venkatra@cs.wisc.edu> | 2013-10-05 02:29:47 +0000 |
|---|---|---|
| committer | Venkatraman Govindaraju <venkatra@cs.wisc.edu> | 2013-10-05 02:29:47 +0000 |
| commit | ece63dbd0de745609ea7bd3effe2eb590052336b (patch) | |
| tree | 7058bd9756b786b93ee970e2e98b43f4fdf10a48 /llvm/lib/Target | |
| parent | b2c1ee2a968bb7bc3420381b62775ee2c447751f (diff) | |
| download | bcm5719-llvm-ece63dbd0de745609ea7bd3effe2eb590052336b.tar.gz bcm5719-llvm-ece63dbd0de745609ea7bd3effe2eb590052336b.zip | |
[Sparc] Use correct alignment while loading/storing fp128 values.
llvm-svn: 192023
Diffstat (limited to 'llvm/lib/Target')
| -rw-r--r-- | llvm/lib/Target/Sparc/SparcISelLowering.cpp | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/llvm/lib/Target/Sparc/SparcISelLowering.cpp b/llvm/lib/Target/Sparc/SparcISelLowering.cpp index 32e02698f3f..22662c097b8 100644 --- a/llvm/lib/Target/Sparc/SparcISelLowering.cpp +++ b/llvm/lib/Target/Sparc/SparcISelLowering.cpp @@ -2298,12 +2298,16 @@ static SDValue LowerF128Load(SDValue Op, SelectionDAG &DAG) assert(LdNode && LdNode->getOffset().getOpcode() == ISD::UNDEF && "Unexpected node type"); + unsigned alignment = LdNode->getAlignment(); + if (alignment > 8) + alignment = 8; + SDValue Hi64 = DAG.getLoad(MVT::f64, dl, LdNode->getChain(), LdNode->getBasePtr(), LdNode->getPointerInfo(), - false, false, false, 8); + false, false, false, alignment); EVT addrVT = LdNode->getBasePtr().getValueType(); SDValue LoPtr = DAG.getNode(ISD::ADD, dl, addrVT, LdNode->getBasePtr(), @@ -2313,7 +2317,7 @@ static SDValue LowerF128Load(SDValue Op, SelectionDAG &DAG) LdNode->getChain(), LoPtr, LdNode->getPointerInfo(), - false, false, false, 8); + false, false, false, alignment); SDValue SubRegEven = DAG.getTargetConstant(SP::sub_even64, MVT::i32); SDValue SubRegOdd = DAG.getTargetConstant(SP::sub_odd64, MVT::i32); @@ -2357,13 +2361,18 @@ static SDValue LowerF128Store(SDValue Op, SelectionDAG &DAG) { MVT::f64, StNode->getValue(), SubRegOdd); + + unsigned alignment = StNode->getAlignment(); + if (alignment > 8) + alignment = 8; + SDValue OutChains[2]; OutChains[0] = DAG.getStore(StNode->getChain(), dl, SDValue(Hi64, 0), StNode->getBasePtr(), MachinePointerInfo(), - false, false, 8); + false, false, alignment); EVT addrVT = StNode->getBasePtr().getValueType(); SDValue LoPtr = DAG.getNode(ISD::ADD, dl, addrVT, StNode->getBasePtr(), @@ -2373,7 +2382,7 @@ static SDValue LowerF128Store(SDValue Op, SelectionDAG &DAG) { SDValue(Lo64, 0), LoPtr, MachinePointerInfo(), - false, false, 8); + false, false, alignment); return DAG.getNode(ISD::TokenFactor, dl, MVT::Other, &OutChains[0], 2); } |

