ac/radeonsi: port compiler init/destroy out of radeonsi.
We want to share this code with radv in the future, so port it out of radeonsi. Add a return value as radv will want that to know if this succeeds Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
@@ -282,3 +282,46 @@ ac_count_scratch_private_memory(LLVMValueRef function)
|
|||||||
|
|
||||||
return private_mem_vgprs;
|
return private_mem_vgprs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
ac_init_llvm_compiler(struct ac_llvm_compiler *compiler,
|
||||||
|
enum radeon_family family,
|
||||||
|
enum ac_target_machine_options tm_options)
|
||||||
|
{
|
||||||
|
const char *triple;
|
||||||
|
memset(compiler, 0, sizeof(*compiler));
|
||||||
|
|
||||||
|
compiler->tm = ac_create_target_machine(family,
|
||||||
|
tm_options, &triple);
|
||||||
|
if (!compiler->tm)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
compiler->target_library_info =
|
||||||
|
ac_create_target_library_info(triple);
|
||||||
|
if (!compiler->target_library_info)
|
||||||
|
goto fail;
|
||||||
|
|
||||||
|
compiler->passmgr = ac_create_passmgr(compiler->target_library_info,
|
||||||
|
tm_options & AC_TM_CHECK_IR);
|
||||||
|
if (!compiler->passmgr)
|
||||||
|
goto fail;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
fail:
|
||||||
|
ac_destroy_llvm_compiler(compiler);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ac_destroy_llvm_compiler(struct ac_llvm_compiler *compiler)
|
||||||
|
{
|
||||||
|
if (compiler->passmgr)
|
||||||
|
LLVMDisposePassManager(compiler->passmgr);
|
||||||
|
#if HAVE_LLVM >= 0x0700
|
||||||
|
/* This crashes on LLVM 5.0 and 6.0 and Ubuntu 18.04, so leak it there. */
|
||||||
|
if (compiler->target_library_info)
|
||||||
|
ac_dispose_target_library_info(compiler->target_library_info);
|
||||||
|
#endif
|
||||||
|
if (compiler->tm)
|
||||||
|
LLVMDisposeTargetMachine(compiler->tm);
|
||||||
|
}
|
||||||
|
@@ -125,6 +125,12 @@ LLVMTargetLibraryInfoRef ac_create_target_library_info(const char *triple);
|
|||||||
void ac_dispose_target_library_info(LLVMTargetLibraryInfoRef library_info);
|
void ac_dispose_target_library_info(LLVMTargetLibraryInfoRef library_info);
|
||||||
void ac_init_llvm_once(void);
|
void ac_init_llvm_once(void);
|
||||||
|
|
||||||
|
|
||||||
|
bool ac_init_llvm_compiler(struct ac_llvm_compiler *compiler,
|
||||||
|
enum radeon_family family,
|
||||||
|
enum ac_target_machine_options tm_options);
|
||||||
|
void ac_destroy_llvm_compiler(struct ac_llvm_compiler *compiler);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@@ -114,35 +114,12 @@ static void si_init_compiler(struct si_screen *sscreen,
|
|||||||
(!sscreen->llvm_has_working_vgpr_indexing ? AC_TM_PROMOTE_ALLOCA_TO_SCRATCH : 0) |
|
(!sscreen->llvm_has_working_vgpr_indexing ? AC_TM_PROMOTE_ALLOCA_TO_SCRATCH : 0) |
|
||||||
(sscreen->debug_flags & DBG(CHECK_IR) ? AC_TM_CHECK_IR : 0);
|
(sscreen->debug_flags & DBG(CHECK_IR) ? AC_TM_CHECK_IR : 0);
|
||||||
|
|
||||||
const char *triple;
|
ac_init_llvm_compiler(compiler, sscreen->info.family, tm_options);
|
||||||
ac_init_llvm_once();
|
|
||||||
compiler->tm = ac_create_target_machine(sscreen->info.family,
|
|
||||||
tm_options, &triple);
|
|
||||||
if (!compiler->tm)
|
|
||||||
return;
|
|
||||||
|
|
||||||
compiler->target_library_info =
|
|
||||||
gallivm_create_target_library_info(triple);
|
|
||||||
if (!compiler->target_library_info)
|
|
||||||
return;
|
|
||||||
|
|
||||||
compiler->passmgr = ac_create_passmgr(compiler->target_library_info,
|
|
||||||
tm_options & AC_TM_CHECK_IR);
|
|
||||||
if (!compiler->passmgr)
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void si_destroy_compiler(struct ac_llvm_compiler *compiler)
|
static void si_destroy_compiler(struct ac_llvm_compiler *compiler)
|
||||||
{
|
{
|
||||||
if (compiler->passmgr)
|
ac_destroy_llvm_compiler(compiler);
|
||||||
LLVMDisposePassManager(compiler->passmgr);
|
|
||||||
#if HAVE_LLVM >= 0x0700
|
|
||||||
/* This crashes on LLVM 5.0 and 6.0 and Ubuntu 18.04, so leak it there. */
|
|
||||||
if (compiler->target_library_info)
|
|
||||||
gallivm_dispose_target_library_info(compiler->target_library_info);
|
|
||||||
#endif
|
|
||||||
if (compiler->tm)
|
|
||||||
LLVMDisposeTargetMachine(compiler->tm);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Reference in New Issue
Block a user