From: Scott Michel Date: Mon, 30 Jul 2007 21:00:31 +0000 (+0000) Subject: - Allow custom lowering for CTPOP, CTTZ, CTLZ. X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=910b66d8d6fd8a27dcdea74431e3ea20c69b7db5;p=oota-llvm.git - Allow custom lowering for CTPOP, CTTZ, CTLZ. - Fixed an existing unexpanded tab. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40605 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp b/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp index 078cbf3d7a2..3ca30dd88d2 100644 --- a/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp +++ b/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp @@ -2738,9 +2738,16 @@ SDOperand SelectionDAGLegalize::LegalizeOp(SDOperand Op) { case ISD::CTLZ: Tmp1 = LegalizeOp(Node->getOperand(0)); // Op switch (TLI.getOperationAction(Node->getOpcode(), Node->getValueType(0))) { - case TargetLowering::Custom: assert(0 && "Cannot custom handle this yet!"); + case TargetLowering::Custom: case TargetLowering::Legal: Result = DAG.UpdateNodeOperands(Result, Tmp1); + if (TLI.getOperationAction(Node->getOpcode(), Node->getValueType(0)) == + TargetLowering::Custom) { + Tmp1 = TLI.LowerOperation(Result, DAG); + if (Tmp1.Val) { + Result = Tmp1; + } + } break; case TargetLowering::Promote: { MVT::ValueType OVT = Tmp1.getValueType(); @@ -2760,7 +2767,7 @@ SDOperand SelectionDAGLegalize::LegalizeOp(SDOperand Op) { DAG.getConstant(MVT::getSizeInBits(NVT), NVT), ISD::SETEQ); Result = DAG.getNode(ISD::SELECT, NVT, Tmp2, - DAG.getConstant(MVT::getSizeInBits(OVT),NVT), Tmp1); + DAG.getConstant(MVT::getSizeInBits(OVT),NVT), Tmp1); break; case ISD::CTLZ: // Tmp1 = Tmp1 - (sizeinbits(NVT) - sizeinbits(Old VT))