diff options
| author | Alex Rønne Petersen <alex@alexrp.com> | 2024-11-05 14:33:13 +0100 |
|---|---|---|
| committer | Alex Rønne Petersen <alex@alexrp.com> | 2024-11-05 22:41:06 +0100 |
| commit | bdca2d0f485682f78ea155df9f9f1cbb5f461ed8 (patch) | |
| tree | 688050d6907e1d5c8d82dddb25ff5ea5f0452c23 /src/codegen/llvm.zig | |
| parent | e88501a09076e134675160c373bbfb5321038541 (diff) | |
| download | zig-bdca2d0f485682f78ea155df9f9f1cbb5f461ed8.tar.gz zig-bdca2d0f485682f78ea155df9f9f1cbb5f461ed8.zip | |
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.
Diffstat (limited to 'src/codegen/llvm.zig')
| -rw-r--r-- | src/codegen/llvm.zig | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig index 1b90453d49..aa5a027f05 100644 --- a/src/codegen/llvm.zig +++ b/src/codegen/llvm.zig @@ -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), |
