Skip to content
Snippets Groups Projects
Commit 9be779d9 authored by Ian Lynagh's avatar Ian Lynagh
Browse files

Add some rules; fixes #5767

We now have rules for
    integerToInt    (smallInteger    x) = x
    integerToWord   (wordToInteger   x) = x
    integerToInt64  (int64ToInteger  x) = x
    integerToWord64 (word64ToInteger x) = x
parent 659d4213
No related branches found
No related tags found
No related merge requests found
...@@ -90,6 +90,11 @@ smallInteger i = S# i ...@@ -90,6 +90,11 @@ smallInteger i = S# i
wordToInteger :: Word# -> Integer wordToInteger :: Word# -> Integer
wordToInteger w = case word2Integer# w of (# s, d #) -> J# s d wordToInteger w = case word2Integer# w of (# s, d #) -> J# s d
{-# RULES
"integerToInt/smallInteger" forall x . integerToInt (smallInteger x) = x
"integerToWord/wordToInteger" forall x . integerToWord (wordToInteger x) = x
#-}
{-# NOINLINE integerToWord #-} {-# NOINLINE integerToWord #-}
integerToWord :: Integer -> Word# integerToWord :: Integer -> Word#
integerToWord (S# i) = int2Word# i integerToWord (S# i) = int2Word# i
...@@ -120,6 +125,11 @@ int64ToInteger i = if ((i `leInt64#` intToInt64# 0x7FFFFFFF#) && ...@@ -120,6 +125,11 @@ int64ToInteger i = if ((i `leInt64#` intToInt64# 0x7FFFFFFF#) &&
then smallInteger (int64ToInt# i) then smallInteger (int64ToInt# i)
else case int64ToInteger# i of else case int64ToInteger# i of
(# s, d #) -> J# s d (# s, d #) -> J# s d
{-# RULES
"integerToInt64/int64ToInteger" forall x . integerToInt64 (int64ToInteger x) = x
"integerToWord64/word64ToInteger" forall x . integerToWord64 (word64ToInteger x) = x
#-}
#endif #endif
integerToInt :: Integer -> Int# integerToInt :: Integer -> Int#
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment