...
|         case tick<n> of
|            DEFAULT -> e
|
| does exactly the Right Thing!

That makes sense, ok.

| * We need have binary tick boxes so that we can have accurate branch
| counts, because I want to use this
| information for optimization purposes later.  Can imagine the inliner
| using Hpc information to drive inlining :-)
| The problem that
|
|    tick<n> True
|
| Is CAF-able. So
|
|   case expr of
|     True -> tick<n> True
|     False -> tick<n> False

I do not buy this argument.  After all in
        case tick<n> of DEFAULT -> e
the tick<n> is CAFable too!  But it is not floated out.  Why not?  Because it 
is a "trivial expression" (see CoreUtils.exprIsTrivial).

So all we need do is make (tick<n> e) trivial if e is trivial.  Which you 
probably want anyhow.  Example:
        let x = tick<n> f in ....
You probably would be happy to replace every occurrence of x by (tick<n> f) 
wouldn't you?  Or not?

Even if not, floating will not float out expressions that are "cheap" (see 
CoreUtils.exprIsCheap).   So you could make (tick<n> e) cheap, even if not 
trivial.


I think it's worth following this up; if you could eliminate binary tick-boxes 
that would be a good step forward.

Simon

_______________________________________________
Cvs-ghc mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/cvs-ghc

Reply via email to