summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorReid Barton <rwbarton@gmail.com>2017-01-27 17:18:27 -0500
committerReid Barton <rwbarton@gmail.com>2017-01-27 17:23:18 -0500
commitee0889d596d271b2f6bc2e2d6dce2a443edf1b67 (patch)
tree27378877627c6d06733617b4da575c8cf3ed3fb5
parent2af38b065b506cd86e9be20d9592423730f0a5e2 (diff)
downloadhaskell-wip/rwbarton-minusInteger.tar.gz
Simplify minusInteger in integer-gmp slightlywip/rwbarton-minusInteger
Summary: These two special cases were created in D2279 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: austin, hvr, goldfire, bgamari 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#