Mesa (master): ac: update and document fast math flags used by radeonsi

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Apr 27 11:31:23 UTC 2020


Module: Mesa
Branch: master
Commit: f2c2a28073dd4ea0d104f284e874d136880a91a5
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=f2c2a28073dd4ea0d104f284e874d136880a91a5

Author: Marek Olšák <marek.olsak at amd.com>
Date:   Wed Apr 22 22:38:14 2020 -0400

ac: update and document fast math flags used by radeonsi

This should have no effect, because we never use FP division, but
it's safer for the future.

Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer at amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4696>

---

 src/amd/llvm/ac_llvm_helper.cpp               | 14 ++++++++++++--
 src/amd/llvm/ac_llvm_util.h                   |  2 +-
 src/gallium/drivers/radeonsi/si_shader_llvm.c |  2 +-
 3 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/src/amd/llvm/ac_llvm_helper.cpp b/src/amd/llvm/ac_llvm_helper.cpp
index 6b4610597ed..578521a6f2d 100644
--- a/src/amd/llvm/ac_llvm_helper.cpp
+++ b/src/amd/llvm/ac_llvm_helper.cpp
@@ -84,8 +84,18 @@ LLVMBuilderRef ac_create_builder(LLVMContextRef ctx,
 	case AC_FLOAT_MODE_DEFAULT:
 	case AC_FLOAT_MODE_DENORM_FLUSH_TO_ZERO:
 		break;
-	case AC_FLOAT_MODE_NO_SIGNED_ZEROS_FP_MATH:
-		flags.setNoSignedZeros();
+
+	case AC_FLOAT_MODE_DEFAULT_OPENGL:
+		/* Allow optimizations to treat the sign of a zero argument or
+		 * result as insignificant.
+		 */
+		flags.setNoSignedZeros(); /* nsz */
+
+		/* Allow optimizations to use the reciprocal of an argument
+		 * rather than perform division.
+		 */
+		flags.setAllowReciprocal(); /* arcp */
+
 		llvm::unwrap(builder)->setFastMathFlags(flags);
 		break;
 	}
diff --git a/src/amd/llvm/ac_llvm_util.h b/src/amd/llvm/ac_llvm_util.h
index 00372476d8e..4cfb3b55388 100644
--- a/src/amd/llvm/ac_llvm_util.h
+++ b/src/amd/llvm/ac_llvm_util.h
@@ -70,7 +70,7 @@ enum ac_target_machine_options {
 
 enum ac_float_mode {
 	AC_FLOAT_MODE_DEFAULT,
-	AC_FLOAT_MODE_NO_SIGNED_ZEROS_FP_MATH,
+	AC_FLOAT_MODE_DEFAULT_OPENGL,
 	AC_FLOAT_MODE_DENORM_FLUSH_TO_ZERO,
 };
 
diff --git a/src/gallium/drivers/radeonsi/si_shader_llvm.c b/src/gallium/drivers/radeonsi/si_shader_llvm.c
index d8bcb4ad55c..63c9c033ab4 100644
--- a/src/gallium/drivers/radeonsi/si_shader_llvm.c
+++ b/src/gallium/drivers/radeonsi/si_shader_llvm.c
@@ -134,7 +134,7 @@ void si_llvm_context_init(struct si_shader_context *ctx, struct si_screen *sscre
    ctx->compiler = compiler;
 
    ac_llvm_context_init(&ctx->ac, compiler, sscreen->info.chip_class, sscreen->info.family,
-                        AC_FLOAT_MODE_NO_SIGNED_ZEROS_FP_MATH, wave_size, 64);
+                        AC_FLOAT_MODE_DEFAULT_OPENGL, wave_size, 64);
 }
 
 void si_llvm_create_func(struct si_shader_context *ctx, const char *name, LLVMTypeRef *return_types,



More information about the mesa-commit mailing list