Claus, Max

| > My preferred spec would be roughly
| >
| > {-# NOINLINE f #-}
| >    as now
| >
| > {-# INLINE f #-}
| >    works as now, which is for non-recursive f only (might in future
| >    be taken as go-ahead for analysis-based recursion unfolding)
| >
| > {-# INLINE f PEEL n #-}
| >    inline calls *into* recursive f (called loop peeling for loops)
| >
| > {-# INLINE f UNROLL m #-}
| >    inline recursive calls to f *inside* f (called loop unrolling for loops)
| >
| > {-# INLINE f PEEL n UNROLL m #-}
| >    combine the previous two

Sounds as if you two are evolving a good design, thank you.  I am not following 
the details closely, but I have the advantage of being able to chat to Max 
directly.

Suggestion: if after discussion you think this is a valuable thing to do, write 
a GHC-Trac-Wiki page describing the design as precisely as possible (eg with 
examples; I find the above one-liners hard to grok). Along with any major 
design alternatives.  Ideally with a few indicative measurements gotten by 
by-hand transformations, that show there are real benefits to be had.

For implementation, there are two routes.  Either totally built-in, or using a 
Core-to-Core plug-in.  The thing I like about the latter is that it can be done 
without having GHC HQ in the critical path, because we (I) tend to slow things 
down, being a uniprocesor.  We don't have the plug-in capability yet, but I'm 
encouraging Max to polish it up so that we do.  I think it'd be a very valuable 
facility.

Simon
_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to