From: Marek Olšák Date: Tue, 7 Nov 2017 02:50:19 +0000 (+0100) Subject: radeonsi: use ac_create_target_machine X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=cde664ab81dba8c7f0fa15ef6e28aac463719ac5;p=mesa.git radeonsi: use ac_create_target_machine Reviewed-by: Nicolai Hähnle --- diff --git a/src/amd/common/ac_llvm_util.c b/src/amd/common/ac_llvm_util.c index fb2bc118743..429904c0403 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 d4b3915ffa9..7c8b6b0a130 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 e96380ce40a..1ca5ca38df3 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,