aboutsummaryrefslogtreecommitdiff
path: root/src/llvm_backend_proc.cpp
diff options
context:
space:
mode:
authorJesse Meyer <jesse.r.meyer@me.com>2026-02-03 20:52:52 -0500
committerGitHub <noreply@github.com>2026-02-03 20:52:52 -0500
commitb8276065f9296754d1e76e25d6661b7b5567e3e1 (patch)
tree7b8783d43193c16e4ef393a175fede50a8fe52dd /src/llvm_backend_proc.cpp
parentbd6148dd6b77920cf64fea8804b205e8257e8a66 (diff)
parent270df36468df8f89e1ac944205272469142c7a65 (diff)
Merge branch 'master' into lto-support
Diffstat (limited to 'src/llvm_backend_proc.cpp')
-rw-r--r--src/llvm_backend_proc.cpp18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/llvm_backend_proc.cpp b/src/llvm_backend_proc.cpp
index cb8ffcf91..7897e17cd 100644
--- a/src/llvm_backend_proc.cpp
+++ b/src/llvm_backend_proc.cpp
@@ -689,7 +689,7 @@ gb_internal void lb_begin_procedure_body(lbProcedure *p) {
lbAddr res = {};
if (p->entity && p->entity->decl_info &&
- p->entity->decl_info->defer_use_checked &&
+ p->entity->decl_info->defer_use_checked.load(std::memory_order_relaxed) &&
p->entity->decl_info->defer_used == 0) {
// NOTE(bill): this is a bodge to get around the issue of the problem BELOW
@@ -996,7 +996,9 @@ gb_internal lbValue lb_emit_call_internal(lbProcedure *p, lbValue value, lbValue
break;
case ProcTailing_must_tail:
LLVMSetTailCall(ret, true);
+ #if LLVM_VERSION_MAJOR > 14
LLVMSetTailCallKind(ret, LLVMTailCallKindMustTail);
+ #endif
break;
}
@@ -1301,7 +1303,7 @@ gb_internal lbValue lb_emit_call(lbProcedure *p, lbValue value, Array<lbValue> c
}
}
- lb_add_defer_proc(p, p->scope_index, deferred, result_as_args);
+ lb_add_defer_proc(p, p->scope_index, deferred, result_as_args, e->token.pos);
}
}
@@ -2228,8 +2230,10 @@ gb_internal lbValue lb_build_builtin_proc(lbProcedure *p, Ast *expr, TypeAndValu
Entity *e = entity_of_node(ident);
GB_ASSERT(e != nullptr);
- if (e->parent_proc_decl != nullptr && e->parent_proc_decl->entity != nullptr) {
- procedure = e->parent_proc_decl->entity.load()->token.string;
+ DeclInfo *parent_proc_decl = e->parent_proc_decl.load(std::memory_order_relaxed);
+ if (parent_proc_decl != nullptr &&
+ parent_proc_decl->entity != nullptr) {
+ procedure = parent_proc_decl->entity.load()->token.string;
} else {
procedure = str_lit("");
}
@@ -2859,6 +2863,12 @@ gb_internal lbValue lb_build_builtin_proc(lbProcedure *p, Ast *expr, TypeAndValu
case BuiltinProc_count_leading_zeros:
return lb_emit_count_leading_zeros(p, lb_build_expr(p, ce->args[0]), tv.type);
+ case BuiltinProc_count_trailing_ones:
+ return lb_emit_count_trailing_ones(p, lb_build_expr(p, ce->args[0]), tv.type);
+ case BuiltinProc_count_leading_ones:
+ return lb_emit_count_leading_ones(p, lb_build_expr(p, ce->args[0]), tv.type);
+
+
case BuiltinProc_count_ones:
return lb_emit_count_ones(p, lb_build_expr(p, ce->args[0]), tv.type);
case BuiltinProc_count_zeros: