Add gcd/Word RULE-based optimisation
authorHerbert Valerio Riedel <hvr@gnu.org>
Sat, 22 Nov 2014 12:28:25 +0000 (13:28 +0100)
committerHerbert Valerio Riedel <hvr@gnu.org>
Sat, 22 Nov 2014 12:28:25 +0000 (13:28 +0100)
This makes use of the `gcdWord` primitive provided by
be7fb7e58c70cd9b0a933fb26cd5f2607d6dc4b2 which should make the
`Word`-variant of `gcd` as performant as the `Int`-variant.

libraries/base/GHC/Real.hs

index a5a35db..c301325 100644 (file)
@@ -634,6 +634,15 @@ lcm x y         =  abs ((x `quot` (gcd x y)) * y)
 
 gcdInt' :: Int -> Int -> Int
 gcdInt' (I# x) (I# y) = I# (gcdInt x y)
+
+#if MIN_VERSION_integer_gmp(1,0,0)
+{-# RULES
+"gcd/Word->Word->Word"          gcd = gcdWord'
+ #-}
+
+gcdWord' :: Word -> Word -> Word
+gcdWord' (W# x) (W# y) = W# (gcdWord x y)
+#endif
 #endif
 
 integralEnumFrom :: (Integral a, Bounded a) => a -> [a]