#3744: Comparisons against minBound/maxBound not optimised
--------------------------------------+-------------------------------------
Reporter: rl | Owner:
Type: bug | Status: new
Priority: normal | Milestone: 7.2.1
Component: Compiler | Version: 6.13
Resolution: | Keywords:
Testcase: | Blockedby:
Difficulty: | Os: Unknown/Multiple
Blocking: | Architecture: Unknown/Multiple
Failure: Runtime performance bug |
--------------------------------------+-------------------------------------
Changes (by rl):
* status: closed => new
* resolution: fixed =>
Comment:
Replying to [comment:10 simonpj]:
> The optimisation seems ok, but does this situation ever arise in
practice? Who asks `x < minBound`?
Me! I jump through some hoops in vector to avoid the following problem.
{{{
foo :: Num a => a -> a
{-# INLINE foo #-}
foo x | x < 0 = error "Negative argument"
| otherwise = e
bar :: Word -> Word
bar x = foo x + 1
}}}
I completely missed the patch, thanks a lot for this! Unfortunately, it
doesn't handle Int8/Int16/Word8/Word16 and Int32/Word32 on 64 bit systems.
It isn't very clear how to do this because we only have Int# and Word# in
Core. Also, the inlining of minBound/maxBound for 64 bit types on 32 bit
systems which this patch depends on doesn't work reliably. So this ticket
isn't quite fixed yet but this is good progress!
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/3744#comment:12>
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