Hi Simon,

I think some recent patch has made some of my fusion rules stop
matching.

the test case is:

foo = B.map (+1) . B.filter (/=0)


with ghc 6.4.2 and with older versions of ghc-6.5 (May 26th):

5 RuleFired
    2 int2Word#
    2 narrow8Word#
    1 strTransformerBi/strTransformerBi

with my recent ghc 6.5 (Jul 24th) that strTransformer rule no longer
fires.

the rule is fairly simple:

"strTransformerBi/strTransformerBi" forall f g s.
  strTransformerBi f (strTransformerBi g s) = strTransformerBi (f . g) s

from looking at -ddump-simpl-iterations we get something interesting:

Main.foo :: Data.ByteString.Base.ByteString -> Data.ByteString.Base.ByteString
[Exported]
[Arity 1]
Main.foo =
  \ (x_a1t7 :: Data.ByteString.Base.ByteString) ->
    Data.ByteString.FusionStream.strTransformerBi1
      (Data.ByteString.FusionStream.mapS1 a_s1tf)
      (Data.ByteString.FusionStream.strTransformerBi1
         (Data.ByteString.FusionStream.filterS1 a_s1th) x_a1t7)

This is exactly the form that should be matched by the rule, except..
what is this strTransformerBi1 ? with the '1' suffix?
Where did that come from and is that what's causing the rule not to
match? It's not there in 6.4.2.

The full code is available:
darcs get http://www.cse.unsw.edu.au/~dons/code/fps-unstable

I'm just going to build ghc head and see if the issues still exists.

This is a bit of a problem for Dons and me at the moment because we need
a single version of ghc to use to benchmark our various fusion systems
for a paper. We could go back to the May 26th version I suppose.

Duncan

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

Reply via email to