From: Marek Olšák <marek.ol...@amd.com> --- src/amd/common/ac_llvm_util.c | 18 +++++----- src/amd/common/ac_llvm_util.h | 1 + src/gallium/drivers/radeonsi/si_pipe.c | 2 +- src/gallium/drivers/radeonsi/si_shader_internal.h | 2 -- .../drivers/radeonsi/si_shader_tgsi_setup.c | 42 ---------------------- 5 files changed, 12 insertions(+), 53 deletions(-)
diff --git a/src/amd/common/ac_llvm_util.c b/src/amd/common/ac_llvm_util.c index d14057f..7dde2ef 100644 --- a/src/amd/common/ac_llvm_util.c +++ b/src/amd/common/ac_llvm_util.c @@ -33,35 +33,37 @@ #include <stdio.h> #include <string.h> static void ac_init_llvm_target() { LLVMInitializeAMDGPUTargetInfo(); LLVMInitializeAMDGPUTarget(); LLVMInitializeAMDGPUTargetMC(); LLVMInitializeAMDGPUAsmPrinter(); - /* - * Workaround for bug in llvm 4.0 that causes image intrinsics + /* For inline assembly. */ + LLVMInitializeAMDGPUAsmParser(); + + /* Workaround for bug in llvm 4.0 that causes image intrinsics * to disappear. * https://reviews.llvm.org/D26348 */ -#if HAVE_LLVM >= 0x0400 - const char *argv[2] = {"mesa", "-simplifycfg-sink-common=false"}; - LLVMParseCommandLineOptions(2, argv, NULL); -#endif - + if (HAVE_LLVM >= 0x0400) { + /* "mesa" is the prefix for error messages */ + const char *argv[2] = { "mesa", "-simplifycfg-sink-common=false" }; + LLVMParseCommandLineOptions(2, argv, NULL); + } } static once_flag ac_init_llvm_target_once_flag = ONCE_FLAG_INIT; -static LLVMTargetRef ac_get_llvm_target(const char *triple) +LLVMTargetRef ac_get_llvm_target(const char *triple) { LLVMTargetRef target = NULL; char *err_message = NULL; call_once(&ac_init_llvm_target_once_flag, ac_init_llvm_target); if (LLVMGetTargetFromTriple(triple, &target, &err_message)) { fprintf(stderr, "Cannot find target for triple %s ", triple); if (err_message) { fprintf(stderr, "%s\n", err_message); diff --git a/src/amd/common/ac_llvm_util.h b/src/amd/common/ac_llvm_util.h index 21f3e83..cc4fe3b 100644 --- a/src/amd/common/ac_llvm_util.h +++ b/src/amd/common/ac_llvm_util.h @@ -53,20 +53,21 @@ enum ac_func_attr { */ AC_FUNC_ATTR_LEGACY = (1u << 31), }; enum ac_target_machine_options { AC_TM_SUPPORTS_SPILL = (1 << 0), AC_TM_SISCHED = (1 << 1), }; LLVMTargetMachineRef ac_create_target_machine(enum radeon_family family, enum ac_target_machine_options tm_options); +LLVMTargetRef ac_get_llvm_target(const char *triple); void ac_add_attr_dereferenceable(LLVMValueRef val, uint64_t bytes); bool ac_is_sgpr_param(LLVMValueRef param); void ac_add_function_attr(LLVMContextRef ctx, LLVMValueRef function, int attr_idx, enum ac_func_attr attr); void ac_add_func_attributes(LLVMContextRef ctx, LLVMValueRef function, unsigned attrib_mask); void ac_dump_module(LLVMModuleRef module); LLVMValueRef ac_llvm_get_called_value(LLVMValueRef call); bool ac_llvm_is_function(LLVMValueRef v); diff --git a/src/gallium/drivers/radeonsi/si_pipe.c b/src/gallium/drivers/radeonsi/si_pipe.c index 5f3b7e1..afb2bcb 100644 --- a/src/gallium/drivers/radeonsi/si_pipe.c +++ b/src/gallium/drivers/radeonsi/si_pipe.c @@ -138,21 +138,21 @@ 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", sscreen->b.chip_class >= GFX9 ? ",+xnack" : ",-xnack", sscreen->b.debug_flags & DBG_SI_SCHED ? ",+si-scheduler" : ""); - return LLVMCreateTargetMachine(si_llvm_get_amdgpu_target(triple), triple, + return LLVMCreateTargetMachine(ac_get_llvm_target(triple), triple, r600_get_llvm_processor_name(sscreen->b.family), features, LLVMCodeGenLevelDefault, LLVMRelocDefault, LLVMCodeModelDefault); } static struct pipe_context *si_create_context(struct pipe_screen *screen, unsigned flags) { diff --git a/src/gallium/drivers/radeonsi/si_shader_internal.h b/src/gallium/drivers/radeonsi/si_shader_internal.h index 3556e69..6e86e0b 100644 --- a/src/gallium/drivers/radeonsi/si_shader_internal.h +++ b/src/gallium/drivers/radeonsi/si_shader_internal.h @@ -239,22 +239,20 @@ struct si_shader_context { }; static inline struct si_shader_context * si_shader_context(struct lp_build_tgsi_context *bld_base) { return (struct si_shader_context*)bld_base; } void si_llvm_add_attribute(LLVMValueRef F, const char *name, int value); -LLVMTargetRef si_llvm_get_amdgpu_target(const char *triple); - unsigned si_llvm_compile(LLVMModuleRef M, struct ac_shader_binary *binary, LLVMTargetMachineRef tm, struct pipe_debug_callback *debug); LLVMTypeRef tgsi2llvmtype(struct lp_build_tgsi_context *bld_base, enum tgsi_opcode_type type); LLVMValueRef bitcast(struct lp_build_tgsi_context *bld_base, enum tgsi_opcode_type type, LLVMValueRef value); diff --git a/src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c b/src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c index 3f20cd1..b37d4b2 100644 --- a/src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c +++ b/src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c @@ -33,21 +33,20 @@ #include "gallivm/lp_bld_swizzle.h" #include "tgsi/tgsi_info.h" #include "tgsi/tgsi_parse.h" #include "util/u_math.h" #include "util/u_memory.h" #include "util/u_debug.h" #include <stdio.h> #include <llvm-c/Transforms/IPO.h> #include <llvm-c/Transforms/Scalar.h> -#include <llvm-c/Support.h> /* Data for if/else/endif and bgnloop/endloop control flow structures. */ struct si_llvm_flow { /* Loop exit or next part of if/else/endif. */ LLVMBasicBlockRef next_block; LLVMBasicBlockRef loop_entry_block; }; enum si_llvm_calling_convention { @@ -59,61 +58,20 @@ enum si_llvm_calling_convention { }; void si_llvm_add_attribute(LLVMValueRef F, const char *name, int value) { char str[16]; snprintf(str, sizeof(str), "%i", value); LLVMAddTargetDependentFunctionAttr(F, name, str); } -static void init_amdgpu_target() -{ - LLVMInitializeAMDGPUTargetInfo(); - LLVMInitializeAMDGPUTarget(); - LLVMInitializeAMDGPUTargetMC(); - LLVMInitializeAMDGPUAsmPrinter(); - - /* For inline assembly. */ - LLVMInitializeAMDGPUAsmParser(); - - if (HAVE_LLVM >= 0x0400) { - /* - * Workaround for bug in llvm 4.0 that causes image intrinsics - * to disappear. - * https://reviews.llvm.org/D26348 - */ - const char *argv[2] = {"mesa", "-simplifycfg-sink-common=false"}; - LLVMParseCommandLineOptions(2, argv, NULL); - } -} - -static once_flag init_amdgpu_target_once_flag = ONCE_FLAG_INIT; - -LLVMTargetRef si_llvm_get_amdgpu_target(const char *triple) -{ - LLVMTargetRef target = NULL; - char *err_message = NULL; - - call_once(&init_amdgpu_target_once_flag, init_amdgpu_target); - - if (LLVMGetTargetFromTriple(triple, &target, &err_message)) { - fprintf(stderr, "Cannot find target for triple %s ", triple); - if (err_message) { - fprintf(stderr, "%s\n", err_message); - } - LLVMDisposeMessage(err_message); - return NULL; - } - return target; -} - struct si_llvm_diagnostics { struct pipe_debug_callback *debug; unsigned retval; }; static void si_diagnostic_handler(LLVMDiagnosticInfoRef di, void *context) { struct si_llvm_diagnostics *diag = (struct si_llvm_diagnostics *)context; LLVMDiagnosticSeverity severity = LLVMGetDiagInfoSeverity(di); char *description = LLVMGetDiagInfoDescription(di); -- 2.7.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev