[Haskell-cafe] Re: Documenting the impossible

Peter Hercek phercek at gmail.com
Sat Jun 14 18:12:26 EDT 2008

Andrew Coppin wrote:
<-- cut -->
> When compiled without optimisations, the pragma just causes an exception 
> to be thrown, rather like "error" does. When compiled with 
> optimisations, the whole case alternative is removed, and no code is 
> generated for it. (And if the impossible somehow happens... behaviour is 
> undefined.)

So if the compiler optimizes otherwise well you save how much? Something like:
  * one load from cache (since the next is the pointer which will be needed
    anyway later and moreover it was created just few insturctions before);
    almost always should be in L1; so lets say 2 or 3 ticks; moreover this
    applies only when you do not tag pointers (which can be done for Maybe)
  * run test instruction on it; 1 tick
  * conditional jump; should be doable so that it is predicted correctly by
    default - so you get 1 tick here probably too

So you want to save somewhere about 2 to 5 ticks (which with a bit of luck
  can be shared with other instructions) but you get unsafe execution.
  Does not sound right to me. There should be other optimizations which can
  be done and which save more.
If it is ever done I hope it will be possible to switch it off. Or the
  compiler must prove that what I think is impossible is really impossible
  and then it can do it :-D


More information about the Haskell-Cafe mailing list