radeonsi: set no-signed-zeros-fp-math
authorMarek Olšák <marek.olsak@amd.com>
Thu, 19 Jan 2017 13:36:17 +0000 (14:36 +0100)
committerMarek Olšák <marek.olsak@amd.com>
Tue, 21 Feb 2017 20:27:23 +0000 (21:27 +0100)
Recommended by Matt Arsenault.

46757 shaders in 28742 tests
Totals:
SGPRS: 2068851 -> 2066907 (-0.09 %)
VGPRS: 1604056 -> 1602676 (-0.09 %)
Spilled SGPRs: 1402 -> 1382 (-1.43 %)
Spilled VGPRs: 113 -> 113 (0.00 %)
Private memory VGPRs: 1332 -> 1332 (0.00 %)
Scratch size: 3224 -> 3188 (-1.12 %) dwords per thread
Code Size: 58815520 -> 58716788 (-0.17 %) bytes
LDS: 1162 -> 1162 (0.00 %) blocks
Max Waves: 354616 -> 354905 (0.08 %)
Wait states: 0 -> 0 (0.00 %)

Totals from affected shaders:
SGPRS: 786452 -> 784508 (-0.25 %)
VGPRS: 530000 -> 528620 (-0.26 %)
Spilled SGPRs: 958 -> 938 (-2.09 %)
Spilled VGPRs: 85 -> 85 (0.00 %)
Private memory VGPRs: 636 -> 636 (0.00 %)
Scratch size: 1880 -> 1844 (-1.91 %) dwords per thread
Code Size: 26349936 -> 26251204 (-0.37 %) bytes
LDS: 304 -> 304 (0.00 %) blocks
Max Waves: 108962 -> 109251 (0.27 %)
Wait states: 0 -> 0 (0.00 %)

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
src/gallium/drivers/radeonsi/si_shader.c
src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c

index 8fe25294db39a7a4d0060c9c8b490d363077b01a..f9eaea2d42a5146a18e7cf69f7d564cb812f36c7 100644 (file)
@@ -5251,6 +5251,10 @@ static void si_create_function(struct si_shader_context *ctx,
                        lp_add_function_attr(ctx->main_fn, i + 1, LP_FUNC_ATTR_INREG);
        }
 
+       LLVMAddTargetDependentFunctionAttr(ctx->main_fn,
+                                          "no-signed-zeros-fp-math",
+                                          "true");
+
        if (ctx->screen->b.debug_flags & DBG_UNSAFE_MATH) {
                /* These were copied from some LLVM test. */
                LLVMAddTargetDependentFunctionAttr(ctx->main_fn,
index 69eaf0c6364567c1710e8ba948b98e57dd7bc6ad..4601ca9ec94c0e05fc52fb5005fe6b7693ca0c5b 100644 (file)
@@ -1269,7 +1269,7 @@ void si_llvm_context_init(struct si_shader_context *ctx,
        bool unsafe_fpmath = (sscreen->b.debug_flags & DBG_UNSAFE_MATH) != 0;
        enum lp_float_mode float_mode =
                unsafe_fpmath ? LP_FLOAT_MODE_UNSAFE_FP_MATH :
-                               LP_FLOAT_MODE_DEFAULT;
+                               LP_FLOAT_MODE_NO_SIGNED_ZEROS_FP_MATH;
 
        ctx->gallivm.builder = lp_create_builder(ctx->gallivm.context,
                                                 float_mode);