[Haskell-cafe] Problem finding rewrite rules

Thomas Horstmeyer horstmey at Mathematik.Uni-Marburg.de
Fri Aug 29 16:42:28 UTC 2014

Grepping for "Class op" brought up a candidate for the first rule:

     -- This is the built-in rule that goes
     -- 	    op (dfT d1 d2) --->  opT d1 d2

A few other greps let me think that the other rule is probably one of 
those generated by the function primOpRules in 
./compiler/prelude/PrelRules.lhs which is called from 
The following comment can be found in the file:

"Note [Constant folding]
primOpRules generates a rewrite rule for each primop
These rules do what is often called "constant folding"
E.g. the rules for +# might say
         4 +# 5 = 9
Well, of course you'd need a lot of rules if you did it
like that, so we use a BuiltinRule instead, so that we
can match in any two literal values.  So the rule is really
more like
         (Lit x) +# (Lit y) = Lit (x+#y)
where the (+#) on the rhs is done at compile time

That is why these rules are built in here."

Hope this helps,

Am 28.08.2014 um 22:40 schrieb Dominik Peteler:
> Dear Cafe,
> I'm currently looking at the optimization GHC is doing and I cannot find
> the rewrite rules it fires. When I run my test code with
>      ghc -O2 -ddump-simpl-stats -ddump-rule-firings Main.hs
> GHC shows the rules which are fired:
>      ...
>      Rule fired: Class op +
>      ...
>      Rule fired: +##
>      ...
> and so on. Nothing new, nothing special.
> However, where do I find the definitions of these rules ?
> I grepped[1] the GHC code base and found nothing so far. I didn't find any
> documentation on it either.
> Can anyone point me to some place where I can find further information ?
> Thank you folks and have a nice day
> Dominik
> PS.: Since I'm working on numerical stable code with directed rounding
> I'm only interested in these two particular rules. I suspect them to
> break parts of my code.
> [1] http://jamie-wong.com/2013/07/12/grep-test
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe

More information about the Haskell-Cafe mailing list