authorgravatar for thatlemon@gmail.comLemonBoy <thatlemon@gmail.com> 2021-06-05 21:24:30+02:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-06-06 18:01:47-07:00
log2681e1ffe0822d8574df1d3a733e69e01945e6bf
tree4a5024bc574faaefd0c21d19665a30286bb77e63
parent27f6db66e39e0d3d1efb6f928f2fcfe18f892d7b

stage1: Apply the same set of fn attributes everywhere

Make sure to propagate the target-specific attributes to internal functions too. Closes #8965

1 files changed, 29 insertions(+), 29 deletions(-)

src/stage1/codegen.cpp+29-29
......@@ -364,6 +364,29 @@ static bool codegen_have_frame_pointer(CodeGen *g) {
364364 return g->build_mode == BuildModeDebug;
365365}
366366
367static void add_common_fn_attributes(CodeGen *g, LLVMValueRef llvm_fn) {
368 if (!g->red_zone) {
369 addLLVMFnAttr(llvm_fn, "noredzone");
370 }
371
372 addLLVMFnAttr(llvm_fn, "nounwind");
373 add_uwtable_attr(g, llvm_fn);
374 addLLVMFnAttr(llvm_fn, "nobuiltin");
375
376 if (g->build_mode == BuildModeSmallRelease) {
377 // Optimize for small code size.
378 addLLVMFnAttr(llvm_fn, "minsize");
379 addLLVMFnAttr(llvm_fn, "optsize");
380 }
381
382 if (g->zig_target->llvm_cpu_name != nullptr) {
383 ZigLLVMAddFunctionAttr(llvm_fn, "target-cpu", g->zig_target->llvm_cpu_name);
384 }
385 if (g->zig_target->llvm_cpu_features != nullptr) {
386 ZigLLVMAddFunctionAttr(llvm_fn, "target-features", g->zig_target->llvm_cpu_features);
387 }
388}
389
367390static LLVMValueRef make_fn_llvm_value(CodeGen *g, ZigFn *fn) {
368391 const char *unmangled_name = buf_ptr(&fn->symbol_name);
369392 const char *symbol_name;
......@@ -556,23 +579,10 @@ static LLVMValueRef make_fn_llvm_value(CodeGen *g, ZigFn *fn) {
556579 maybe_import_dll(g, llvm_fn, linkage);
557580 }
558581
559 if (!g->red_zone) {
560 addLLVMFnAttr(llvm_fn, "noredzone");
561 }
562
563582 if (fn->alignstack_value != 0) {
564583 addLLVMFnAttrInt(llvm_fn, "alignstack", fn->alignstack_value);
565584 }
566585
567 if (g->build_mode == BuildModeSmallRelease) {
568 // Optimize for small code size.
569 addLLVMFnAttr(llvm_fn, "minsize");
570 addLLVMFnAttr(llvm_fn, "optsize");
571 }
572
573 addLLVMFnAttr(llvm_fn, "nounwind");
574 add_uwtable_attr(g, llvm_fn);
575 addLLVMFnAttr(llvm_fn, "nobuiltin");
576586 if (codegen_have_frame_pointer(g) && cc != CallingConventionInline) {
577587 ZigLLVMAddFunctionAttr(llvm_fn, "frame-pointer", "all");
578588 }
......@@ -588,12 +598,7 @@ static LLVMValueRef make_fn_llvm_value(CodeGen *g, ZigFn *fn) {
588598 // use the ABI alignment, which is fine.
589599 }
590600
591 if (g->zig_target->llvm_cpu_name != nullptr) {
592 ZigLLVMAddFunctionAttr(llvm_fn, "target-cpu", g->zig_target->llvm_cpu_name);
593 }
594 if (g->zig_target->llvm_cpu_features != nullptr) {
595 ZigLLVMAddFunctionAttr(llvm_fn, "target-features", g->zig_target->llvm_cpu_features);
596 }
601 add_common_fn_attributes(g, llvm_fn);
597602
598603 if (is_async) {
599604 addLLVMArgAttr(llvm_fn, 0, "nonnull");
......@@ -1183,8 +1188,7 @@ static LLVMValueRef get_add_error_return_trace_addr_fn(CodeGen *g) {
11831188 addLLVMFnAttr(fn_val, "alwaysinline");
11841189 LLVMSetLinkage(fn_val, LLVMInternalLinkage);
11851190 ZigLLVMFunctionSetCallingConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified));
1186 addLLVMFnAttr(fn_val, "nounwind");
1187 add_uwtable_attr(g, fn_val);
1191 add_common_fn_attributes(g, fn_val);
11881192 // Error return trace memory is in the stack, which is impossible to be at address 0
11891193 // on any architecture.
11901194 addLLVMArgAttr(fn_val, (unsigned)0, "nonnull");
......@@ -1263,8 +1267,7 @@ static LLVMValueRef get_return_err_fn(CodeGen *g) {
12631267 addLLVMFnAttr(fn_val, "cold");
12641268 LLVMSetLinkage(fn_val, LLVMInternalLinkage);
12651269 ZigLLVMFunctionSetCallingConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified));
1266 addLLVMFnAttr(fn_val, "nounwind");
1267 add_uwtable_attr(g, fn_val);
1270 add_common_fn_attributes(g, fn_val);
12681271 if (codegen_have_frame_pointer(g)) {
12691272 ZigLLVMAddFunctionAttr(fn_val, "frame-pointer", "all");
12701273 }
......@@ -1346,8 +1349,7 @@ static LLVMValueRef get_safety_crash_err_fn(CodeGen *g) {
13461349 addLLVMFnAttr(fn_val, "cold");
13471350 LLVMSetLinkage(fn_val, LLVMInternalLinkage);
13481351 ZigLLVMFunctionSetCallingConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified));
1349 addLLVMFnAttr(fn_val, "nounwind");
1350 add_uwtable_attr(g, fn_val);
1352 add_common_fn_attributes(g, fn_val);
13511353 if (codegen_have_frame_pointer(g)) {
13521354 ZigLLVMAddFunctionAttr(fn_val, "frame-pointer", "all");
13531355 }
......@@ -2322,8 +2324,7 @@ static LLVMValueRef get_merge_err_ret_traces_fn_val(CodeGen *g) {
23222324 LLVMValueRef fn_val = LLVMAddFunction(g->module, fn_name, fn_type_ref);
23232325 LLVMSetLinkage(fn_val, LLVMInternalLinkage);
23242326 ZigLLVMFunctionSetCallingConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified));
2325 addLLVMFnAttr(fn_val, "nounwind");
2326 add_uwtable_attr(g, fn_val);
2327 add_common_fn_attributes(g, fn_val);
23272328 addLLVMArgAttr(fn_val, (unsigned)0, "noalias");
23282329 addLLVMArgAttr(fn_val, (unsigned)0, "writeonly");
23292330
......@@ -5266,8 +5267,7 @@ static LLVMValueRef get_enum_tag_name_function(CodeGen *g, ZigType *enum_type) {
52665267 LLVMValueRef fn_val = LLVMAddFunction(g->module, fn_name, fn_type_ref);
52675268 LLVMSetLinkage(fn_val, LLVMInternalLinkage);
52685269 ZigLLVMFunctionSetCallingConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified));
5269 addLLVMFnAttr(fn_val, "nounwind");
5270 add_uwtable_attr(g, fn_val);
5270 add_common_fn_attributes(g, fn_val);
52715271 if (codegen_have_frame_pointer(g)) {
52725272 ZigLLVMAddFunctionAttr(fn_val, "frame-pointer", "all");
52735273 }