From ed349951cb78b59afa53a2fd4a2206ecc883e3bc Mon Sep 17 00:00:00 2001 From: Georg Lehmann Date: Wed, 1 Mar 2023 15:31:23 +0100 Subject: [PATCH] aco: mark mad definition as precise if the mul/add were precise Reviewed-by: Rhys Perry Part-of: --- src/amd/compiler/aco_optimizer.cpp | 2 ++ src/amd/compiler/tests/test_optimizer.cpp | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/amd/compiler/aco_optimizer.cpp b/src/amd/compiler/aco_optimizer.cpp index 2043990fc79..d9ce6ebe0f0 100644 --- a/src/amd/compiler/aco_optimizer.cpp +++ b/src/amd/compiler/aco_optimizer.cpp @@ -4475,6 +4475,8 @@ combine_instruction(opt_ctx& ctx, aco_ptr& instr) instr = std::move(mad); } instr->definitions[0] = add_instr->definitions[0]; + instr->definitions[0].setPrecise(add_instr->definitions[0].isPrecise() || + mul_instr->definitions[0].isPrecise()); /* mark this ssa_def to be re-checked for profitability and literals */ ctx.mad_infos.emplace_back(std::move(add_instr), mul_instr->definitions[0].tempId()); diff --git a/src/amd/compiler/tests/test_optimizer.cpp b/src/amd/compiler/tests/test_optimizer.cpp index 043602d8626..205c1ef65e7 100644 --- a/src/amd/compiler/tests/test_optimizer.cpp +++ b/src/amd/compiler/tests/test_optimizer.cpp @@ -1583,7 +1583,7 @@ BEGIN_TEST(optimize.mad_mix.fma.precision) Temp b16 = inputs[4]; /* the optimization is precise for 32-bit on GFX9 */ - //~gfx9! v1: %res0 = v_fma_mix_f32 lo(%a16), %b, %c + //~gfx9! v1: (precise)%res0 = v_fma_mix_f32 lo(%a16), %b, %c //~gfx10! v1: (precise)%res0_tmp = v_fma_mix_f32 lo(%a16), %b, -0 //~gfx10! v1: %res0 = v_add_f32 %res0_tmp, %c //! p_unit_test 0, %res0