Mesa (master): ac/nir: add back nir_op_fmod

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Oct 10 19:59:34 UTC 2019


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

Author: Marek Olšák <marek.olsak at amd.com>
Date:   Tue Oct  8 00:08:19 2019 -0400

ac/nir: add back nir_op_fmod

radeonsi doesn't lower it for doubles.

This partially reverts commit d861401554b52b2c2fc6721c69bdfe1697ee608f.

Reviewed-by: Timothy Arceri <tarceri at itsqueeze.com>
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>

---

 src/amd/llvm/ac_nir_to_llvm.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/src/amd/llvm/ac_nir_to_llvm.c b/src/amd/llvm/ac_nir_to_llvm.c
index 41b71cd63a5..b08483e5cf4 100644
--- a/src/amd/llvm/ac_nir_to_llvm.c
+++ b/src/amd/llvm/ac_nir_to_llvm.c
@@ -548,6 +548,17 @@ static void visit_alu(struct ac_nir_context *ctx, const nir_alu_instr *instr)
 	case nir_op_umod:
 		result = LLVMBuildURem(ctx->ac.builder, src[0], src[1], "");
 		break;
+	case nir_op_fmod:
+		/* lower_fmod only lower 16-bit and 32-bit fmod */
+		assert(instr->dest.dest.ssa.bit_size == 64);
+		src[0] = ac_to_float(&ctx->ac, src[0]);
+		src[1] = ac_to_float(&ctx->ac, src[1]);
+		result = ac_build_fdiv(&ctx->ac, src[0], src[1]);
+		result = emit_intrin_1f_param(&ctx->ac, "llvm.floor",
+		                              ac_to_float_type(&ctx->ac, def_type), result);
+		result = LLVMBuildFMul(ctx->ac.builder, src[1] , result, "");
+		result = LLVMBuildFSub(ctx->ac.builder, src[0], result, "");
+		break;
 	case nir_op_irem:
 		result = LLVMBuildSRem(ctx->ac.builder, src[0], src[1], "");
 		break;




More information about the mesa-commit mailing list