
#12603: INLINE and manually inlining produce different code -------------------------------------+------------------------------------- Reporter: bgamari | Owner: bgamari Type: task | Status: new Priority: normal | Milestone: 8.2.1 Component: Compiler | Version: 8.0.1 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by MikolajKonarski):
I think that's very problematic. Currently GHC decides on a call-site- by-call-site basis whether to inline a given function.[...]
When there is only one call site, IMHO it's reasonable that the outcome should be reproducible with either INLINE or NOINLINE (and it is not currently, see above).
INLINE/NOINLINE let you take control; otherwise you are letting GHC decide.
I'm all for letting GHC outsmart me, but I'd like to be able to then fix the result GHC came up with and tweak it further or tweak other bits of code, keeping this part constant, or stick to it in order to debug my program with slightly varying other portions of code or easily come up with a minimized example for a GHC bug, without GHC sneakily intefering. Currently I can't. Let's move the discussion to https://ghc.haskell.org/trac/ghc/ticket/12747#ticket where I also suggest that INLINABLE+inline+noinline should let the programmer reproduce GHC choices in the multi-call-site case. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/12603#comment:12 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler