summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorReid Barton <rwbarton@gmail.com>2017-01-30 11:59:28 -0500
committerBen Gamari <ben@smart-cactus.org>2017-01-30 14:02:34 -0500
commitf984bf2e1deedb4931c0c2d5b6b5128b8b154cb5 (patch)
treedd2dfe2c3273c56df8c89f045df2f1556a3357d8
parent5f8e23444caf7a3d085cd8d97762dc3ed777c297 (diff)
downloadhaskell-f984bf2e1deedb4931c0c2d5b6b5128b8b154cb5.tar.gz
Simplify minusInteger in integer-gmp slightly
These two special cases were created in D2278 by mechanically inlining negateInteger into plusInteger. They aren't needed (the `minusInteger (S# x#) (S# y#)` case already handles all values correctly), and they can never help by avoiding an allocation, unlike the original special case in plusInteger, since we still have to allocate the result. Removing these special cases will save a couple comparisons and conditional branches in the common case of subtracting two small Integers. Test Plan: Existing test `plusMinusInteger` already tests the values in question. Reviewers: bgamari, goldfire, austin, hvr Reviewed By: bgamari, hvr Subscribers: thomie Differential Revision: https://phabricator.haskell.org/D3034
-rw-r--r--libraries/integer-gmp/src/GHC/Integer/Type.hs2
1 files changed, 0 insertions, 2 deletions
diff --git a/libraries/integer-gmp/src/GHC/Integer/Type.hs b/libraries/integer-gmp/src/GHC/Integer/Type.hs
index 0d279ef1cc..d5f92b32db 100644
--- a/libraries/integer-gmp/src/GHC/Integer/Type.hs
+++ b/libraries/integer-gmp/src/GHC/Integer/Type.hs
@@ -421,8 +421,6 @@ plusInteger (Jp# x) (Jn# y)
-- | Subtract one 'Integer' from another.
minusInteger :: Integer -> Integer -> Integer
minusInteger x (S# 0#) = x
-minusInteger (S# 0#) (S# INT_MINBOUND#) = Jp# (wordToBigNat ABS_INT_MINBOUND##)
-minusInteger (S# 0#) (S# y#) = S# (negateInt# y#)
minusInteger (S# x#) (S# y#)
= case subIntC# x# y# of
(# z#, 0# #) -> S# z#