Mesa (master): radeonsi: use ac_create_target_machine

Marek Olšák mareko at kemper.freedesktop.org
Tue Nov 7 16:59:57 UTC 2017


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

Author: Marek Olšák <marek.olsak at amd.com>
Date:   Tue Nov  7 03:50:19 2017 +0100

radeonsi: use ac_create_target_machine

Reviewed-by: Nicolai Hähnle <nicolai.haehnle at amd.com>

---

 src/amd/common/ac_llvm_util.c          |  7 +++++--
 src/amd/common/ac_llvm_util.h          |  3 +++
 src/gallium/drivers/radeonsi/si_pipe.c | 22 +++++++---------------
 3 files changed, 15 insertions(+), 17 deletions(-)

diff --git a/src/amd/common/ac_llvm_util.c b/src/amd/common/ac_llvm_util.c
index fb2bc11874..429904c040 100644
--- a/src/amd/common/ac_llvm_util.c
+++ b/src/amd/common/ac_llvm_util.c
@@ -128,8 +128,11 @@ LLVMTargetMachineRef ac_create_target_machine(enum radeon_family family, enum ac
 	LLVMTargetRef target = ac_get_llvm_target(triple);
 
 	snprintf(features, sizeof(features),
-		 "+DumpCode,+vgpr-spilling,-fp32-denormals%s",
-		 tm_options & AC_TM_SISCHED ? ",+si-scheduler" : "");
+		 "+DumpCode,+vgpr-spilling,-fp32-denormals,+fp64-denormals%s%s%s%s",
+		 tm_options & AC_TM_SISCHED ? ",+si-scheduler" : "",
+		 tm_options & AC_TM_FORCE_ENABLE_XNACK ? ",+xnack" : "",
+		 tm_options & AC_TM_FORCE_DISABLE_XNACK ? ",-xnack" : "",
+		 tm_options & AC_TM_PROMOTE_ALLOCA_TO_SCRATCH ? ",-promote-alloca" : "");
 	
 	LLVMTargetMachineRef tm = LLVMCreateTargetMachine(
 	                             target,
diff --git a/src/amd/common/ac_llvm_util.h b/src/amd/common/ac_llvm_util.h
index d4b3915ffa..7c8b6b0a13 100644
--- a/src/amd/common/ac_llvm_util.h
+++ b/src/amd/common/ac_llvm_util.h
@@ -57,6 +57,9 @@ enum ac_func_attr {
 enum ac_target_machine_options {
 	AC_TM_SUPPORTS_SPILL = (1 << 0),
 	AC_TM_SISCHED = (1 << 1),
+	AC_TM_FORCE_ENABLE_XNACK = (1 << 2),
+	AC_TM_FORCE_DISABLE_XNACK = (1 << 3),
+	AC_TM_PROMOTE_ALLOCA_TO_SCRATCH = (1 << 4),
 };
 
 const char *ac_get_llvm_processor_name(enum radeon_family family);
diff --git a/src/gallium/drivers/radeonsi/si_pipe.c b/src/gallium/drivers/radeonsi/si_pipe.c
index e96380ce40..1ca5ca38df 100644
--- a/src/gallium/drivers/radeonsi/si_pipe.c
+++ b/src/gallium/drivers/radeonsi/si_pipe.c
@@ -145,21 +145,13 @@ static void si_emit_string_marker(struct pipe_context *ctx,
 static LLVMTargetMachineRef
 si_create_llvm_target_machine(struct si_screen *sscreen)
 {
-	const char *triple = "amdgcn--";
-	char features[256];
-
-	snprintf(features, sizeof(features),
-		 "+DumpCode,+vgpr-spilling,-fp32-denormals,+fp64-denormals%s%s%s",
-		 sscreen->b.chip_class >= GFX9 ? ",+xnack" : ",-xnack",
-		 sscreen->llvm_has_working_vgpr_indexing ? "" : ",-promote-alloca",
-		 sscreen->b.debug_flags & DBG(SI_SCHED) ? ",+si-scheduler" : "");
-
-	return LLVMCreateTargetMachine(ac_get_llvm_target(triple), triple,
-				       ac_get_llvm_processor_name(sscreen->b.family),
-				       features,
-				       LLVMCodeGenLevelDefault,
-				       LLVMRelocDefault,
-				       LLVMCodeModelDefault);
+	enum ac_target_machine_options tm_options =
+		(sscreen->b.debug_flags & DBG(SI_SCHED) ? AC_TM_SISCHED : 0) |
+		(sscreen->b.chip_class >= GFX9 ? AC_TM_FORCE_ENABLE_XNACK : 0) |
+		(sscreen->b.chip_class < GFX9 ? AC_TM_FORCE_DISABLE_XNACK : 0) |
+		(!sscreen->llvm_has_working_vgpr_indexing ? AC_TM_PROMOTE_ALLOCA_TO_SCRATCH : 0);
+
+	return ac_create_target_machine(sscreen->b.family, tm_options);
 }
 
 static void si_set_log_context(struct pipe_context *ctx,




More information about the mesa-commit mailing list