radeon/llvm: enable unsafe math for graphics shaders
authorGrigori Goronzy <greg@chown.ath.cx>
Thu, 17 Jul 2014 16:44:25 +0000 (18:44 +0200)
committerTom Stellard <thomas.stellard@amd.com>
Wed, 23 Jul 2014 14:40:33 +0000 (10:40 -0400)
Accuracy of some operations was recently improved in the R600 backend,
at the cost of slower code. This is required for compute shaders,
but not for graphics shaders. Add unsafe-fp-math hint to make LLVM
generate faster but possibly less accurate code.

Piglit didn't indicate any regressions.

Reviewed-by: Tom Stellard <thomas.stellard@amd.com>
src/gallium/drivers/radeon/radeon_llvm_emit.c

index 1b17dd4613f25eddf1d966c01f09c1733d7ba8dd..171ccaadd5c6599d497f40ce6c38ff691207043f 100644 (file)
@@ -26,6 +26,7 @@
 #include "radeon_llvm_emit.h"
 #include "radeon_elf_util.h"
 #include "util/u_memory.h"
+#include "pipe/p_shader_tokens.h"
 
 #include <llvm-c/Target.h>
 #include <llvm-c/TargetMachine.h>
@@ -50,6 +51,10 @@ void radeon_llvm_shader_type(LLVMValueRef F, unsigned type)
   sprintf(Str, "%1d", type);
 
   LLVMAddTargetDependentFunctionAttr(F, "ShaderType", Str);
+
+  if (type != TGSI_PROCESSOR_COMPUTE) {
+    LLVMAddTargetDependentFunctionAttr(F, "unsafe-fp-math", "true");
+  }
 }
 
 static void init_r600_target() {