Correct the implementation of srem to be remainder, not modulus. The sign of
the result must follow the sign of the divisor.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35302 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/include/llvm/ADT/APInt.h b/include/llvm/ADT/APInt.h
index 44b5fd0..52509ed 100644
--- a/include/llvm/ADT/APInt.h
+++ b/include/llvm/ADT/APInt.h
@@ -564,9 +564,9 @@
   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);