From 0693d94b12ad4bcd14ea5c211b9632ab867b8041 Mon Sep 17 00:00:00 2001 From: Tim Besard Date: Wed, 6 Jul 2022 08:06:29 +0200 Subject: [PATCH 1/2] Add a debug level intrinsic. --- src/ccall.cpp | 7 +++++++ src/jl_exported_funcs.inc | 1 + src/julia_internal.h | 2 ++ src/runtime_intrinsics.c | 5 +++++ 4 files changed, 15 insertions(+) diff --git a/src/ccall.cpp b/src/ccall.cpp index 88c80b333b027..59775adb50e01 100644 --- a/src/ccall.cpp +++ b/src/ccall.cpp @@ -1871,6 +1871,13 @@ static jl_cgval_t emit_ccall(jl_codectx_t &ctx, jl_value_t **args, size_t nargs) return mark_or_box_ccall_result(ctx, ret, retboxed, rt, unionall, static_rt); } } + else if (is_libjulia_func(jl_debug_level)) { + assert(lrt == getInt32Ty(ctx.builder.getContext())); + assert(!isVa && !llvmcall && nccallargs == 0); + JL_GC_POP(); + auto level = ConstantInt::get(getInt32Ty(ctx.builder.getContext()), jl_options.debug_level); + return mark_or_box_ccall_result(ctx, level, retboxed, rt, unionall, static_rt); + } jl_cgval_t retval = sig.emit_a_ccall( ctx, diff --git a/src/jl_exported_funcs.inc b/src/jl_exported_funcs.inc index 72d385329ce49..794702c2a7610 100644 --- a/src/jl_exported_funcs.inc +++ b/src/jl_exported_funcs.inc @@ -112,6 +112,7 @@ XX(jl_declare_constant) \ XX(jl_defines_or_exports_p) \ XX(jl_deprecate_binding) \ + XX(jl_debug_level) \ XX(jl_dlclose) \ XX(jl_dlopen) \ XX(jl_dlsym) \ diff --git a/src/julia_internal.h b/src/julia_internal.h index 60583f2240aea..090ec9504afd1 100644 --- a/src/julia_internal.h +++ b/src/julia_internal.h @@ -1291,6 +1291,8 @@ JL_DLLEXPORT jl_array_t *jl_array_copy(jl_array_t *ary); JL_DLLEXPORT uintptr_t jl_object_id_(jl_value_t *tv, jl_value_t *v) JL_NOTSAFEPOINT; JL_DLLEXPORT void jl_set_next_task(jl_task_t *task) JL_NOTSAFEPOINT; +JL_DLLEXPORT int jl_debug_level(void); + // -- synchronization utilities -- // extern jl_mutex_t typecache_lock; diff --git a/src/runtime_intrinsics.c b/src/runtime_intrinsics.c index 89c9449e55920..0449d64b0df01 100644 --- a/src/runtime_intrinsics.c +++ b/src/runtime_intrinsics.c @@ -1460,3 +1460,8 @@ JL_DLLEXPORT jl_value_t *jl_have_fma(jl_value_t *typ) // TODO: run-time feature check? return jl_false; } + +JL_DLLEXPORT int jl_debug_level() +{ + return jl_options.debug_level; +} From b3e8e72dfa1d7f1ef815420c8d2690fc7ea55fd3 Mon Sep 17 00:00:00 2001 From: Tim Besard Date: Wed, 6 Jul 2022 16:27:27 +0200 Subject: [PATCH 2/2] Add a debug level LLVM intrinsic. --- src/llvm-cpufeatures.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/llvm-cpufeatures.cpp b/src/llvm-cpufeatures.cpp index 75ac96e1b3060..bcf8e003b3e1b 100644 --- a/src/llvm-cpufeatures.cpp +++ b/src/llvm-cpufeatures.cpp @@ -90,6 +90,11 @@ void lowerHaveFMA(Function &intr, Function &caller, CallInst *I) { return; } +void lowerDebugLevel(Function &intr, Function &caller, CallInst *I) { + I->replaceAllUsesWith(ConstantInt::get(I->getType(), jl_options.debug_level)); + return; +} + bool lowerCPUFeatures(Module &M) { SmallVector Materialized; @@ -104,6 +109,13 @@ bool lowerCPUFeatures(Module &M) lowerHaveFMA(F, *I->getParent()->getParent(), I); Materialized.push_back(I); } + } else if (FN == "julia.debug_level") { + for (Use &U: F.uses()) { + User *RU = U.getUser(); + CallInst *I = cast(RU); + lowerDebugLevel(F, *I->getParent()->getParent(), I); + Materialized.push_back(I); + } } }