On Oct 26, 2006, at 1:18 AM, Simon Marlow wrote:

Andy Gill wrote:
On Oct 25, 2006, at 2:01 AM, Simon Marlow wrote:

The use of Notes in Core is a slight concern - the simplifier will almost certainly rearrange code without paying attention to the Notes, indeed it looks like you have some hacks already to avoid this (the extra cases in exprArity look quite strange). Weren't you using explicit expressions before? Why the change of design?
Compile time and less hacks. We use Note for SCC right now, so this seemed like the right place to put it. The exprArity
hack is there because of the code
\ x -> _tick \ y -> expr really does have aritty 1; it will translate into
    \x -> case tickme 0 of
              _-> \ y -> expr

We should choose the design that is as modular as possible; that is, requires the fewest changes elsewhere. The example above indicates to me that using a Note is perhaps not the best design, because most of the simplifier assumes that the semantics of 'Note e' are the same as 'e', but this breaks that assumption. Indeed, you already needed to modify various predicates in the simplifier to do something special for Tick expressions.

Sure. I'm open to other designs. One reason I used Note was it worked with unboxed typed, unlike a polymorphic function.

Essentially you've added an extra constructor to Expr but hidden it inside Note. I suspect we'll be finding parts of the simplifier and other core-to-core passes that need to be modified for a long time.

I realise that SCC already breaks the rules a bit, and that's unfortunate too. But it doesn't seem as invasive as the Tick annotations.

The main reason was the need for static fields, that contain the module name and tick number. I'm happy to defer back to PrimOp, but perhaps we need a Constructor that both SCC and Tick can use? I would also consider with a PrimOp with static arguments. Perhaps we need a new type of Id instead, sortof like a PrimOp Id.

The new design has less backend hacks in CorePrep and CoreToStg.

Ok, can you explain why that is?

1. Because I hate code of the form:

exprTrans (App (Var id) e)  | DataMagicId <- maybe_getPrimId id = ...

2. Because I want the tick counter to be *static*, and share the module reference.

Please don't take this as a criticism - HPC is a fantastic addition to GHC. I'd just like to explore the design and see if there are any ways we could improve it, and hopefully give ourselves fewer headaches in the future.

Thank you. No criticism taken; I just want the best Hpc: accurate, fast, and easy to maintain.

The result of bootstrapping GHC, then running all the tests is online, BTW:

        http://www.galois.com/~andy/ghc/hpc_index.html

GHC seems to do really well, most of the code is actually tested! We done!

I do not completely trust the output (yet) but the fact a ghc bootstrapped
with -fhpc enabled runs most of the GHC tests successful is great news.
I'm tracking down the few that were different between the original stage2
and the -fhpc stage2.

AndyG

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

Reply via email to