Skip to content

Commit

Permalink
codegen: accelerate startup
Browse files Browse the repository at this point in the history
Function->addFnAttr("thunk") is very expensive, take it out of the fast-path
although we should be able to get rid of the rest of this soon too
  • Loading branch information
vtjnash committed Mar 28, 2018
1 parent 38d12f0 commit b6ba1fe
Showing 1 changed file with 11 additions and 10 deletions.
21 changes: 11 additions & 10 deletions src/codegen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6264,15 +6264,6 @@ static GlobalVariable *julia_const_gv(jl_value_t *val)
return nullptr;
}

static Function *jlcall_func_to_llvm(const std::string &cname, jl_fptr_t addr, Module *m)
{
Function *f = Function::Create(jl_func_sig, Function::ExternalLinkage, cname, m);
add_return_attr(f, Attribute::NonNull);
f->addFnAttr("thunk");
add_named_global(f, addr);
return f;
}

extern "C" void jl_fptr_to_llvm(jl_fptr_t fptr, jl_method_instance_t *lam, int specsig)
{
if (imaging_mode) {
Expand All @@ -6291,7 +6282,8 @@ extern "C" void jl_fptr_to_llvm(jl_fptr_t fptr, jl_method_instance_t *lam, int s
funcName << "jsys1_"; // it's a jlcall without a specsig
const char* unadorned_name = jl_symbol_name(lam->def.method->name);
funcName << unadorned_name << "_" << globalUnique++;
Function *f = jlcall_func_to_llvm(funcName.str(), fptr, NULL);
Function *f = Function::Create(jl_func_sig, Function::ExternalLinkage, funcName.str());
add_named_global(f, fptr);
if (specsig) {
if (lam->functionObjectsDecls.specFunctionObject == NULL) {
lam->functionObjectsDecls.specFunctionObject = strdup(f->getName().str().c_str());
Expand Down Expand Up @@ -6335,6 +6327,15 @@ static void init_julia_llvm_meta(void)
tbaa_unionselbyte = tbaa_make_child("jtbaa_unionselbyte", tbaa_data_scalar).first;
}

static Function *jlcall_func_to_llvm(const std::string &cname, jl_fptr_t addr, Module *m)
{
Function *f = Function::Create(jl_func_sig, Function::ExternalLinkage, cname, m);
add_return_attr(f, Attribute::NonNull);
f->addFnAttr("thunk");
add_named_global(f, addr);
return f;
}

static void init_julia_llvm_env(Module *m)
{
// every variable or function mapped in this function must be
Expand Down

0 comments on commit b6ba1fe

Please sign in to comment.