From a5f35aa742c3f1e2fae6a6c2fb53f92822f0cb70 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Fri, 24 Aug 2018 23:00:37 -0400 Subject: [PATCH] ac: revert new LLVM 7.0 behavior for fdiv MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Cc: 18.2 Tested-by: Dieter Nützel --- src/amd/common/ac_llvm_build.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/amd/common/ac_llvm_build.c b/src/amd/common/ac_llvm_build.c index c741a1ab62d..629cd2a7527 100644 --- a/src/amd/common/ac_llvm_build.c +++ b/src/amd/common/ac_llvm_build.c @@ -561,7 +561,14 @@ ac_build_fdiv(struct ac_llvm_context *ctx, LLVMValueRef num, LLVMValueRef den) { - LLVMValueRef ret = LLVMBuildFDiv(ctx->builder, num, den, ""); + /* If we do (num / den), LLVM >= 7.0 does: + * return num * v_rcp_f32(den * (fabs(den) > 0x1.0p+96f ? 0x1.0p-32f : 1.0f)); + * + * If we do (num * (1 / den)), LLVM does: + * return num * v_rcp_f32(den); + */ + LLVMValueRef rcp = LLVMBuildFDiv(ctx->builder, ctx->f32_1, den, ""); + LLVMValueRef ret = LLVMBuildFMul(ctx->builder, num, rcp, ""); /* Use v_rcp_f32 instead of precise division. */ if (!LLVMIsConstant(ret)) -- 2.11.0