From f7bb794dda13a3a4fe25cab25f93914f457f9956 Mon Sep 17 00:00:00 2001 From: Georg Lehmann Date: Tue, 21 Mar 2023 14:24:28 +0100 Subject: [PATCH] aco: add tests for fma with opsel Reviewed-by: Rhys Perry Part-of: --- src/amd/compiler/tests/test_optimizer.cpp | 32 +++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/src/amd/compiler/tests/test_optimizer.cpp b/src/amd/compiler/tests/test_optimizer.cpp index cc8a09d..90a8abb 100644 --- a/src/amd/compiler/tests/test_optimizer.cpp +++ b/src/amd/compiler/tests/test_optimizer.cpp @@ -1947,3 +1947,35 @@ BEGIN_TEST(optimize.fmamix_two_literals) finish_opt_test(); } END_TEST + +BEGIN_TEST(optimize.fma_opsel) + /* TODO make these work before GFX11 using SDWA. */ + for (unsigned i = GFX11; i <= GFX11; i++) { + //>> v2b: %a, v2b: %b, v1: %c, v1: %d, v1: %e = p_startpgm + if (!setup_cs("v2b v2b v1 v1 v1", (amd_gfx_level)i)) + continue; + + Temp a = inputs[0]; + Temp b = inputs[1]; + Temp c = inputs[2]; + Temp d = inputs[3]; + Temp e = inputs[4]; + Temp c_hi = bld.pseudo(aco_opcode::p_extract_vector, bld.def(v2b), c, Operand::c32(1)); + Temp d_hi = bld.pseudo(aco_opcode::p_extract_vector, bld.def(v2b), d, Operand::c32(1)); + Temp e_hi = bld.pseudo(aco_opcode::p_extract_vector, bld.def(v2b), e, Operand::c32(1)); + + //! v2b: %res0 = v_fma_f16 %b, hi(%c), %a + //! p_unit_test 0, %res0 + writeout(0, fadd(fmul(b, c_hi), a)); + + //! v2b: %res1 = v_fma_f16 %a, %b, hi(%d) + //! p_unit_test 1, %res1 + writeout(1, fadd(fmul(a, b), d_hi)); + + //! v2b: %res2 = v_fma_f16 %a, %b, hi(%e) + //! p_unit_test 2, %res2 + writeout(2, fma(a, b, e_hi)); + + finish_opt_test(); + } +END_TEST -- 2.7.4