[GHC] #12962: No automatic SCC annotations for functions marked INLINABLE

GHC ghc-devs at haskell.org
Sat Feb 4 10:51:19 UTC 2017


#12962: No automatic SCC annotations for functions marked INLINABLE
-------------------------------------+-------------------------------------
        Reporter:  MikolajKonarski   |                Owner:
            Type:  bug               |               Status:  new
        Priority:  normal            |            Milestone:  8.2.1
       Component:  Profiling         |              Version:  8.0.1
      Resolution:                    |             Keywords:  Inlining
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:  #12963            |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------
Description changed by MikolajKonarski:

@@ -19,0 +19,7 @@
+
+ Edit: `-fexpose-all-unfoldings` plus `-fspecialise-aggressively` is a
+ perfect workaround. I wish somebody told me earlier. Compared to 600
+ `INLINABLE` and `-fexpose-all-unfoldings`, the compilation time is
+ unchanged (10min) and the program seems a bit faster (not a scientific
+ benchmark). Profiling works fine with this setup and I don't need to write
+ `INLINABLE` any more (nor add `SCC` by hand).

New description:

 Judging from .prof files and the -xc and -prof callstacks, GHC adds no
 automatic SCC annotations for functions marked `INLINABLE`. The user's
 guide only mentions `INLINE`:
 https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/profiling.html,
 not `INLINABLE`. Is it a bug in documentation or implementation? In my
 case I managed to work around by using `-fexpose-all-unfoldings` instead
 of the tons of `INLINABLE` I was using before, but in general case, adding
 all the SCC annotations by hand seems prohibitive. e.g., in code that
 needs a lot of `INLINABLE` to enable specialization.

 Since `-fexpose-all-unfoldings` does not inhibit profiling and compiling
 with no optimization doesn't help recover it, the culprit is probably not
 the actual inlining or specialization, but rather handling of the
 `INLINABLE` pragma itself.

 Edit: Ufortunately, the workaround by using `-fexpose-all-unfoldings`
 turns out to be not acceptable for me, see #12963. I'm also no longer sure
 about the last paragraph.

 Edit: `-fexpose-all-unfoldings` plus `-fspecialise-aggressively` is a
 perfect workaround. I wish somebody told me earlier. Compared to 600
 `INLINABLE` and `-fexpose-all-unfoldings`, the compilation time is
 unchanged (10min) and the program seems a bit faster (not a scientific
 benchmark). Profiling works fine with this setup and I don't need to write
 `INLINABLE` any more (nor add `SCC` by hand).

--

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/12962#comment:11>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list