From: Chris Lattner Date: Fri, 26 Aug 2005 18:46:49 +0000 (+0000) Subject: implement the fold for: X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=13794f5d01317d76ec698b43bdf1c35eea57eae5;p=oota-llvm.git implement the fold for: bool %test(int %X, int %Y) { %C = setne int %X, 0 ret bool %C } to: _test: addic r2, r3, -1 subfe r3, r2, r3 blr git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23089 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/PowerPC/PPCISelDAGToDAG.cpp b/lib/Target/PowerPC/PPCISelDAGToDAG.cpp index a0f55adb51d..8c0d6d00bec 100644 --- a/lib/Target/PowerPC/PPCISelDAGToDAG.cpp +++ b/lib/Target/PowerPC/PPCISelDAGToDAG.cpp @@ -1376,6 +1376,27 @@ SDOperand PPC32DAGToDAGISel::Select(SDOperand Op) { break; } + case ISD::SELECT_CC: { + ISD::CondCode CC = cast(N->getOperand(4))->get(); + + // handle the setcc cases here. select_cc lhs, 0, 1, 0, cc + if (ConstantSDNode *N1C = dyn_cast(N->getOperand(1))) + if (ConstantSDNode *N2C = dyn_cast(N->getOperand(2))) + if (ConstantSDNode *N3C = dyn_cast(N->getOperand(3))) + if (N1C->isNullValue() && N3C->isNullValue() && + N2C->getValue() == 1ULL && CC == ISD::SETNE) { + SDOperand LHS = Select(N->getOperand(0)); + SDOperand Tmp = + CurDAG->getTargetNode(PPC::ADDIC, MVT::i32, MVT::Flag, + LHS, getI32Imm(~0U)); + CurDAG->SelectNodeTo(N, PPC::SUBFE, MVT::i32, Tmp, LHS, + Tmp.getValue(1)); + break; + } + + assert(0 && "Select_cc not implemented yet!"); + } + case ISD::CALLSEQ_START: case ISD::CALLSEQ_END: { unsigned Amt = cast(N->getOperand(1))->getValue();