mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-23 12:40:17 +00:00
Allow targets to say they don't support truncstore i1 (which includes a mask
when storing to an 8-bit memory location), as most don't. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23303 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
a500fc681d
commit
13d58e71b7
@ -1043,10 +1043,23 @@ SDOperand SelectionDAGLegalize::LegalizeOp(SDOperand Op) {
|
||||
switch (getTypeAction(Node->getOperand(1).getValueType())) {
|
||||
case Legal:
|
||||
Tmp2 = LegalizeOp(Node->getOperand(1));
|
||||
if (Tmp1 != Node->getOperand(0) || Tmp2 != Node->getOperand(1) ||
|
||||
Tmp3 != Node->getOperand(2))
|
||||
|
||||
// The only promote case we handle is TRUNCSTORE:i1 X into
|
||||
// -> TRUNCSTORE:i8 (and X, 1)
|
||||
if (cast<VTSDNode>(Node->getOperand(4))->getVT() == MVT::i1 &&
|
||||
TLI.getOperationAction(ISD::TRUNCSTORE, MVT::i1) ==
|
||||
TargetLowering::Promote) {
|
||||
// Promote the bool to a mask then store.
|
||||
Tmp2 = DAG.getNode(ISD::AND, Tmp2.getValueType(), Tmp2,
|
||||
DAG.getConstant(1, Tmp2.getValueType()));
|
||||
Result = DAG.getNode(ISD::TRUNCSTORE, MVT::Other, Tmp1, Tmp2, Tmp3,
|
||||
Node->getOperand(3), DAG.getValueType(MVT::i8));
|
||||
|
||||
} else if (Tmp1 != Node->getOperand(0) || Tmp2 != Node->getOperand(1) ||
|
||||
Tmp3 != Node->getOperand(2)) {
|
||||
Result = DAG.getNode(ISD::TRUNCSTORE, MVT::Other, Tmp1, Tmp2, Tmp3,
|
||||
Node->getOperand(3), Node->getOperand(4));
|
||||
}
|
||||
break;
|
||||
case Promote:
|
||||
case Expand:
|
||||
|
Loading…
Reference in New Issue
Block a user