[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