aco/tests: add regalloc.scratch_sgpr.create_vector
authorRhys Perry <pendingchaos02@gmail.com>
Wed, 16 Jun 2021 14:35:36 +0000 (15:35 +0100)
committerMarge Bot <eric+marge@anholt.net>
Fri, 17 Sep 2021 14:36:03 +0000 (14:36 +0000)
Signed-off-by: Rhys Perry <pendingchaos02@gmail.com>
Reviewed-by: Daniel Schürmann <daniel@schuermann.dev>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12172>

src/amd/compiler/tests/helpers.cpp
src/amd/compiler/tests/helpers.h
src/amd/compiler/tests/test_regalloc.cpp

index 024116a..ed15e35 100644 (file)
@@ -169,7 +169,7 @@ void finish_opt_test()
    aco_print_program(program.get(), output);
 }
 
-void finish_ra_test(ra_test_policy policy)
+void finish_ra_test(ra_test_policy policy, bool lower)
 {
    finish_program(program.get());
    if (!aco::validate_ir(program.get())) {
@@ -186,6 +186,11 @@ void finish_ra_test(ra_test_policy policy)
       return;
    }
 
+   if (lower) {
+      aco::ssa_elimination(program.get());
+      aco::lower_to_hw_instr(program.get());
+   }
+
    aco_print_program(program.get(), output);
 }
 
index ee3e68d..7299939 100644 (file)
@@ -79,7 +79,7 @@ bool setup_cs(const char *input_spec, enum chip_class chip_class,
 void finish_program(aco::Program *program);
 void finish_validator_test();
 void finish_opt_test();
-void finish_ra_test(aco::ra_test_policy);
+void finish_ra_test(aco::ra_test_policy, bool lower=false);
 void finish_optimizer_postRA_test();
 void finish_to_hw_instr_test();
 void finish_insert_nops_test();
index 4fa58ff..4793bb0 100644 (file)
@@ -147,3 +147,40 @@ BEGIN_TEST(regalloc.precolor.vector.collect)
 
    finish_ra_test(ra_test_policy());
 END_TEST
+
+BEGIN_TEST(regalloc.scratch_sgpr.create_vector)
+   if (!setup_cs("v1 s1", GFX7))
+      return;
+
+   Temp tmp = bld.pseudo(aco_opcode::p_extract_vector, bld.def(v1b), inputs[0], Operand::zero());
+
+   //>> v3b: %0:v[0][0:24] = v_and_b32 0xffffff, %0:v[0][0:24]
+   //! s1: %0:s[1] = s_mov_b32 0x1000001
+   //! v1: %0:v[0] = v_mul_lo_u32 %0:s[1], %_:v[0][0:8]
+   bld.pseudo(aco_opcode::p_create_vector, bld.def(v1), Operand(v3b), Operand(tmp));
+
+   //! p_unit_test %_:s[0]
+   //! s_endpgm
+   bld.pseudo(aco_opcode::p_unit_test, inputs[1]);
+
+   finish_ra_test(ra_test_policy(), true);
+END_TEST
+
+BEGIN_TEST(regalloc.scratch_sgpr.create_vector_sgpr_operand)
+   if (!setup_cs("v2 s1", GFX7))
+      return;
+
+   Temp tmp = bld.pseudo(aco_opcode::p_extract_vector, bld.def(v1b), inputs[0], Operand::c32(4u));
+
+   //>> v1: %0:v[0] = v_mov_b32 %_:s[0]
+   //! v3b: %0:v[1][0:24] = v_and_b32 0xffffff, %0:v[1][0:24]
+   //! s1: %0:s[1] = s_mov_b32 0x1000001
+   //! v1: %0:v[1] = v_mul_lo_u32 %0:s[1], %_:v[1][0:8]
+   bld.pseudo(aco_opcode::p_create_vector, bld.def(v2), inputs[1], Operand(v3b), Operand(tmp));
+
+   //! p_unit_test %_:s[0]
+   //! s_endpgm
+   bld.pseudo(aco_opcode::p_unit_test, inputs[1]);
+
+   finish_ra_test(ra_test_policy(), true);
+END_TEST