mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-19 04:29:21 +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())) {
|
switch (getTypeAction(Node->getOperand(1).getValueType())) {
|
||||||
case Legal:
|
case Legal:
|
||||||
Tmp2 = LegalizeOp(Node->getOperand(1));
|
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,
|
Result = DAG.getNode(ISD::TRUNCSTORE, MVT::Other, Tmp1, Tmp2, Tmp3,
|
||||||
Node->getOperand(3), Node->getOperand(4));
|
Node->getOperand(3), Node->getOperand(4));
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case Promote:
|
case Promote:
|
||||||
case Expand:
|
case Expand:
|
||||||
|
Loading…
Reference in New Issue
Block a user