[llvm-dev] Removing LLVM_ALWAYS_INLINE from ADT classes

Davide Italiano via llvm-dev llvm-dev at lists.llvm.org
Thu Jan 10 13:20:13 PST 2019


On Wed, Jan 9, 2019 at 2:18 PM Davide Italiano <davide at freebsd.org> wrote:
>
> On Wed, Jan 9, 2019 at 9:38 AM Mehdi AMINI <joker.eph at gmail.com> wrote:
> >
> >
> >
> > On Fri, Jan 4, 2019 at 3:15 PM Davide Italiano via llvm-dev <llvm-dev at lists.llvm.org> wrote:
> >>
> >> Hi,
> >> I would like to propose, based on a previous discussion on llvm-dev,
> >> the following change.
> >> https://reviews.llvm.org/D56337
> >>
> >> The main motivation for annotating member functions of ADT clases with
> >> LLVM_ALWAYS_INLINE  was that of speeding up `check-llvm` at `-O0`.
> >> Turns out this significantly degrades the debuggability of fundamental
> >> classes in llvm itself, e.g. StringRef or SmallVector.
> >
> >
> > It seems that the issue is not a problem with the inlining these functions but rather that they aren't emitted when inlined and so can't be called from the debugger.
> >
> > An alternative that preserves the inlining for the performance aspect *and* still emit them in debug build so that they are available in debug builds would be another macro that would expand to something like __attribute__((used)).
> >
>

Your suggestion works just fine. I'll update the patch.

* thread #1, queue = 'com.apple.main-thread', stop reason = step over
    frame #0: 0x000000010000a110 lldb`main(argc=1,
argv=0x00007ffeefbff9c8) at Driver.cpp:872
   869
   870  // Print stack trace on crash.
   871  llvm::StringRef ToolName = llvm::sys::path::filename(argv[0]);
-> 872  llvm::sys::PrintStackTraceOnErrorSignal(ToolName);
   873  llvm::PrettyStackTraceProgram X(argc, argv);
   874
   875  // Parse arguments.

(lldb) p ToolName.size()
(size_t) $2 = 4
(lldb) p ToolName.consume_front(llvm::StringRef("l"))
(bool) $4 = true
(lldb) p ToolName.consume_front(llvm::StringRef("a"))
(bool) $5 = false
(lldb) p ToolName.slice(1,2)
(llvm::StringRef) $3 = (Data = "ldb", Length = 1)

Thank you!


More information about the llvm-dev mailing list