Simplify some code. It's not clear why the UDIV expanded sequence
authorChris Lattner <sabre@nondot.org>
Thu, 25 Aug 2005 22:03:50 +0000 (22:03 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 25 Aug 2005 22:03:50 +0000 (22:03 +0000)
doesn't work for large uint constants, but we'll keep the current behavior

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23061 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/PowerPC/PPCISelPattern.cpp

index da07b3040de15420fbb7dedfecd267e5f692a1d0..4d92e8aed59eaa7038224b69b3ce9580e31ff997 100644 (file)
@@ -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;