On Tue, Jun 24, 2008 at 3:51 PM, Don Stewart <
dons@galois.com> wrote:
>
> I've taken all optimization flags out of the .cabal file. They don't have
> any effect. My understanding of things is this: (please correct if wrong)
> All functions have inline pragmas, and all are small (1 or 2 lines) so
> their definitions are all spewed into the .hi files. So in both scenarios
> (library vs local) GHC can "see" the whole library. Since every function
> is inlined, it doesn't matter what flags the library is compiled with.
> That compiled code will never be used so long as the application is
> compiled with optimization on.
You might want to give the simplifier enough time to unwind things.
I use, e.g.
-O2
-fvia-C -optc-O2
-fdicts-cheap
-fno-method-sharing
-fmax-simplifier-iterations10
-fliberate-case-threshold100
in my ghc-options for 'whole program' libraries.
Raise these limits if you find they're having an effect
-- Don
Yeah I saw those in your uvector library and was going to ask: what do they do? Are they documented anywhere? I can't find any info on them. Speicifcally, what is the case liberation threshold? (Can't even find that on google.) That sounds germane because the function in question is one of the few with branches.
And what effect does -fvia-C -optc-O2 have? Those refer to the generation of machine code, do they not? If the library is essentially a core-only library, why use them? As far as I can tell, even -O2 is ineffectual when compiling the library. 'Compiling' here is even a misnomer. We're just transliterating from haskell to core.
Scott