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: unassignedclangb...@nondot.org
Reporter: ndesaulni...@google.com
CC: blitzrak...@gmail.com, clement.cour...@gmail.com,
david.bolvan...@gmail.com, dgre...@apple.com,
efrie...@quicinc.com, erik.pilking...@gmail.com,
h...@zytor.com, llvm-bugs@lists.llvm.org,
richard-l...@metafoo.co.uk
>From this thread on LKML:
https://lore.kernel.org/lkml/76071c24-ec6f-7f7a-4172-082bd574d...@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.ga3196...@rani.riverdale.lan/
2. https://lore.kernel.org/lkml/20200820175617.ga604...@rani.riverdale.lan/
3. https://lore.kernel.org/lkml/20200821172935.ga1411...@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.
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs