[Mesa-dev] [PATCH 03/11] ac/radeonsi: refactor out pass manager init to common code.

Dave Airlie airlied at gmail.com
Tue Jul 3 00:42:16 UTC 2018


From: Dave Airlie <airlied at redhat.com>

---
 src/amd/common/ac_llvm_util.c          | 30 ++++++++++++++++++++++++++
 src/amd/common/ac_llvm_util.h          |  2 ++
 src/gallium/drivers/radeonsi/si_pipe.c | 27 ++---------------------
 3 files changed, 34 insertions(+), 25 deletions(-)

diff --git a/src/amd/common/ac_llvm_util.c b/src/amd/common/ac_llvm_util.c
index 25ff4a8c22a..adcdc730856 100644
--- a/src/amd/common/ac_llvm_util.c
+++ b/src/amd/common/ac_llvm_util.c
@@ -28,6 +28,11 @@
 #include "util/bitscan.h"
 #include <llvm-c/Core.h>
 #include <llvm-c/Support.h>
+#include <llvm-c/Transforms/IPO.h>
+#include <llvm-c/Transforms/Scalar.h>
+#if HAVE_LLVM >= 0x0700
+#include <llvm-c/Transforms/Utils.h>
+#endif
 #include "c11/threads.h"
 #include "util/u_math.h"
 
@@ -160,6 +165,31 @@ LLVMTargetMachineRef ac_create_target_machine(enum radeon_family family,
 	return tm;
 }
 
+LLVMPassManagerRef ac_init_passmgr(LLVMTargetLibraryInfoRef target_library_info,
+				   bool check_ir)
+{
+	LLVMPassManagerRef passmgr = LLVMCreatePassManager();
+	if (!passmgr)
+		return NULL;
+
+	LLVMAddTargetLibraryInfo(target_library_info,
+				 passmgr);
+
+	if (check_ir)
+		LLVMAddVerifierPass(passmgr);
+	LLVMAddAlwaysInlinerPass(passmgr);
+	/* This pass should eliminate all the load and store instructions. */
+	LLVMAddPromoteMemoryToRegisterPass(passmgr);
+	LLVMAddScalarReplAggregatesPass(passmgr);
+	LLVMAddLICMPass(passmgr);
+	LLVMAddAggressiveDCEPass(passmgr);
+	LLVMAddCFGSimplificationPass(passmgr);
+	/* This is recommended by the instruction combining pass. */
+	LLVMAddEarlyCSEMemSSAPass(passmgr);
+	LLVMAddInstructionCombiningPass(passmgr);
+	return passmgr;
+}
+
 static const char *attr_to_str(enum ac_func_attr attr)
 {
    switch (attr) {
diff --git a/src/amd/common/ac_llvm_util.h b/src/amd/common/ac_llvm_util.h
index 4311c5ea8a4..1c0e975aec3 100644
--- a/src/amd/common/ac_llvm_util.h
+++ b/src/amd/common/ac_llvm_util.h
@@ -111,6 +111,8 @@ ac_get_store_intr_attribs(bool writeonly_memory)
 unsigned
 ac_count_scratch_private_memory(LLVMValueRef function);
 
+LLVMPassManagerRef ac_init_passmgr(LLVMTargetLibraryInfoRef target_library_info,
+				   bool check_ir);
 void ac_init_llvm_once(void);
 
 #ifdef __cplusplus
diff --git a/src/gallium/drivers/radeonsi/si_pipe.c b/src/gallium/drivers/radeonsi/si_pipe.c
index 0d6d93a7358..c815c7fc013 100644
--- a/src/gallium/drivers/radeonsi/si_pipe.c
+++ b/src/gallium/drivers/radeonsi/si_pipe.c
@@ -41,12 +41,6 @@
 #include "vl/vl_decoder.h"
 #include "driver_ddebug/dd_util.h"
 
-#include <llvm-c/Transforms/IPO.h>
-#include <llvm-c/Transforms/Scalar.h>
-#if HAVE_LLVM >= 0x0700
-#include <llvm-c/Transforms/Utils.h>
-#endif
-
 static const struct debug_named_value debug_options[] = {
 	/* Shader logging options: */
 	{ "vs", DBG(VS), "Print vertex shaders" },
@@ -131,27 +125,10 @@ static void si_init_compiler(struct si_screen *sscreen,
 	if (!compiler->target_library_info)
 		return;
 
-	compiler->passmgr = LLVMCreatePassManager();
+	compiler->passmgr = ac_init_passmgr(compiler->target_library_info,
+					    (sscreen->debug_flags & DBG(CHECK_IR)));
 	if (!compiler->passmgr)
 		return;
-
-	LLVMAddTargetLibraryInfo(compiler->target_library_info,
-				 compiler->passmgr);
-
-	/* Add LLVM passes into the pass manager. */
-	if (sscreen->debug_flags & DBG(CHECK_IR))
-		LLVMAddVerifierPass(compiler->passmgr);
-
-	LLVMAddAlwaysInlinerPass(compiler->passmgr);
-	/* This pass should eliminate all the load and store instructions. */
-	LLVMAddPromoteMemoryToRegisterPass(compiler->passmgr);
-	LLVMAddScalarReplAggregatesPass(compiler->passmgr);
-	LLVMAddLICMPass(compiler->passmgr);
-	LLVMAddAggressiveDCEPass(compiler->passmgr);
-	LLVMAddCFGSimplificationPass(compiler->passmgr);
-	/* This is recommended by the instruction combining pass. */
-	LLVMAddEarlyCSEMemSSAPass(compiler->passmgr);
-	LLVMAddInstructionCombiningPass(compiler->passmgr);
 }
 
 static void si_destroy_compiler(struct si_compiler *compiler)
-- 
2.17.1



More information about the mesa-dev mailing list