I'm finishing my patches for T6135, but I still have some work to do on 
integer-gmp and 
integer-simpl libraries. I changed the previously existing functions that 
compare Integers:

{-# NOINLINE #-}
eqInteger :: Integer -> Integer -> Bool
eqInteger = ...

to something like this:

{-# NOINLINE eqIntegerPrim #-}
eqIntegerPrim :: Integer -> Integer -> Int#
eqIntegerPrim ... -- same as before, but uses new primops

eqInteger :: Integer -> Integer -> Bool
eqInteger  a b = tagToEnum# (a `eqIntegerPrim`  b)

I noticed that in some cases this implementation prevents constant folding for 
Integers. I'm 
trying to figure out the proper way to fix this. I am considering two ways of 
doing it:

- add new folding rules for eqIntegerPrim and other functions, leave the 
existing rules for 
eqInteger. This should fold: (100012 :: Integer) == 100012 to True (as it does 
now)

- add new folding rules for eqIntegerPrim and other functions, remove the 
existing rules for 
eqInteger. This would fold (100012 :: Integer) == 100012 to tagToEnum# 1#

Which approach is better?

Another question related to this: how do I run validation with integer-simpl 
enabled? Wiki 
describes how to enable integer-simpl for the build, but I think that 
validation is always run 
against integer-gmp? Or am I wrong here?

Janek

_______________________________________________
ghc-devs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/ghc-devs

Reply via email to