From: Dave Airlie <airl...@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

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to