[Haskell-cafe] SpecConstr message while compiling
Daniel Fischer
daniel.is.fischer at googlemail.com
Sun Oct 23 19:50:02 CEST 2011
On Sunday 23 October 2011, 19:33:55, Daniel Díaz Casanueva wrote:
> Hi, cafe!
>
> I wrote a program and had the following message while compiling (with
> -O2):
>
> SpecConstr
> Function `addOc{v s6RL} [lid]'
> has four call patterns, but the limit is 3
> Use -fspec-constr-count=n to set the bound
> Use -dppr-debug to see specialisations
>
> What it means? Is it bad? It only happens when compiling with -O2.
It's nothing serious.
It's just a message (that accidentally was output by default in the 7.0.*
series) that the spec-constr pass could have done more specialising, but
the limit forbade it.
More specialising on constructors means
- certainly bigger code
- potentially faster code
but it could also become slower (most likely because of worse cache
locality).
It's not even a warning, just a notification.
>
> addOc is a local function (defined in a where clause). If it helps, here
> is the definition:
>
> addOc x [] = [(x,1)]
> addOc x ((y,n):ys) = if x == y then (y,n+1) : ys
> else (y,n) : addOc x ys
>
> I want to know if there is something wrong or a I don't need to take
> care about this.
You need not take care of it, but you can try out and pass
-fspec-constr-count=N
on the command line (here, N = 4 is a good start) to see if the generated
code is faster.
>
> Thanks in advance,
> Daniel Díaz.
More information about the Haskell-Cafe
mailing list