Undo the last change and make this really implement remainder and not
authorReid Spencer <rspencer@reidspencer.com>
Sat, 24 Mar 2007 22:37:23 +0000 (22:37 +0000)
committerReid Spencer <rspencer@reidspencer.com>
Sat, 24 Mar 2007 22:37:23 +0000 (22:37 +0000)
modulus. The previous change was a result of incorrect documentation in
the LangRef.html.

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

include/llvm/ADT/APInt.h

index 52509ed000c94b9e3920b8b30c38376cd13ec65a..76a852b1a08475011187b7d6927d435daaaa2088 100644 (file)
@@ -552,9 +552,11 @@ public:
     return this->udiv(RHS);
   }
 
-  /// Perform an Unsigned remainder operation on this APInt with RHS being the
+  /// Perform an unsigned remainder operation on this APInt with RHS being the
   /// divisor. Both this and RHS are treated as unsigned quantities for purposes
-  /// of this operation.
+  /// of this operation. Note that this is a true remainder operation and not
+  /// a modulo operation because the sign follows the sign of the dividend
+  /// which is *this.
   /// @returns a new APInt value containing the remainder result
   /// @brief Unsigned remainder operation.
   APInt urem(const APInt& RHS) const;
@@ -566,9 +568,9 @@ public:
       if (RHS.isNegative())
         return -((-(*this)).urem(-RHS));
       else
-        return (-(*this)).urem(RHS);
+        return -(-(*this)).urem(RHS);
     else if (RHS.isNegative())
-      return -(this->urem(-RHS));
+      return this->urem(-RHS);
     return this->urem(RHS);
   }