regression: RULES not matching
Duncan Coutts
duncan.coutts at worc.ox.ac.uk
Wed Jul 19 15:24:28 EDT 2006
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
More information about the Glasgow-haskell-bugs
mailing list