#2132: Optimise nested comparisons
---------------------------------+------------------------------------------
Reporter: simonpj | Owner:
Type: bug | Status: patch
Priority: low | Milestone: 7.4.1
Component: Compiler | Version: 6.8.2
Keywords: | Testcase:
Blockedby: | Difficulty: Unknown
Os: Unknown/Multiple | Blocking:
Architecture: Unknown/Multiple | Failure: Runtime performance bug
---------------------------------+------------------------------------------
Changes (by michalt):
* status: new => patch
Comment:
Attached is my initial implementation of a core-to-core pass that tries to
optimize away unnecessary comparisons. Right now it is able to handle code
like:
{{{
case x < y of
True -> .. case y <= z of
True -> .. x == z .. -- always false
}}}
or
{{{
case x < 10 of
True -> .. case y > 20 of
True -> .. x == y .. -- always false
.. x > 15 .. -- always false
}}}
It basically stores the relations between variables and their intervals
and uses
both to determine if a result of some comparison is known. So far it does
not
handle complex expressions (like anything that includes arithmetic), so:
{{{
case x + 10 < y - 3 of
True -> .. x < y .. -- always false but not handled
}}}
It also doesn't handle the second example in the ticket description.
The patch validates (i.e. I've compiled stage2 and libraries with the new
optimization and it validates). I've also run nofib but I haven't noticed
anything that really stands out (it does find some more than 60
unnecessary
comparisons in nofib and in case of GHC/libraries more than 100).
So what do you think about it? Let me know what should be fixed/changed
etc.
Also I didn't write any tests yet, since I'm not sure how to actually test
it
--- would it be enough to simply write a few cases where the optimization
should
fire and some where it shouldn't and then just make sure that the result
is
as expected?
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/2132#comment:13>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs