[llvm-bugs] [Bug 47280] New: [feature request] -fbuiltin-*

via llvm-bugs llvm-bugs at lists.llvm.org
Fri Aug 21 16:55:03 PDT 2020


https://bugs.llvm.org/show_bug.cgi?id=47280

            Bug ID: 47280
           Summary: [feature request] -fbuiltin-*
           Product: clang
           Version: unspecified
          Hardware: PC
                OS: All
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: C
          Assignee: unassignedclangbugs at nondot.org
          Reporter: ndesaulniers at google.com
                CC: blitzrakete at gmail.com, clement.courbet at gmail.com,
                    david.bolvansky at gmail.com, dgregor at apple.com,
                    efriedma at quicinc.com, erik.pilkington at gmail.com,
                    hpa at zytor.com, llvm-bugs at lists.llvm.org,
                    richard-llvm at metafoo.co.uk

>From this thread on LKML:
https://lore.kernel.org/lkml/76071c24-ec6f-7f7a-4172-082bd574d581@zytor.com/

It was noted that for hosted environments that don't quite have a full libc
implementation, that they can lean on -fno-builtin-* flags in Clang to avoid
libcall optimizations where LLVM would emit calls to * which the environment
did not provide definitions of (though this differs from GCC's behavior, see
these three posts from Arvind that are a really fantastic analysis:
1. https://lore.kernel.org/lkml/20200818214146.GA3196105@rani.riverdale.lan/
2. https://lore.kernel.org/lkml/20200820175617.GA604994@rani.riverdale.lan/
3. https://lore.kernel.org/lkml/20200821172935.GA1411923@rani.riverdale.lan/
).

Kernel developer H. Peter Anvin points out it would be helpful for embedded
environments that would use -ffreestanding to opt out of all such libcall
optimizations, to be able to opt back in (rather than opting out via
-fno-builtin-*) to certain libcall optimizations when the otherwise
freestanding implementation provided such symbols with matching semantics (ie.
the Linux kernel).

It was suggested that listing supported functions in the environment via
#pragma's (maybe in a header for codebase-wide inclusion) might be helpful.  In
particular, I think it would slot in nicely in Clang to provide -fbuiltin-*
support (there's rules in tablegen to generate support for -f-* and -fno-* from
one rule).  So `-ffreestanding -fbuiltin-strcpy` would be "disable all libcall
optimizations except related to transforming other libcalls into strcpy,
denoting the target supported no other builtins than strcpy (and the always
required mem* family).

It's not an immediate need, more so a curiosity that it's easy to opt out of
libcall optimizations, but not necessarily opt in.

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20200821/44c29111/attachment.html>


More information about the llvm-bugs mailing list