
#13016: SPECIALIZE INLINE doesn't necessarily inline specializations of a recursive function -------------------------------------+------------------------------------- Reporter: nfrisby | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 8.0.1 Resolution: | Keywords: Inlining Operating System: Unknown/Multiple | Architecture: Type of failure: Runtime | Unknown/Multiple performance bug | Test Case: Blocked By: | Blocking: Related Tickets: #13014 | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by dfeuer): Just for the heck of it, I decided to try translating this into class style: {{{#!hs class BangColon e where (!:) :: Arr e -> Int -> e instance BangColon Int where {-# SPECIALISE INLINE (!:) :: Arr Int -> Int -> Int #-} ArrInt ba !: i = ba * i instance (BangColon a, BangColon b) => BangColon (a, b) where {-# SPECIALISE INLINE (!:) :: (BangColon a, BangColon b) => Arr (a, b) -> Int -> (a, b) #-} ArrPair a1 a2 !: i = (a1 !: i, a2 !: i) }}} Written this way, the specializations inline as requested, producing {{{#!hs Dp.example2 :: Int [GblId, Caf=NoCafRefs, Str=m, Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 20}] Dp.example2 = GHC.Types.I# 10# -- RHS size: {terms: 2, types: 0, coercions: 0, joins: 0/0} Dp.example1 :: Int [GblId, Caf=NoCafRefs, Str=m, Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 20}] Dp.example1 = GHC.Types.I# 15# -- RHS size: {terms: 3, types: 2, coercions: 0, joins: 0/0} example :: (Int, Int) [GblId, Caf=NoCafRefs, Str=m, Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 30}] example = (Dp.example2, Dp.example1) }}} So the problem seems confined to the GADT function case. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/13016#comment:3 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler