From: Marek Olšák Date: Fri, 10 Jun 2016 20:43:29 +0000 (+0200) Subject: radeonsi: add a debug flag for unsafe math LLVM optimizations X-Git-Url: https://git.libre-soc.org/?p=mesa.git;a=commitdiff_plain;h=b16d21270f9ea0173ebe059a3e82a4b451a80596 radeonsi: add a debug flag for unsafe math LLVM optimizations Reviewed-by: Nicolai Hähnle --- diff --git a/src/gallium/drivers/radeon/r600_pipe_common.c b/src/gallium/drivers/radeon/r600_pipe_common.c index fa9f70d33ba..5d4a6799729 100644 --- a/src/gallium/drivers/radeon/r600_pipe_common.c +++ b/src/gallium/drivers/radeon/r600_pipe_common.c @@ -482,6 +482,7 @@ static const struct debug_named_value common_debug_options[] = { { "sisched", DBG_SI_SCHED, "Enable LLVM SI Machine Instruction Scheduler." }, { "mono", DBG_MONOLITHIC_SHADERS, "Use old-style monolithic shaders compiled on demand" }, { "noce", DBG_NO_CE, "Disable the constant engine"}, + { "unsafemath", DBG_UNSAFE_MATH, "Enable unsafe math shader optimizations" }, DEBUG_NAMED_VALUE_END /* must be last */ }; diff --git a/src/gallium/drivers/radeon/r600_pipe_common.h b/src/gallium/drivers/radeon/r600_pipe_common.h index fb6d1a56d12..c0e4282c23f 100644 --- a/src/gallium/drivers/radeon/r600_pipe_common.h +++ b/src/gallium/drivers/radeon/r600_pipe_common.h @@ -99,6 +99,7 @@ #define DBG_SI_SCHED (1llu << 46) #define DBG_MONOLITHIC_SHADERS (1llu << 47) #define DBG_NO_CE (1llu << 48) +#define DBG_UNSAFE_MATH (1llu << 49) #define R600_MAP_BUFFER_ALIGNMENT 64 #define R600_MAX_VIEWPORTS 16 diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c index 6dc4985f94f..bba6a55df95 100644 --- a/src/gallium/drivers/radeonsi/si_shader.c +++ b/src/gallium/drivers/radeonsi/si_shader.c @@ -5255,6 +5255,22 @@ static void si_create_function(struct si_shader_context *ctx, else LLVMAddAttribute(P, LLVMInRegAttribute); } + + if (ctx->screen->b.debug_flags & DBG_UNSAFE_MATH) { + /* These were copied from some LLVM test. */ + LLVMAddTargetDependentFunctionAttr(ctx->radeon_bld.main_fn, + "less-precise-fpmad", + "true"); + LLVMAddTargetDependentFunctionAttr(ctx->radeon_bld.main_fn, + "no-infs-fp-math", + "true"); + LLVMAddTargetDependentFunctionAttr(ctx->radeon_bld.main_fn, + "no-nans-fp-math", + "true"); + LLVMAddTargetDependentFunctionAttr(ctx->radeon_bld.main_fn, + "unsafe-fp-math", + "true"); + } } static void create_meta_data(struct si_shader_context *ctx)