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:
parent
a339e081d7
commit
312f0d549b
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user