turn off let floating

Carl Witty cwitty at newtonlabs.com
Thu Apr 15 11:43:22 EDT 2004

> > However, if you have any suggestions about how to make a FAST 
> > global counter
> > I would be very glad to hear it. From profiling it seems like 
> > this code
> > is a little expensive (also it is called quite frequently).
> You could try the FastMutInt module from GHC
> (ghc/compiler/utils/FastMutInt.hs) to speed things up.  Unfortunately
> unsafePerformIO has some unavoidable overhead: it can't be inlined
> because we don't want the compiler to see its definition.

What happens if you use the FFI to call a C function like
int getCount() { static int x; return x++; }
and mark the function pure (outside the IO monad) and noinline? 
(Probably all the calls get commoned up and it only gets called once;
but it might be worth a try).

You mentioned that you're trying to get a new counter value for every
function application; maybe something like an FFI call to
int getCount(void *f, void *a) { static int x; return x++; }
where you have getCount :: (a -> b) -> a -> Int; then you pass the
function and its argument to getCount.  This should prevent any unwanted
common subexpression elimination.

Carl Witty

More information about the Glasgow-haskell-users mailing list