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:
Chris Lattner 2005-09-10 00:20:18 +00:00
parent a500fc681d
commit 13d58e71b7

View File

@ -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: