[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