1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-20 03:23:01 +02:00

[X86] Fix inconsistencies in different places where we split loads/stores.

-Use MinAlign instead of std::min.
-Use SelectionDAG::getMemBasePlusOffset.
-Apply offset to the pointer info for the second load/store created.

llvm-svn: 321536
This commit is contained in:
Craig Topper 2017-12-28 19:46:03 +00:00
parent a339e081d7
commit 312f0d549b

View File

@ -18728,13 +18728,12 @@ static SDValue LowerExtended1BitVectorLoad(SDValue Op,
Ld->getBasePtr(), Ld->getBasePtr(),
Ld->getMemOperand()); Ld->getMemOperand());
SDValue BasePtrHi = SDValue BasePtrHi = DAG.getMemBasePlusOffset(BasePtr, 2, dl);
DAG.getNode(ISD::ADD, dl, BasePtr.getValueType(), BasePtr,
DAG.getConstant(2, dl, BasePtr.getValueType()));
SDValue LoadHi = DAG.getLoad(MVT::v16i1, dl, Ld->getChain(), SDValue LoadHi = DAG.getLoad(MVT::v16i1, dl, Ld->getChain(), BasePtrHi,
BasePtrHi, Ld->getPointerInfo().getWithOffset(2),
Ld->getMemOperand()); MinAlign(Ld->getAlignment(), 2U),
Ld->getMemOperand()->getFlags());
SDValue NewChain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, SDValue NewChain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other,
LoadLo.getValue(1), LoadHi.getValue(1)); LoadLo.getValue(1), LoadHi.getValue(1));
@ -34051,8 +34050,9 @@ static SDValue combineLoad(SDNode *N, SelectionDAG &DAG,
Ptr = DAG.getMemBasePlusOffset(Ptr, 16, dl); Ptr = DAG.getMemBasePlusOffset(Ptr, 16, dl);
SDValue Load2 = SDValue Load2 =
DAG.getLoad(HalfVT, dl, Ld->getChain(), Ptr, Ld->getPointerInfo(), DAG.getLoad(HalfVT, dl, Ld->getChain(), Ptr,
std::min(16U, Alignment), Ld->getMemOperand()->getFlags()); Ld->getPointerInfo().getWithOffset(16),
MinAlign(Alignment, 16U), Ld->getMemOperand()->getFlags());
SDValue TF = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, SDValue TF = DAG.getNode(ISD::TokenFactor, dl, MVT::Other,
Load1.getValue(1), Load1.getValue(1),
Load2.getValue(1)); Load2.getValue(1));
@ -34465,8 +34465,9 @@ static SDValue combineStore(SDNode *N, SelectionDAG &DAG,
DAG.getStore(St->getChain(), dl, Value0, Ptr0, St->getPointerInfo(), DAG.getStore(St->getChain(), dl, Value0, Ptr0, St->getPointerInfo(),
Alignment, St->getMemOperand()->getFlags()); Alignment, St->getMemOperand()->getFlags());
SDValue Ch1 = SDValue Ch1 =
DAG.getStore(St->getChain(), dl, Value1, Ptr1, St->getPointerInfo(), DAG.getStore(St->getChain(), dl, Value1, Ptr1,
std::min(16U, Alignment), St->getMemOperand()->getFlags()); St->getPointerInfo().getWithOffset(16),
MinAlign(Alignment, 16U), St->getMemOperand()->getFlags());
return DAG.getNode(ISD::TokenFactor, dl, MVT::Other, Ch0, Ch1); return DAG.getNode(ISD::TokenFactor, dl, MVT::Other, Ch0, Ch1);
} }