Prevent optimization from tempering with unsafePerformIO

Bernd Brassel bbr at informatik.uni-kiel.de
Wed Oct 17 04:02:14 EDT 2007


Hi David,

thank you! This is really useful information!

> I think it's the let floating (out) together with common subexpression 
> elimination:
> 
>  > ghc --make -O2 -no-recomp -fno-cse  -o curry-no-cse  curry.hs
> [1 of 1] Compiling Main             ( curry.hs, curry.o )
> Linking curry-no-cse ...
>  > ghc --make -O2 -no-recomp -fno-full-laziness  -o curry-no-fll  curry.hs
> [1 of 1] Compiling Main             ( curry.hs, curry.o )
> Linking curry-no-fll ...
>  > ghc --make -O2 -no-recomp -fno-full-laziness -fno-cse  -o 
> curry-no-cse-no-fll  curry.hs
> [1 of 1] Compiling Main             ( curry.hs, curry.o )
> Linking curry-no-cse-no-fll ...
>  > ./curry-no-cse
> 3 possibilities: [True,False]
> 2 possibilities: [True,False]
>  > ./curry-no-fll
> 3 possibilities: [True,False]
> 2 possibilities: [True,False]
>  > ./curry-no-cse-no-fll
> 3 possibilities: [True,True,False]
> 2 possibilities: [True,False]

I will try this on large scale Curry programs. I hope the remaining
optimizations will still do some good. Do you think that there is a way
to be more selective? I mean to select those parts of the program which
can and which cannot be optimized?

> ps.: Maybe it is interesting to look at HasFuse [1] (somewhat outdated), 
> but it exactly forbids both transformations
> 
> [1] http://www.ki.informatik.uni-frankfurt.de/research/diamond/hasfuse/

Yes, that looks interesting, too. Are there plans to update it with the
ghc?

Thanks for your hints!
Bernd


More information about the Glasgow-haskell-users mailing list