Loop unrolling + fusion ?

Roman Leshchinskiy rl at cse.unsw.edu.au
Sun Mar 1 00:31:50 EST 2009


On 01/03/2009, at 04:49, Don Stewart wrote:

> So now, since we've gone to such effort to produce a tiny loop like,  
> this,
> can't we unroll it just a little? Sadly, my attempts to get GCC to  
> trigger
> its loop unroller on this guy haven't succeeded. -funroll-loops and
> -funroll-all-loops doesn't  touch it,

That's because the C produced by GHC doesn't look like a loop to GCC.  
This can be fixed but given that we are moving away from -fvia-C  
anyway, it probably isn't worth doing.

> Anyone think of a way to apply Claus' TH unroller, or somehow  
> convince GCC
> it is worth unrolling this guy, so we get the win of both aggressive  
> high level
> fusion, and aggressive low level loop optimisations?

The problem with low-level loop optimisations is that in general, they  
should be done at a low level. Core is much too early for this. To  
find out whether and how much to unroll a particular loop, you must  
take things like register pressure and instruction scheduling into  
account. IMO, the backend is the only reasonable place to do these  
optimisations. Using an exisiting backend like LLVM would really help  
here.

Roman




More information about the Glasgow-haskell-users mailing list