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) {...@@ -364,6 +364,29 @@ static bool codegen_have_frame_pointer(CodeGen *g) {
364 return g->build_mode == BuildModeDebug;364 return g->build_mode == BuildModeDebug;
365}365}
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
367static LLVMValueRef make_fn_llvm_value(CodeGen *g, ZigFn *fn) {390static LLVMValueRef make_fn_llvm_value(CodeGen *g, ZigFn *fn) {
368 const char *unmangled_name = buf_ptr(&fn->symbol_name);391 const char *unmangled_name = buf_ptr(&fn->symbol_name);
369 const char *symbol_name;392 const char *symbol_name;
...@@ -556,23 +579,10 @@ static LLVMValueRef make_fn_llvm_value(CodeGen *g, ZigFn *fn) {...@@ -556,23 +579,10 @@ static LLVMValueRef make_fn_llvm_value(CodeGen *g, ZigFn *fn) {
556 maybe_import_dll(g, llvm_fn, linkage);579 maybe_import_dll(g, llvm_fn, linkage);
557 }580 }
558581
559 if (!g->red_zone) {
560 addLLVMFnAttr(llvm_fn, "noredzone");
561 }
562
563 if (fn->alignstack_value != 0) {582 if (fn->alignstack_value != 0) {
564 addLLVMFnAttrInt(llvm_fn, "alignstack", fn->alignstack_value);583 addLLVMFnAttrInt(llvm_fn, "alignstack", fn->alignstack_value);
565 }584 }
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");
576 if (codegen_have_frame_pointer(g) && cc != CallingConventionInline) {586 if (codegen_have_frame_pointer(g) && cc != CallingConventionInline) {
577 ZigLLVMAddFunctionAttr(llvm_fn, "frame-pointer", "all");587 ZigLLVMAddFunctionAttr(llvm_fn, "frame-pointer", "all");
578 }588 }
...@@ -588,12 +598,7 @@ static LLVMValueRef make_fn_llvm_value(CodeGen *g, ZigFn *fn) {...@@ -588,12 +598,7 @@ static LLVMValueRef make_fn_llvm_value(CodeGen *g, ZigFn *fn) {
588 // use the ABI alignment, which is fine.598 // use the ABI alignment, which is fine.
589 }599 }
590600
591 if (g->zig_target->llvm_cpu_name != nullptr) {601 add_common_fn_attributes(g, llvm_fn);
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 }
597602
598 if (is_async) {603 if (is_async) {
599 addLLVMArgAttr(llvm_fn, 0, "nonnull");604 addLLVMArgAttr(llvm_fn, 0, "nonnull");
...@@ -1183,8 +1188,7 @@ static LLVMValueRef get_add_error_return_trace_addr_fn(CodeGen *g) {...@@ -1183,8 +1188,7 @@ static LLVMValueRef get_add_error_return_trace_addr_fn(CodeGen *g) {
1183 addLLVMFnAttr(fn_val, "alwaysinline");1188 addLLVMFnAttr(fn_val, "alwaysinline");
1184 LLVMSetLinkage(fn_val, LLVMInternalLinkage);1189 LLVMSetLinkage(fn_val, LLVMInternalLinkage);
1185 ZigLLVMFunctionSetCallingConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified));1190 ZigLLVMFunctionSetCallingConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified));
1186 addLLVMFnAttr(fn_val, "nounwind");1191 add_common_fn_attributes(g, fn_val);
1187 add_uwtable_attr(g, fn_val);
1188 // Error return trace memory is in the stack, which is impossible to be at address 01192 // Error return trace memory is in the stack, which is impossible to be at address 0
1189 // on any architecture.1193 // on any architecture.
1190 addLLVMArgAttr(fn_val, (unsigned)0, "nonnull");1194 addLLVMArgAttr(fn_val, (unsigned)0, "nonnull");
...@@ -1263,8 +1267,7 @@ static LLVMValueRef get_return_err_fn(CodeGen *g) {...@@ -1263,8 +1267,7 @@ static LLVMValueRef get_return_err_fn(CodeGen *g) {
1263 addLLVMFnAttr(fn_val, "cold");1267 addLLVMFnAttr(fn_val, "cold");
1264 LLVMSetLinkage(fn_val, LLVMInternalLinkage);1268 LLVMSetLinkage(fn_val, LLVMInternalLinkage);
1265 ZigLLVMFunctionSetCallingConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified));1269 ZigLLVMFunctionSetCallingConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified));
1266 addLLVMFnAttr(fn_val, "nounwind");1270 add_common_fn_attributes(g, fn_val);
1267 add_uwtable_attr(g, fn_val);
1268 if (codegen_have_frame_pointer(g)) {1271 if (codegen_have_frame_pointer(g)) {
1269 ZigLLVMAddFunctionAttr(fn_val, "frame-pointer", "all");1272 ZigLLVMAddFunctionAttr(fn_val, "frame-pointer", "all");
1270 }1273 }
...@@ -1346,8 +1349,7 @@ static LLVMValueRef get_safety_crash_err_fn(CodeGen *g) {...@@ -1346,8 +1349,7 @@ static LLVMValueRef get_safety_crash_err_fn(CodeGen *g) {
1346 addLLVMFnAttr(fn_val, "cold");1349 addLLVMFnAttr(fn_val, "cold");
1347 LLVMSetLinkage(fn_val, LLVMInternalLinkage);1350 LLVMSetLinkage(fn_val, LLVMInternalLinkage);
1348 ZigLLVMFunctionSetCallingConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified));1351 ZigLLVMFunctionSetCallingConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified));
1349 addLLVMFnAttr(fn_val, "nounwind");1352 add_common_fn_attributes(g, fn_val);
1350 add_uwtable_attr(g, fn_val);
1351 if (codegen_have_frame_pointer(g)) {1353 if (codegen_have_frame_pointer(g)) {
1352 ZigLLVMAddFunctionAttr(fn_val, "frame-pointer", "all");1354 ZigLLVMAddFunctionAttr(fn_val, "frame-pointer", "all");
1353 }1355 }
...@@ -2322,8 +2324,7 @@ static LLVMValueRef get_merge_err_ret_traces_fn_val(CodeGen *g) {...@@ -2322,8 +2324,7 @@ static LLVMValueRef get_merge_err_ret_traces_fn_val(CodeGen *g) {
2322 LLVMValueRef fn_val = LLVMAddFunction(g->module, fn_name, fn_type_ref);2324 LLVMValueRef fn_val = LLVMAddFunction(g->module, fn_name, fn_type_ref);
2323 LLVMSetLinkage(fn_val, LLVMInternalLinkage);2325 LLVMSetLinkage(fn_val, LLVMInternalLinkage);
2324 ZigLLVMFunctionSetCallingConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified));2326 ZigLLVMFunctionSetCallingConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified));
2325 addLLVMFnAttr(fn_val, "nounwind");2327 add_common_fn_attributes(g, fn_val);
2326 add_uwtable_attr(g, fn_val);
2327 addLLVMArgAttr(fn_val, (unsigned)0, "noalias");2328 addLLVMArgAttr(fn_val, (unsigned)0, "noalias");
2328 addLLVMArgAttr(fn_val, (unsigned)0, "writeonly");2329 addLLVMArgAttr(fn_val, (unsigned)0, "writeonly");
23292330
...@@ -5266,8 +5267,7 @@ static LLVMValueRef get_enum_tag_name_function(CodeGen *g, ZigType *enum_type) {...@@ -5266,8 +5267,7 @@ static LLVMValueRef get_enum_tag_name_function(CodeGen *g, ZigType *enum_type) {
5266 LLVMValueRef fn_val = LLVMAddFunction(g->module, fn_name, fn_type_ref);5267 LLVMValueRef fn_val = LLVMAddFunction(g->module, fn_name, fn_type_ref);
5267 LLVMSetLinkage(fn_val, LLVMInternalLinkage);5268 LLVMSetLinkage(fn_val, LLVMInternalLinkage);
5268 ZigLLVMFunctionSetCallingConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified));5269 ZigLLVMFunctionSetCallingConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified));
5269 addLLVMFnAttr(fn_val, "nounwind");5270 add_common_fn_attributes(g, fn_val);
5270 add_uwtable_attr(g, fn_val);
5271 if (codegen_have_frame_pointer(g)) {5271 if (codegen_have_frame_pointer(g)) {
5272 ZigLLVMAddFunctionAttr(fn_val, "frame-pointer", "all");5272 ZigLLVMAddFunctionAttr(fn_val, "frame-pointer", "all");
5273 }5273 }