Commit bdca2d0f48

Alex Rønne Petersen <alex@alexrp.com>
2024-11-05 14:33:13
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.
1 parent e88501a
Changed files (1)
src
codegen
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),