mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-20 19:42:54 +02:00
Redo previous patch so optimization only done for i1.
Simpler and safer. llvm-svn: 44663
This commit is contained in:
parent
d53f72dfb1
commit
80dd0c5141
@ -2455,10 +2455,6 @@ SDOperand DAGCombiner::visitSELECT(SDNode *N) {
|
|||||||
MVT::ValueType VT = N->getValueType(0);
|
MVT::ValueType VT = N->getValueType(0);
|
||||||
MVT::ValueType VT0 = N0.getValueType();
|
MVT::ValueType VT0 = N0.getValueType();
|
||||||
|
|
||||||
|
|
||||||
// Some targets have SETCC types bigger than 1 bit, but do not set all the
|
|
||||||
// bits to 1; identified by getSetCCResultContents. Watch out for these.
|
|
||||||
|
|
||||||
// fold select C, X, X -> X
|
// fold select C, X, X -> X
|
||||||
if (N1 == N2)
|
if (N1 == N2)
|
||||||
return N1;
|
return N1;
|
||||||
@ -2483,22 +2479,14 @@ SDOperand DAGCombiner::visitSELECT(SDNode *N) {
|
|||||||
return DAG.getNode(ISD::TRUNCATE, VT, XORNode);
|
return DAG.getNode(ISD::TRUNCATE, VT, XORNode);
|
||||||
}
|
}
|
||||||
// fold select C, 0, X -> ~C & X
|
// fold select C, 0, X -> ~C & X
|
||||||
if (VT == VT0 && N1C && N1C->isNullValue() &&
|
if (VT == VT0 && VT == MVT::i1 && N1C && N1C->isNullValue()) {
|
||||||
(N0.Val->getOpcode()!=ISD::SETCC || VT==MVT::i1 ||
|
SDOperand XORNode = DAG.getNode(ISD::XOR, VT, N0, DAG.getConstant(1, VT));
|
||||||
TLI.getSetCCResultContents()==
|
|
||||||
TargetLowering::ZeroOrNegativeOneSetCCResult)) {
|
|
||||||
SDOperand XORNode;
|
|
||||||
XORNode = DAG.getNode(ISD::XOR, VT, N0, DAG.getConstant(~0UL, VT));
|
|
||||||
AddToWorkList(XORNode.Val);
|
AddToWorkList(XORNode.Val);
|
||||||
return DAG.getNode(ISD::AND, VT, XORNode, N2);
|
return DAG.getNode(ISD::AND, VT, XORNode, N2);
|
||||||
}
|
}
|
||||||
// fold select C, X, 1 -> ~C | X
|
// fold select C, X, 1 -> ~C | X
|
||||||
if (VT == VT0 && N2C && N2C->getValue() == 1 &&
|
if (VT == VT0 && VT == MVT::i1 && N2C && N2C->getValue() == 1) {
|
||||||
(N0.Val->getOpcode()!=ISD::SETCC || VT==MVT::i1 ||
|
SDOperand XORNode = DAG.getNode(ISD::XOR, VT, N0, DAG.getConstant(1, VT));
|
||||||
TLI.getSetCCResultContents()==
|
|
||||||
TargetLowering::ZeroOrNegativeOneSetCCResult)) {
|
|
||||||
SDOperand XORNode;
|
|
||||||
XORNode = DAG.getNode(ISD::XOR, VT, N0, DAG.getConstant(~0UL, VT));
|
|
||||||
AddToWorkList(XORNode.Val);
|
AddToWorkList(XORNode.Val);
|
||||||
return DAG.getNode(ISD::OR, VT, XORNode, N1);
|
return DAG.getNode(ISD::OR, VT, XORNode, N1);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user