From 717f97a5c8c7fd7846e0cb4ac77913ec87a8a695 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Thu, 25 Aug 2005 22:03:50 +0000 Subject: Simplify some code. It's not clear why the UDIV expanded sequence doesn't work for large uint constants, but we'll keep the current behavior llvm-svn: 23061 --- llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) (limited to 'llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp') diff --git a/llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp b/llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp index da07b3040de..4d92e8aed59 100644 --- a/llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp +++ b/llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp @@ -1375,29 +1375,23 @@ unsigned ISel::SelectExpr(SDOperand N, bool Recording) { BuildMI(BB, PPC::ADDZE, 1, Tmp4).addReg(Tmp1); BuildMI(BB, PPC::NEG, 1, Result).addReg(Tmp4); return Result; + } else if (Tmp3) { + ExprMap.erase(N); + return SelectExpr(BuildSDIVSequence(N)); } } // fall thru case ISD::UDIV: // If this is a divide by constant, we can emit code using some magic // constants to implement it as a multiply instead. - if (isIntImmediate(N.getOperand(1), Tmp3)) { - if (opcode == ISD::SDIV) { - if ((signed)Tmp3 < -1 || (signed)Tmp3 > 1) { - ExprMap.erase(N); - return SelectExpr(BuildSDIVSequence(N)); - } - } else { - if ((signed)Tmp3 > 1) { - ExprMap.erase(N); - return SelectExpr(BuildUDIVSequence(N)); - } - } + if (isIntImmediate(N.getOperand(1), Tmp3) && (signed)Tmp3 > 1) { + ExprMap.erase(N); + return SelectExpr(BuildUDIVSequence(N)); } Tmp1 = SelectExpr(N.getOperand(0)); Tmp2 = SelectExpr(N.getOperand(1)); switch (DestType) { - default: assert(0 && "Unknown type to ISD::SDIV"); break; + default: assert(0 && "Unknown type to ISD::DIV"); break; case MVT::i32: Opc = (ISD::UDIV == opcode) ? PPC::DIVWU : PPC::DIVW; break; case MVT::f32: Opc = PPC::FDIVS; break; case MVT::f64: Opc = PPC::FDIV; break; -- cgit v1.2.3