Skip to content

Commit b621328

Browse files
authored
[NFC] codegen: introduce jl_abi_t type for ABI adapter API (#58697)
With luck, this makes it a bit easier to read which parameters are grouped together and which apply to the caller vs. callee side of the ABI adapter.
1 parent c0ecfe9 commit b621328

File tree

6 files changed

+70
-54
lines changed

6 files changed

+70
-54
lines changed

src/aotcompile.cpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -549,16 +549,16 @@ Function *IRLinker_copyFunctionProto(Module *DstM, Function *SF) {
549549
return F;
550550
}
551551

552-
static Function *aot_abi_converter(jl_codegen_params_t &params, Module *M, jl_value_t *declrt, jl_value_t *sigt, size_t nargs, bool specsig, jl_code_instance_t *codeinst, Module *defM, StringRef func, StringRef specfunc, bool target_specsig)
552+
static Function *aot_abi_converter(jl_codegen_params_t &params, Module *M, jl_abi_t from_abi, jl_code_instance_t *codeinst, Module *defM, StringRef func, StringRef specfunc, bool target_specsig)
553553
{
554554
std::string gf_thunk_name;
555555
if (!specfunc.empty()) {
556556
Value *llvmtarget = IRLinker_copyFunctionProto(M, defM->getFunction(specfunc));
557-
gf_thunk_name = emit_abi_converter(M, params, declrt, sigt, nargs, specsig, codeinst, llvmtarget, target_specsig);
557+
gf_thunk_name = emit_abi_converter(M, params, from_abi, codeinst, llvmtarget, target_specsig);
558558
}
559559
else {
560560
Value *llvmtarget = func.empty() ? nullptr : IRLinker_copyFunctionProto(M, defM->getFunction(func));
561-
gf_thunk_name = emit_abi_dispatcher(M, params, declrt, sigt, nargs, specsig, codeinst, llvmtarget);
561+
gf_thunk_name = emit_abi_dispatcher(M, params, from_abi, codeinst, llvmtarget);
562562
}
563563
auto F = M->getFunction(gf_thunk_name);
564564
assert(F);
@@ -577,11 +577,11 @@ static void generate_cfunc_thunks(jl_codegen_params_t &params, jl_compiled_funct
577577
size_t latestworld = jl_atomic_load_acquire(&jl_world_counter);
578578
for (cfunc_decl_t &cfunc : params.cfuncs) {
579579
Module *M = cfunc.cfuncdata->getParent();
580-
jl_value_t *sigt = cfunc.sigt;
580+
jl_value_t *sigt = cfunc.abi.sigt;
581581
JL_GC_PROMISE_ROOTED(sigt);
582-
jl_value_t *declrt = cfunc.declrt;
582+
jl_value_t *declrt = cfunc.abi.rt;
583583
JL_GC_PROMISE_ROOTED(declrt);
584-
Function *unspec = aot_abi_converter(params, M, declrt, sigt, cfunc.nargs, cfunc.specsig, nullptr, nullptr, "", "", false);
584+
Function *unspec = aot_abi_converter(params, M, cfunc.abi, nullptr, nullptr, "", "", false);
585585
jl_code_instance_t *codeinst = nullptr;
586586
auto assign_fptr = [&params, &cfunc, &codeinst, &unspec](Function *f) {
587587
ConstantArray *init = cast<ConstantArray>(cfunc.cfuncdata->getInitializer());
@@ -622,19 +622,19 @@ static void generate_cfunc_thunks(jl_codegen_params_t &params, jl_compiled_funct
622622
jl_printf(JL_STDERR, "WARNING: cfunction: return type of %s does not match\n", name_from_method_instance(mi));
623623
}
624624
if (func == "jl_fptr_const_return") {
625-
std::string gf_thunk_name = emit_abi_constreturn(M, params, declrt, sigt, cfunc.nargs, cfunc.specsig, codeinst->rettype_const);
625+
std::string gf_thunk_name = emit_abi_constreturn(M, params, cfunc.abi, codeinst->rettype_const);
626626
auto F = M->getFunction(gf_thunk_name);
627627
assert(F);
628628
assign_fptr(F);
629629
continue;
630630
}
631631
else if (func == "jl_fptr_args") {
632632
assert(!specfunc.empty());
633-
if (!cfunc.specsig && jl_subtype(astrt, declrt)) {
633+
if (!cfunc.abi.specsig && jl_subtype(astrt, declrt)) {
634634
assign_fptr(IRLinker_copyFunctionProto(M, defM->getFunction(specfunc)));
635635
continue;
636636
}
637-
assign_fptr(aot_abi_converter(params, M, declrt, sigt, cfunc.nargs, cfunc.specsig, codeinst, defM, func, specfunc, false));
637+
assign_fptr(aot_abi_converter(params, M, cfunc.abi, codeinst, defM, func, specfunc, false));
638638
continue;
639639
}
640640
else if (func == "jl_fptr_sparam" || func == "jl_f_opaque_closure_call") {
@@ -646,12 +646,12 @@ static void generate_cfunc_thunks(jl_codegen_params_t &params, jl_compiled_funct
646646
assign_fptr(IRLinker_copyFunctionProto(M, defM->getFunction(specfunc)));
647647
continue;
648648
}
649-
assign_fptr(aot_abi_converter(params, M, declrt, sigt, cfunc.nargs, cfunc.specsig, codeinst, defM, func, specfunc, true));
649+
assign_fptr(aot_abi_converter(params, M, cfunc.abi, codeinst, defM, func, specfunc, true));
650650
continue;
651651
}
652652
}
653653
}
654-
Function *f = codeinst ? aot_abi_converter(params, M, declrt, sigt, cfunc.nargs, cfunc.specsig, codeinst, defM, func, "", false) : unspec;
654+
Function *f = codeinst ? aot_abi_converter(params, M, cfunc.abi, codeinst, defM, func, "", false) : unspec;
655655
return assign_fptr(f);
656656
}
657657
}
@@ -2483,7 +2483,7 @@ void jl_get_llvmf_defn_impl(jl_llvmf_dump_t *dump, jl_method_instance_t *mi, jl_
24832483
jl_compiled_functions_t compiled_functions;
24842484
size_t latestworld = jl_atomic_load_acquire(&jl_world_counter);
24852485
for (cfunc_decl_t &cfunc : output.cfuncs) {
2486-
jl_value_t *sigt = cfunc.sigt;
2486+
jl_value_t *sigt = cfunc.abi.sigt;
24872487
JL_GC_PROMISE_ROOTED(sigt);
24882488
jl_method_instance_t *mi = jl_get_specialization1((jl_tupletype_t*)sigt, latestworld, 0);
24892489
if (mi == nullptr)

src/codegen.cpp

Lines changed: 32 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -7065,44 +7065,43 @@ static void emit_specsig_to_specsig(
70657065
emit_specsig_to_specsig(gf_thunk, returninfo.cc, returninfo.return_roots, calltype, rettype, is_for_opaque_closure, nargs, params, target, targetsig, targetrt, targetspec, rettype_const);
70667066
}
70677067

7068-
std::string emit_abi_converter(Module *M, jl_codegen_params_t &params, jl_value_t *declrt, jl_value_t *sigt, size_t nargs, bool specsig, jl_code_instance_t *codeinst, Value *target, bool target_specsig)
7068+
std::string emit_abi_converter(Module *M, jl_codegen_params_t &params, jl_abi_t from_abi, jl_code_instance_t *codeinst, Value *target, bool target_specsig)
70697069
{
70707070
// this builds a method that calls a method with the same arguments but a different specsig
70717071
// build a specsig -> specsig converter thunk
70727072
// build a specsig -> arg1 converter thunk
70737073
// build a args1 -> specsig converter thunk (gen_invoke_wrapper)
70747074
// build a args1 -> args1 converter thunk (to add typeassert on result)
70757075
bool needsparams = false;
7076-
bool is_opaque_closure = false;
7076+
bool target_is_opaque_closure = false;
70777077
jl_method_instance_t *mi = jl_get_ci_mi(codeinst);
7078-
std::string gf_thunk_name = get_function_name(specsig, needsparams, name_from_method_instance(mi), params.TargetTriple);
7078+
std::string gf_thunk_name = get_function_name(from_abi.specsig, needsparams, name_from_method_instance(mi), params.TargetTriple);
70797079
gf_thunk_name += "_gfthunk";
70807080
if (target_specsig) {
70817081
jl_value_t *abi = get_ci_abi(codeinst);
7082-
jl_returninfo_t targetspec = get_specsig_function(params, M, target, "", abi, codeinst->rettype, is_opaque_closure);
7083-
if (specsig)
7084-
emit_specsig_to_specsig(M, gf_thunk_name, sigt, declrt, is_opaque_closure, nargs, params,
7082+
jl_returninfo_t targetspec = get_specsig_function(params, M, target, "", abi, codeinst->rettype, target_is_opaque_closure);
7083+
if (from_abi.specsig)
7084+
emit_specsig_to_specsig(M, gf_thunk_name, from_abi.sigt, from_abi.rt, from_abi.is_opaque_closure, from_abi.nargs, params,
70857085
target, mi->specTypes, codeinst->rettype, &targetspec, nullptr);
70867086
else
7087-
gen_invoke_wrapper(mi, abi, codeinst->rettype, declrt, targetspec, nargs, -1, is_opaque_closure, gf_thunk_name, M, params);
7087+
gen_invoke_wrapper(mi, abi, codeinst->rettype, from_abi.rt, targetspec, from_abi.nargs, -1, from_abi.is_opaque_closure, gf_thunk_name, M, params);
70887088
}
70897089
else {
7090-
if (specsig)
7091-
emit_specsig_to_specsig(M, gf_thunk_name, sigt, declrt, is_opaque_closure, nargs, params,
7090+
if (from_abi.specsig)
7091+
emit_specsig_to_specsig(M, gf_thunk_name, from_abi.sigt, from_abi.rt, from_abi.is_opaque_closure, from_abi.nargs, params,
70927092
target, mi->specTypes, codeinst->rettype, nullptr, nullptr);
70937093
else
7094-
emit_fptr1_wrapper(M, gf_thunk_name, target, nullptr, declrt, codeinst->rettype, params);
7094+
emit_fptr1_wrapper(M, gf_thunk_name, target, nullptr, from_abi.rt, codeinst->rettype, params);
70957095
}
70967096
return gf_thunk_name;
70977097
}
70987098

7099-
std::string emit_abi_dispatcher(Module *M, jl_codegen_params_t &params, jl_value_t *declrt, jl_value_t *sigt, size_t nargs, bool specsig, jl_code_instance_t *codeinst, Value *invoke)
7099+
std::string emit_abi_dispatcher(Module *M, jl_codegen_params_t &params, jl_abi_t from_abi, jl_code_instance_t *codeinst, Value *invoke)
71007100
{
71017101
// this builds a method that calls a method with the same arguments but a different specsig
71027102
// build a specsig -> args1 (apply_generic) or invoke (emit_tojlinvoke) call
71037103
// build a args1 -> args1 call (emit_fptr1_wrapper)
71047104
// build a args1 -> invoke call (emit_tojlinvoke)
7105-
bool is_opaque_closure = false;
71067105
Value *target;
71077106
if (!codeinst)
71087107
target = prepare_call_in(M, jlapplygeneric_func);
@@ -7114,33 +7113,40 @@ std::string emit_abi_dispatcher(Module *M, jl_codegen_params_t &params, jl_value
71147113
else
71157114
raw_string_ostream(gf_thunk_name) << "j_";
71167115
raw_string_ostream(gf_thunk_name) << jl_atomic_fetch_add_relaxed(&globalUniqueGeneratedNames, 1) << "_gfthunk";
7117-
if (specsig)
7118-
emit_specsig_to_specsig(M, gf_thunk_name, sigt, declrt, is_opaque_closure, nargs, params,
7119-
target, sigt, codeinst ? codeinst->rettype : (jl_value_t*)jl_any_type, nullptr, nullptr);
7116+
if (from_abi.specsig)
7117+
emit_specsig_to_specsig(M, gf_thunk_name, from_abi.sigt, from_abi.rt, from_abi.is_opaque_closure, from_abi.nargs, params,
7118+
target, from_abi.sigt, codeinst ? codeinst->rettype : (jl_value_t*)jl_any_type, nullptr, nullptr);
71207119
else
7121-
emit_fptr1_wrapper(M, gf_thunk_name, target, nullptr, declrt, codeinst ? codeinst->rettype : (jl_value_t*)jl_any_type, params);
7120+
emit_fptr1_wrapper(M, gf_thunk_name, target, nullptr, from_abi.rt, codeinst ? codeinst->rettype : (jl_value_t*)jl_any_type, params);
71227121
return gf_thunk_name;
71237122
}
71247123

7125-
std::string emit_abi_constreturn(Module *M, jl_codegen_params_t &params, jl_value_t *declrt, jl_value_t *sigt, size_t nargs, bool specsig, jl_value_t *rettype_const)
7124+
std::string emit_abi_constreturn(Module *M, jl_codegen_params_t &params, jl_abi_t from_abi, jl_value_t *rettype_const)
71267125
{
7127-
bool is_opaque_closure = false;
71287126
std::string gf_thunk_name;
71297127
raw_string_ostream(gf_thunk_name) << "jconst_" << jl_atomic_fetch_add_relaxed(&globalUniqueGeneratedNames, 1);
7130-
if (specsig) {
7131-
emit_specsig_to_specsig(M, gf_thunk_name, sigt, declrt, is_opaque_closure, nargs, params,
7132-
nullptr, sigt, jl_typeof(rettype_const), nullptr, rettype_const);
7128+
if (from_abi.specsig) {
7129+
emit_specsig_to_specsig(M, gf_thunk_name, from_abi.sigt, from_abi.rt, from_abi.is_opaque_closure, from_abi.nargs, params,
7130+
nullptr, from_abi.sigt, jl_typeof(rettype_const), nullptr, rettype_const);
71337131
}
71347132
else {
7135-
emit_fptr1_wrapper(M, gf_thunk_name, nullptr, rettype_const, declrt, jl_typeof(rettype_const), params);
7133+
emit_fptr1_wrapper(M, gf_thunk_name, nullptr, rettype_const, from_abi.rt, jl_typeof(rettype_const), params);
71367134
}
71377135
return gf_thunk_name;
71387136
}
71397137

71407138
std::string emit_abi_constreturn(Module *M, jl_codegen_params_t &params, bool specsig, jl_code_instance_t *codeinst)
71417139
{
7142-
jl_value_t *abi = get_ci_abi(codeinst);
7143-
return emit_abi_constreturn(M, params, codeinst->rettype, abi, specsig ? jl_nparams(abi) : 0, specsig, codeinst->rettype_const);
7140+
jl_value_t *sigt = get_ci_abi(codeinst);
7141+
jl_value_t *rt = codeinst->rettype;
7142+
7143+
jl_method_instance_t *mi = jl_get_ci_mi(codeinst);
7144+
bool is_opaque_closure = jl_is_method(mi->def.value) && mi->def.method->is_for_opaque_closure;
7145+
7146+
size_t nargs = specsig ? jl_nparams(sigt) : 0;
7147+
jl_abi_t abi = {sigt, rt, nargs, specsig, is_opaque_closure};
7148+
7149+
return emit_abi_constreturn(M, params, abi, codeinst->rettype_const);
71447150
}
71457151

71467152
// release jl_world_counter
@@ -7196,7 +7202,8 @@ static jl_cgval_t emit_abi_call(jl_codectx_t &ctx, jl_value_t *declrt, jl_value_
71967202
cw->setAttributes(getcaller->getAttributes());
71977203
return cw;
71987204
});
7199-
ctx.emission_context.cfuncs.push_back({declrt, sigt, nargs, specsig, cfuncdata});
7205+
jl_abi_t cfuncabi = {sigt, declrt, nargs, specsig, is_opaque_closure};
7206+
ctx.emission_context.cfuncs.push_back({cfuncabi, cfuncdata});
72007207
if (specsig) {
72017208
// TODO: could we force this to guarantee passing a box for `f` here (since we
72027209
// know we had it here) and on the receiver end (emit_abi_converter /

src/jitlayers.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ static void finish_params(Module *M, jl_codegen_params_t &params, SmallVector<or
256256
}
257257

258258
extern "C" JL_DLLEXPORT_CODEGEN
259-
void *jl_jit_abi_converter_impl(jl_task_t *ct, void *unspecialized, jl_value_t *declrt, jl_value_t *sigt, size_t nargs, int specsig,
259+
void *jl_jit_abi_converter_impl(jl_task_t *ct, void *unspecialized, jl_abi_t from_abi,
260260
jl_code_instance_t *codeinst, jl_callptr_t invoke, void *target, int target_specsig)
261261
{
262262
if (codeinst == nullptr && unspecialized != nullptr)
@@ -272,14 +272,14 @@ void *jl_jit_abi_converter_impl(jl_task_t *ct, void *unspecialized, jl_value_t *
272272
Module *M = result_m.getModuleUnlocked();
273273
if (target) {
274274
Value *llvmtarget = literal_static_pointer_val((void*)target, PointerType::get(M->getContext(), 0));
275-
gf_thunk_name = emit_abi_converter(M, params, declrt, sigt, nargs, specsig, codeinst, llvmtarget, target_specsig);
275+
gf_thunk_name = emit_abi_converter(M, params, from_abi, codeinst, llvmtarget, target_specsig);
276276
}
277277
else if (invoke == jl_fptr_const_return_addr) {
278-
gf_thunk_name = emit_abi_constreturn(M, params, declrt, sigt, nargs, specsig, codeinst->rettype_const);
278+
gf_thunk_name = emit_abi_constreturn(M, params, from_abi, codeinst->rettype_const);
279279
}
280280
else {
281281
Value *llvminvoke = invoke ? literal_static_pointer_val((void*)invoke, PointerType::get(M->getContext(), 0)) : nullptr;
282-
gf_thunk_name = emit_abi_dispatcher(M, params, declrt, sigt, nargs, specsig, codeinst, llvminvoke);
282+
gf_thunk_name = emit_abi_dispatcher(M, params, from_abi, codeinst, llvminvoke);
283283
}
284284
SmallVector<orc::ThreadSafeModule,0> sharedmodules;
285285
finish_params(M, params, sharedmodules);

src/jitlayers.h

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -220,10 +220,7 @@ struct jl_codegen_call_target_t {
220220

221221
// reification of a call to jl_jit_abi_convert, so that it isn't necessary to parse the Modules to recover this info
222222
struct cfunc_decl_t {
223-
jl_value_t *declrt;
224-
jl_value_t *sigt;
225-
size_t nargs;
226-
bool specsig;
223+
jl_abi_t abi;
227224
llvm::GlobalVariable *cfuncdata;
228225
};
229226

@@ -324,10 +321,10 @@ Function *jl_cfunction_object(jl_function_t *f, jl_value_t *rt, jl_tupletype_t *
324321
jl_codegen_params_t &params);
325322

326323
extern "C" JL_DLLEXPORT_CODEGEN
327-
void *jl_jit_abi_convert(jl_task_t *ct, jl_value_t *declrt, jl_value_t *sigt, size_t nargs, bool specsig, _Atomic(void*) *fptr, _Atomic(size_t) *last_world, void *data);
328-
std::string emit_abi_dispatcher(Module *M, jl_codegen_params_t &params, jl_value_t *declrt, jl_value_t *sigt, size_t nargs, bool specsig, jl_code_instance_t *codeinst, Value *invoke);
329-
std::string emit_abi_converter(Module *M, jl_codegen_params_t &params, jl_value_t *declrt, jl_value_t *sigt, size_t nargs, bool specsig, jl_code_instance_t *codeinst, Value *target, bool target_specsig);
330-
std::string emit_abi_constreturn(Module *M, jl_codegen_params_t &params, jl_value_t *declrt, jl_value_t *sigt, size_t nargs, bool specsig, jl_value_t *rettype_const);
324+
void *jl_jit_abi_convert(jl_task_t *ct, jl_abi_t from_abi, _Atomic(void*) *fptr, _Atomic(size_t) *last_world, void *data);
325+
std::string emit_abi_dispatcher(Module *M, jl_codegen_params_t &params, jl_abi_t from_abi, jl_code_instance_t *codeinst, Value *invoke);
326+
std::string emit_abi_converter(Module *M, jl_codegen_params_t &params, jl_abi_t from_abi, jl_code_instance_t *codeinst, Value *target, bool target_specsig);
327+
std::string emit_abi_constreturn(Module *M, jl_codegen_params_t &params, jl_abi_t from_abi, jl_value_t *rettype_const);
331328
std::string emit_abi_constreturn(Module *M, jl_codegen_params_t &params, bool specsig, jl_code_instance_t *codeinst);
332329

333330
Function *emit_tojlinvoke(jl_code_instance_t *codeinst, StringRef theFptrName, Module *M, jl_codegen_params_t &params) JL_NOTSAFEPOINT;

src/julia_internal.h

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,16 @@ static inline void memassign_safe(int hasptr, char *dst, const jl_value_t *src,
387387
#define GC_OLD_MARKED (GC_OLD | GC_MARKED) // reachable and old
388388
#define GC_IN_IMAGE 4
389389

390+
// data structures for runtime codegen
391+
typedef struct _jl_abi_t {
392+
jl_value_t *sigt;
393+
jl_value_t *rt;
394+
size_t nargs;
395+
int specsig; // bool
396+
// OpaqueClosure Methods override the first argument of their signature
397+
int is_opaque_closure;
398+
} jl_abi_t;
399+
390400
// useful constants
391401
extern jl_methtable_t *jl_method_table JL_GLOBALLY_ROOTED;
392402
extern JL_DLLEXPORT jl_method_t *jl_opaque_closure_method JL_GLOBALLY_ROOTED;
@@ -1629,7 +1639,7 @@ JL_DLLEXPORT jl_value_t *jl_get_cfunction_trampoline(
16291639
void *(*init_trampoline)(void *tramp, void **nval),
16301640
jl_unionall_t *env, jl_value_t **vals);
16311641
JL_DLLEXPORT void *jl_get_abi_converter(jl_task_t *ct, void *data);
1632-
JL_DLLIMPORT void *jl_jit_abi_converter(jl_task_t *ct, void *unspecialized, jl_value_t *declrt, jl_value_t *sigt, size_t nargs, int specsig,
1642+
JL_DLLIMPORT void *jl_jit_abi_converter(jl_task_t *ct, void *unspecialized, jl_abi_t from_abi,
16331643
jl_code_instance_t *codeinst, jl_callptr_t invoke, void *target, int target_specsig);
16341644

16351645

src/runtime_ccall.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,8 @@ void *jl_get_abi_converter(jl_task_t *ct, void *data)
423423
return f;
424424
};
425425
jl_callptr_t invoke = nullptr;
426+
bool is_opaque_closure = false;
427+
jl_abi_t from_abi = { sigt, declrt, nargs, specsig, is_opaque_closure };
426428
if (codeinst != NULL) {
427429
jl_value_t *astrt = codeinst->rettype;
428430
if (astrt != (jl_value_t*)jl_bottom_type &&
@@ -436,23 +438,23 @@ void *jl_get_abi_converter(jl_task_t *ct, void *data)
436438
jl_read_codeinst_invoke(codeinst, &specsigflags, &invoke, &f, 1);
437439
if (invoke != nullptr) {
438440
if (invoke == jl_fptr_const_return_addr) {
439-
return assign_fptr(jl_jit_abi_converter(ct, cfuncdata->unspecialized, declrt, sigt, nargs, specsig, codeinst, invoke, nullptr, false));
441+
return assign_fptr(jl_jit_abi_converter(ct, cfuncdata->unspecialized, from_abi, codeinst, invoke, nullptr, false));
440442
}
441443
else if (invoke == jl_fptr_args_addr) {
442444
assert(f);
443445
if (!specsig && jl_subtype(astrt, declrt))
444446
return assign_fptr(f);
445-
return assign_fptr(jl_jit_abi_converter(ct, cfuncdata->unspecialized, declrt, sigt, nargs, specsig, codeinst, invoke, f, false));
447+
return assign_fptr(jl_jit_abi_converter(ct, cfuncdata->unspecialized, from_abi, codeinst, invoke, f, false));
446448
}
447449
else if (specsigflags & 0b1) {
448450
assert(f);
449451
if (specsig && jl_egal(mi->specTypes, sigt) && jl_egal(declrt, astrt))
450452
return assign_fptr(f);
451-
return assign_fptr(jl_jit_abi_converter(ct, cfuncdata->unspecialized, declrt, sigt, nargs, specsig, codeinst, invoke, f, true));
453+
return assign_fptr(jl_jit_abi_converter(ct, cfuncdata->unspecialized, from_abi, codeinst, invoke, f, true));
452454
}
453455
}
454456
}
455-
f = jl_jit_abi_converter(ct, cfuncdata->unspecialized, declrt, sigt, nargs, specsig, codeinst, invoke, nullptr, false);
457+
f = jl_jit_abi_converter(ct, cfuncdata->unspecialized, from_abi, codeinst, invoke, nullptr, false);
456458
if (codeinst == nullptr)
457459
cfuncdata->unspecialized = f;
458460
return assign_fptr(f);

0 commit comments

Comments
 (0)