From fc3e3d7ba46f16b921ddb8c16d9acef0633f6e69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Mon, 31 Aug 2020 23:37:37 -0400 Subject: [PATCH] Revert "ac: generate FMA for inexact instructions for radeonsi" This reverts commit 4b9370cb0f3a2d9030e827f847f66bdefeaf08fd. Fixes: 4b9370cb0f3a2d9030e827f847f66bdefeaf08fd Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/3429 Reviewed-by: Pierre-Eric Pelloux-Prayer Reviewed-by: Bas Nieuwenhuizen Part-of: (cherry picked from commit f85294207f808c8f3072d63ac9e8624f9594045c) --- .gitlab-ci/traces.yml | 8 ++++---- .pick_status.json | 2 +- src/amd/llvm/ac_llvm_helper.cpp | 31 ------------------------------- src/amd/llvm/ac_llvm_util.h | 2 -- src/amd/llvm/ac_nir_to_llvm.c | 7 ------- 5 files changed, 5 insertions(+), 45 deletions(-) diff --git a/.gitlab-ci/traces.yml b/.gitlab-ci/traces.yml index 5f0e259b4fe..c5e3c27994a 100644 --- a/.gitlab-ci/traces.yml +++ b/.gitlab-ci/traces.yml @@ -61,7 +61,7 @@ traces: - device: gl-vmware-llvmpipe checksum: d76d0f5b5b064bba3e6a2a122c0799cf - device: gl-radeonsi-stoney - checksum: bfd97a7190f2b9de24ddfd446fcc4850 + checksum: c6261e56f37cc5d73b83d493561df646 - path: pathfinder/demo.trace expectations: - device: gl-vmware-llvmpipe @@ -109,7 +109,7 @@ traces: - device: gl-virgl checksum: 24eb95484e5b8288b3d5d65117c98641 - device: gl-radeonsi-stoney - checksum: 061226c3fd179c611b8d60acaa44474f + checksum: a0e1d6358f76666603b08eab383af080 - path: gputest/triangle.trace expectations: - device: gl-vmware-llvmpipe @@ -277,7 +277,7 @@ traces: - path: gputest/pixmark-piano.trace expectations: - device: gl-radeonsi-stoney - checksum: 061226c3fd179c611b8d60acaa44474f + checksum: a0e1d6358f76666603b08eab383af080 - path: gputest/pixmark-volplosion.trace expectations: - device: gl-radeonsi-stoney @@ -285,7 +285,7 @@ traces: - path: gputest/plot3d.trace expectations: - device: gl-radeonsi-stoney - checksum: 799ce7b2d8050d6ba2e3ae595cf8729e + checksum: fd367551aa74e2903e0590a893da01a6 - path: gputest/tessmark.trace expectations: - device: gl-radeonsi-stoney diff --git a/.pick_status.json b/.pick_status.json index bcb1121d7f6..1a318f58205 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -1831,7 +1831,7 @@ "description": "Revert \"ac: generate FMA for inexact instructions for radeonsi\"", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "master_sha": null, "because_sha": "4b9370cb0f3a2d9030e827f847f66bdefeaf08fd" }, diff --git a/src/amd/llvm/ac_llvm_helper.cpp b/src/amd/llvm/ac_llvm_helper.cpp index 1174b34b638..10cf301131a 100644 --- a/src/amd/llvm/ac_llvm_helper.cpp +++ b/src/amd/llvm/ac_llvm_helper.cpp @@ -114,11 +114,6 @@ LLVMBuilderRef ac_create_builder(LLVMContextRef ctx, */ flags.setAllowReciprocal(); /* arcp */ - /* Allow floating-point contraction (e.g. fusing a multiply - * followed by an addition into a fused multiply-and-add). - */ - flags.setAllowContract(); /* contract */ - llvm::unwrap(builder)->setFastMathFlags(flags); break; } @@ -126,32 +121,6 @@ LLVMBuilderRef ac_create_builder(LLVMContextRef ctx, return builder; } -/* Return the original state of inexact math. */ -bool ac_disable_inexact_math(LLVMBuilderRef builder) -{ - auto *b = llvm::unwrap(builder); - llvm::FastMathFlags flags = b->getFastMathFlags(); - - if (!flags.allowContract()) - return false; - - flags.setAllowContract(false); - b->setFastMathFlags(flags); - return true; -} - -void ac_restore_inexact_math(LLVMBuilderRef builder, bool value) -{ - auto *b = llvm::unwrap(builder); - llvm::FastMathFlags flags = b->getFastMathFlags(); - - if (flags.allowContract() == value) - return; - - flags.setAllowContract(value); - b->setFastMathFlags(flags); -} - LLVMTargetLibraryInfoRef ac_create_target_library_info(const char *triple) { diff --git a/src/amd/llvm/ac_llvm_util.h b/src/amd/llvm/ac_llvm_util.h index 622196081b4..8039c99bfbd 100644 --- a/src/amd/llvm/ac_llvm_util.h +++ b/src/amd/llvm/ac_llvm_util.h @@ -109,8 +109,6 @@ LLVMModuleRef ac_create_module(LLVMTargetMachineRef tm, LLVMContextRef ctx); LLVMBuilderRef ac_create_builder(LLVMContextRef ctx, enum ac_float_mode float_mode); -bool ac_disable_inexact_math(LLVMBuilderRef builder); -void ac_restore_inexact_math(LLVMBuilderRef builder, bool value); void ac_llvm_add_target_dep_function_attr(LLVMValueRef F, diff --git a/src/amd/llvm/ac_nir_to_llvm.c b/src/amd/llvm/ac_nir_to_llvm.c index 3dc57873e94..c5d73f52c82 100644 --- a/src/amd/llvm/ac_nir_to_llvm.c +++ b/src/amd/llvm/ac_nir_to_llvm.c @@ -601,10 +601,6 @@ static void visit_alu(struct ac_nir_context *ctx, const nir_alu_instr *instr) unsigned num_components = instr->dest.dest.ssa.num_components; unsigned src_components; LLVMTypeRef def_type = get_def_type(ctx, &instr->dest.dest.ssa); - bool saved_inexact = false; - - if (instr->exact) - saved_inexact = ac_disable_inexact_math(ctx->ac.builder); assert(nir_op_infos[instr->op].num_inputs <= ARRAY_SIZE(src)); switch (instr->op) { @@ -1243,9 +1239,6 @@ static void visit_alu(struct ac_nir_context *ctx, const nir_alu_instr *instr) result = ac_to_integer_or_pointer(&ctx->ac, result); ctx->ssa_defs[instr->dest.dest.ssa.index] = result; } - - if (instr->exact) - ac_restore_inexact_math(ctx->ac.builder, saved_inexact); } static void visit_load_const(struct ac_nir_context *ctx,