Module: Mesa
Branch: master
Commit: d853d3a59bd5f8720a5b021bcd64a193d370b623
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d853d3a59bd5f8720a5b021bcd64a193d370b623

Author: Dave Airlie <[email protected]>
Date:   Tue Jul  3 09:51:42 2018 +1000

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 <[email protected]>

---

 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 01852dbff4..fa85c625b3 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_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);
+}
diff --git a/src/amd/common/ac_llvm_util.h b/src/amd/common/ac_llvm_util.h
index 2a8f691136..cd56ff5f41 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 5ac1a12a05..ad0ca7c616 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_create_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);
 }
 
 /*

_______________________________________________
mesa-commit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to