llvm: Also apply the nobuiltin attribute for the no_builtin module option.

From `zig build-exe --help`:

  -fno-builtin              Disable implicit builtin knowledge of functions

It seems entirely reasonable and even expected that this option should imply
both no-builtins on functions (which disables transformation of recognized code
patterns to libcalls) and nobuiltin on call sites (which disables transformation
of libcalls to intrinsics). We now match Clang's behavior for -fno-builtin.

In both cases, we're painting with a fairly broad brush by applying this to an
entire module, but it's better than nothing. #21833 proposes a more fine-grained
way to apply nobuiltin.
This commit is contained in:
Alex Rønne Petersen 2024-11-05 14:33:13 +01:00
parent e88501a090
commit bdca2d0f48
No known key found for this signature in database

View File

@ -5576,6 +5576,10 @@ pub const FuncGen = struct {
var attributes: Builder.FunctionAttributes.Wip = .{};
defer attributes.deinit(&o.builder);
if (self.ng.ownerModule().no_builtin) {
try attributes.addFnAttr(.nobuiltin, &o.builder);
}
switch (modifier) {
.auto, .never_tail, .always_tail => {},
.never_inline => try attributes.addFnAttr(.@"noinline", &o.builder),