[Mesa-dev] [PATCH 09/11] ac/radeonsi: port compiler init/destroy out of radeonsi.
Dave Airlie
airlied at gmail.com
Tue Jul 3 00:42:22 UTC 2018
From: Dave Airlie <airlied at redhat.com>
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
---
src/amd/common/ac_llvm_util.c | 43 ++++++++++++++++++++++++++
src/amd/common/ac_llvm_util.h | 6 ++++
src/gallium/drivers/radeonsi/si_pipe.c | 27 ++--------------
3 files changed, 51 insertions(+), 25 deletions(-)
diff --git a/src/amd/common/ac_llvm_util.c b/src/amd/common/ac_llvm_util.c
index b1ae8ab9986..16c1d183b24 100644
--- a/src/amd/common/ac_llvm_util.c
+++ b/src/amd/common/ac_llvm_util.c
@@ -282,3 +282,46 @@ ac_count_scratch_private_memory(LLVMValueRef function)
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_init_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);
+}
diff --git a/src/amd/common/ac_llvm_util.h b/src/amd/common/ac_llvm_util.h
index 6269bee7d98..2b6a0b62b63 100644
--- a/src/amd/common/ac_llvm_util.h
+++ b/src/amd/common/ac_llvm_util.h
@@ -125,6 +125,12 @@ LLVMTargetLibraryInfoRef ac_create_target_library_info(const char *triple);
void ac_dispose_target_library_info(LLVMTargetLibraryInfoRef library_info);
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
}
#endif
diff --git a/src/gallium/drivers/radeonsi/si_pipe.c b/src/gallium/drivers/radeonsi/si_pipe.c
index 91ddcf7a5ba..ad0ca7c6169 100644
--- a/src/gallium/drivers/radeonsi/si_pipe.c
+++ b/src/gallium/drivers/radeonsi/si_pipe.c
@@ -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->debug_flags & DBG(CHECK_IR) ? AC_TM_CHECK_IR : 0);
- const char *triple;
- 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_init_passmgr(compiler->target_library_info,
- tm_options & AC_TM_CHECK_IR);
- if (!compiler->passmgr)
- return;
+ ac_init_llvm_compiler(compiler, sscreen->info.family, tm_options);
}
static void si_destroy_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)
- gallivm_dispose_target_library_info(compiler->target_library_info);
-#endif
- if (compiler->tm)
- LLVMDisposeTargetMachine(compiler->tm);
+ ac_destroy_llvm_compiler(compiler);
}
/*
--
2.17.1
More information about the mesa-dev
mailing list