diff options
author | Marek Olšák <marek.olsak@amd.com> | 2020-03-20 16:35:45 -0400 |
---|---|---|
committer | Eric Engestrom <eric@engestrom.ch> | 2020-03-25 15:32:18 +0100 |
commit | 4c2f8b3dd6a2560b6b7b40be685ae728a2c3784f (patch) | |
tree | c4b7244ae8d6552f1007bcb9bfa9456648191c30 | |
parent | d48baa3859a45ff8ff493269992b7ee8a3ffcc5a (diff) |
ac: fix fast division
This stopped working with LLVM 11 and might occasionally have been broken
on older LLVM, because the metadata was set on the mul, not on the rcp.
Cc: 19.3 20.0 <mesa-stable@lists.freedesktop.org>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4268>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4268>
(cherry picked from commit 303842b2dbf30e7dd1a4cd463e76aecf81adebb8)
-rw-r--r-- | .pick_status.json | 2 | ||||
-rw-r--r-- | src/amd/llvm/ac_llvm_build.c | 9 |
2 files changed, 5 insertions, 6 deletions
diff --git a/.pick_status.json b/.pick_status.json index d5d0d216378..2466e1e097c 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -868,7 +868,7 @@ "description": "ac: fix fast division", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "master_sha": null, "because_sha": null }, diff --git a/src/amd/llvm/ac_llvm_build.c b/src/amd/llvm/ac_llvm_build.c index a1a9a453e4e..6532c57a234 100644 --- a/src/amd/llvm/ac_llvm_build.c +++ b/src/amd/llvm/ac_llvm_build.c @@ -715,12 +715,11 @@ ac_build_fdiv(struct ac_llvm_context *ctx, */ LLVMValueRef one = LLVMConstReal(LLVMTypeOf(num), 1.0); LLVMValueRef rcp = LLVMBuildFDiv(ctx->builder, one, den, ""); - LLVMValueRef ret = LLVMBuildFMul(ctx->builder, num, rcp, ""); - /* Use v_rcp_f32 instead of precise division. */ - if (!LLVMIsConstant(ret)) - LLVMSetMetadata(ret, ctx->fpmath_md_kind, ctx->fpmath_md_2p5_ulp); - return ret; + if (!LLVMIsConstant(rcp)) + LLVMSetMetadata(rcp, ctx->fpmath_md_kind, ctx->fpmath_md_2p5_ulp); + + return LLVMBuildFMul(ctx->builder, num, rcp, ""); } /* See fast_idiv_by_const.h. */ |