public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug tree-optimization/104539] New: Failed to inline a very simple template function when it's explicit instantiated.
@ 2022-02-15  4:34 cassio.neri at gmail dot com
  2022-02-15  4:35 ` [Bug tree-optimization/104539] " cassio.neri at gmail dot com
                   ` (6 more replies)
  0 siblings, 7 replies; 8+ messages in thread
From: cassio.neri at gmail dot com @ 2022-02-15  4:34 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104539

            Bug ID: 104539
           Summary: Failed to inline a very simple template function when
                    it's explicit instantiated.
           Product: gcc
           Version: 11.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: cassio.neri at gmail dot com
  Target Milestone: ---

Consider:

    template <int>
    //inline
    int f() {
        return 0;
    }

    int g() {
        return f<0>() + 1;
    }

Using -O3, I'd expect f to be inlined in g and this is indeed the case:

    g():
      mov eax, 1
      ret

However, if f is explicit instantiated:

    template unsigned f<0>();

then we get a function call (or a jmp if tail call optimisation is possible)

    g():
      sub rsp, 8
      call int f<0>()
      add rsp, 8
      add eax, 1
      ret

A (quite unusual, IMHO) workaround is declaring f as inline:

    template <unsigned n>
    inline
    unsigned f() {
        return n;
    }

https://godbolt.org/z/TarsTY3zb

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2024-03-18  7:08 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-02-15  4:34 [Bug tree-optimization/104539] New: Failed to inline a very simple template function when it's explicit instantiated cassio.neri at gmail dot com
2022-02-15  4:35 ` [Bug tree-optimization/104539] " cassio.neri at gmail dot com
2022-02-15  8:13 ` [Bug c++/104539] " rguenth at gcc dot gnu.org
2022-02-17  5:11 ` jason at gcc dot gnu.org
2022-02-17 18:29 ` jason at gcc dot gnu.org
2022-02-17 22:51 ` cvs-commit at gcc dot gnu.org
2022-02-17 22:52 ` jason at gcc dot gnu.org
2024-03-18  7:08 ` pinskia at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).