...
| 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