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

Author: Georg Lehmann <[email protected]>
Date:   Wed Mar  1 15:31:23 2023 +0100

aco: mark mad definition as precise if the mul/add were precise

Reviewed-by: Rhys Perry <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20587>

---

 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<Instruction>& 
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

Reply via email to