summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorReid Barton <rwbarton@gmail.com>2017-01-27 22:18:27 (GMT)
committerReid Barton <rwbarton@gmail.com>2017-01-27 22:23:18 (GMT)
commitee0889d596d271b2f6bc2e2d6dce2a443edf1b67 (patch)
tree27378877627c6d06733617b4da575c8cf3ed3fb5
parent2af38b065b506cd86e9be20d9592423730f0a5e2 (diff)
downloadghc-ee0889d596d271b2f6bc2e2d6dce2a443edf1b67.zip
ghc-ee0889d596d271b2f6bc2e2d6dce2a443edf1b67.tar.gz
ghc-ee0889d596d271b2f6bc2e2d6dce2a443edf1b67.tar.bz2
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 0d279ef..d5f92b3 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#