Compiler optimizations questions for ghc 6.10...
Max Bolingbroke
batterseapower at hotmail.com
Thu Feb 19 17:19:08 EST 2009
2009/2/19 Krasimir Angelov <kr.angelov at gmail.com>:
> I was surprised to see this case expression:
>
>> case GHC.Prim.-# 9223372036854775807 ipv_s1bD
>> of wild2_a1xi [ALWAYS Just L] {
>
> What is the purpose to compare the value with maxBound before the
> division? The case expression doesn't disappear even if I use quot
> instead of div.
Have a look at this snippet of the base library, file GHC/Real.lhs:
a `quot` b
| b == 0 = divZeroError
| a == minBound && b == (-1) = overflowError
| otherwise = a `quotInt` b
quotInt is defined in GHC/Base.lhs as:
(I# x) `quotInt` (I# y) = I# (x `quotInt#` y)
And quotInt# is a primitive, which I guess is implemented via machine
division (though I don't work on the codegen stuff at all) - so your
offending case must come from those tests in GHC/Real.lhs.
In general, if you want to answer questions like this you can usually
find the answer by looking at the base code: it's all in Haskell, so
very readable! You can get it online at
http://darcs.haskell.org/libraries/base/GHC/
Cheers,
Max
More information about the Glasgow-haskell-users
mailing list