diff options
author | Reid Barton <rwbarton@gmail.com> | 2017-01-27 22:18:27 (GMT) |
---|---|---|
committer | Reid Barton <rwbarton@gmail.com> | 2017-01-27 22:23:18 (GMT) |
commit | ee0889d596d271b2f6bc2e2d6dce2a443edf1b67 (patch) | |
tree | 27378877627c6d06733617b4da575c8cf3ed3fb5 | |
parent | 2af38b065b506cd86e9be20d9592423730f0a5e2 (diff) | |
download | ghc-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.hs | 2 |
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# |