From 53c9520b238514a9c1b63ff02221f7467aad1337 Mon Sep 17 00:00:00 2001 From: Reid Spencer Date: Sat, 24 Mar 2007 21:56:22 +0000 Subject: [PATCH] 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 --- include/llvm/ADT/APInt.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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); -- 2.11.0