Re: [GHC] #7367: Optimiser / Linker Problem on amd64

#7367: Optimiser / Linker Problem on amd64 --------------------------------------------+------------------------------ Reporter: wurmli | Owner: Type: bug | Status: new Priority: normal | Milestone: 7.8.1 Component: Build System | Version: 7.6.1 Resolution: | Keywords: Operating System: Linux | Architecture: x86_64 Type of failure: Runtime performance bug | (amd64) Test Case: | Difficulty: Unknown Blocking: | Blocked By: | Related Tickets: --------------------------------------------+------------------------------ Comment (by simonpj): Oh I missed that. `go` is recursive, but it only calls `f` as it exits. This refactoring would make that much clearer (including to the programmer), and GHC might even spot the linearity: {{{ flopS :: Perm -> (Int -> IO a) -> IO a flopS !xs f = do let go !acc = do k <- peekElemOff xs 0 if k == 0 then return acc else flop (fromIntegral k) xs >> go (acc+1) acc <- go 0 f acc }}} However your points about controlling floating remain. It would not be hard to add flags for "only float if the thing will get to top level" or "only float existing bindings, don't create new thunks". -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/7367#comment:10 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler
participants (1)
-
GHC