stage1 codegen

This commit is contained in:
Lee Cannon 2021-09-30 19:50:18 +01:00
parent b15d6b2a34
commit 1e94221190

View File

@ -363,10 +363,6 @@ static bool cc_want_sret_attr(CallingConvention cc) {
zig_unreachable();
}
static bool codegen_have_frame_pointer(CodeGen *g) {
return g->build_mode == BuildModeDebug;
}
static void add_common_fn_attributes(CodeGen *g, LLVMValueRef llvm_fn) {
if (!g->red_zone) {
addLLVMFnAttr(llvm_fn, "noredzone");
@ -603,7 +599,7 @@ static LLVMValueRef make_fn_llvm_value(CodeGen *g, ZigFn *fn) {
addLLVMFnAttrInt(llvm_fn, "alignstack", fn->alignstack_value);
}
if (codegen_have_frame_pointer(g) && cc != CallingConventionInline) {
if (!g->omit_frame_pointer && cc != CallingConventionInline) {
ZigLLVMAddFunctionAttr(llvm_fn, "frame-pointer", "all");
}
if (fn->section_name) {
@ -1223,7 +1219,7 @@ static LLVMValueRef get_add_error_return_trace_addr_fn(CodeGen *g) {
// Error return trace memory is in the stack, which is impossible to be at address 0
// on any architecture.
addLLVMArgAttr(fn_val, (unsigned)0, "nonnull");
if (codegen_have_frame_pointer(g)) {
if (!g->omit_frame_pointer) {
ZigLLVMAddFunctionAttr(fn_val, "frame-pointer", "all");
}
@ -1299,7 +1295,7 @@ static LLVMValueRef get_return_err_fn(CodeGen *g) {
LLVMSetLinkage(fn_val, LLVMInternalLinkage);
ZigLLVMFunctionSetCallingConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified));
add_common_fn_attributes(g, fn_val);
if (codegen_have_frame_pointer(g)) {
if (!g->omit_frame_pointer) {
ZigLLVMAddFunctionAttr(fn_val, "frame-pointer", "all");
}
@ -1381,7 +1377,7 @@ static LLVMValueRef get_safety_crash_err_fn(CodeGen *g) {
LLVMSetLinkage(fn_val, LLVMInternalLinkage);
ZigLLVMFunctionSetCallingConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified));
add_common_fn_attributes(g, fn_val);
if (codegen_have_frame_pointer(g)) {
if (!g->omit_frame_pointer) {
ZigLLVMAddFunctionAttr(fn_val, "frame-pointer", "all");
}
// Not setting alignment here. See the comment above about
@ -2389,7 +2385,7 @@ static LLVMValueRef get_merge_err_ret_traces_fn_val(CodeGen *g) {
addLLVMArgAttr(fn_val, (unsigned)1, "noalias");
addLLVMArgAttr(fn_val, (unsigned)1, "readonly");
if (codegen_have_frame_pointer(g)) {
if (!g->omit_frame_pointer) {
ZigLLVMAddFunctionAttr(fn_val, "frame-pointer", "all");
}
@ -5444,7 +5440,7 @@ static LLVMValueRef get_enum_tag_name_function(CodeGen *g, ZigType *enum_type) {
LLVMSetLinkage(fn_val, LLVMInternalLinkage);
ZigLLVMFunctionSetCallingConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified));
add_common_fn_attributes(g, fn_val);
if (codegen_have_frame_pointer(g)) {
if (!g->omit_frame_pointer) {
ZigLLVMAddFunctionAttr(fn_val, "frame-pointer", "all");
}