Re: [GHC] #3697: Method selectors aren't floated out of loops
#3697: Method selectors aren't floated out of loops --------------------------------------------+------------------------------ Reporter: rl | Owner: Type: bug | Status: closed Priority: low | Milestone: 7.6.2 Component: Compiler | Version: 6.13 Resolution: fixed | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: Runtime performance bug | Unknown/Multiple Test Case: | Difficulty: Unknown Blocking: | Blocked By: | Related Tickets: --------------------------------------------+------------------------------ Changes (by nomeata): * status: new => closed * difficulty: => Unknown * resolution: => fixed Comment: With todays HEAD, I get good code: {{{ T3697.foo = \ (@ a) ($dEq :: GHC.Classes.Eq a) ($dNum :: GHC.Num.Num a) (as :: [a]) -> let { ds :: a [LclId, Str=DmdType] ds = GHC.Num.fromInteger @ a $dNum T3697.foo1 } in let { lvl :: a -> a -> GHC.Types.Bool [LclId, Str=DmdType] lvl = GHC.Classes./= @ a $dEq } in let { lvl1 :: a -> a -> a [LclId, Str=DmdType] lvl1 = GHC.Num.- @ a $dNum } in letrec { go [Occ=LoopBreaker] :: [a] -> [a] [LclId, Arity=1, Str=DmdType <S,1*U>] go = \ (ds1 :: [a]) -> case ds1 of _ [Occ=Dead] { [] -> GHC.Types.[] @ a; : y ys -> let { x :: a [LclId, Str=DmdType] x = lvl1 y y } in case lvl x ds of _ [Occ=Dead] { GHC.Types.False -> go ys; GHC.Types.True -> GHC.Types.: @ a x (go ys) } }; } in go as }}} Given the age of the bug, I don’t dare to guess what has fixed this. Also, hard to make a useful testcase here. -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/3697#comment:9> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
participants (1)
-
GHC