Correct the implementation of srem to be remainder, not modulus. The sign of
[oota-llvm.git] / include / llvm / ADT / APInt.h
index 44b5fd0403f2de1ba2ea0f52bafcbe5b4155be37..52509ed000c94b9e3920b8b30c38376cd13ec65a 100644 (file)
@@ -564,9 +564,9 @@ public:
   inline APInt srem(const APInt& RHS) const {
     if (isNegative())
       if (RHS.isNegative())
-        return (-(*this)).urem(-RHS);
+        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);