From: Reid Spencer Date: Sat, 24 Mar 2007 21:56:22 +0000 (+0000) Subject: Correct the implementation of srem to be remainder, not modulus. The sign of X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=53c9520b238514a9c1b63ff02221f7467aad1337;p=oota-llvm.git 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 44b5fd0403f..52509ed000c 100644 --- a/include/llvm/ADT/APInt.h +++ b/include/llvm/ADT/APInt.h @@ -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);