Author: johannes Date: Wed Dec 5 19:43:46 2007 New Revision: 44649 URL: http://llvm.org/viewvc/llvm-project?rev=44649&view=rev Log: Fix PR1842.
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Modified: llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp?rev=44649&r1=44648&r2=44649&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp (original) +++ llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Wed Dec 5 19:43:46 2007 @@ -2396,6 +2396,10 @@ MVT::ValueType VT = N->getValueType(0); 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 if (N1 == N2) return N1; @@ -2420,14 +2424,22 @@ return DAG.getNode(ISD::TRUNCATE, VT, XORNode); } // fold select C, 0, X -> ~C & X - if (VT == VT0 && N1C && N1C->isNullValue()) { - SDOperand XORNode = DAG.getNode(ISD::XOR, VT, N0, DAG.getConstant(1, VT)); + if (VT == VT0 && N1C && N1C->isNullValue() && + (N0.Val->getOpcode()!=ISD::SETCC || VT==MVT::i1 || + TLI.getSetCCResultContents()== + TargetLowering::ZeroOrNegativeOneSetCCResult)) { + SDOperand XORNode; + XORNode = DAG.getNode(ISD::XOR, VT, N0, DAG.getConstant(~0UL, VT)); AddToWorkList(XORNode.Val); return DAG.getNode(ISD::AND, VT, XORNode, N2); } // fold select C, X, 1 -> ~C | X - if (VT == VT0 && N2C && N2C->getValue() == 1) { - SDOperand XORNode = DAG.getNode(ISD::XOR, VT, N0, DAG.getConstant(1, VT)); + if (VT == VT0 && N2C && N2C->getValue() == 1 && + (N0.Val->getOpcode()!=ISD::SETCC || VT==MVT::i1 || + TLI.getSetCCResultContents()== + TargetLowering::ZeroOrNegativeOneSetCCResult)) { + SDOperand XORNode; + XORNode = DAG.getNode(ISD::XOR, VT, N0, DAG.getConstant(~0UL, VT)); AddToWorkList(XORNode.Val); return DAG.getNode(ISD::OR, VT, XORNode, N1); } _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits