aco/tests: add regalloc.scratch_sgpr.create_vector

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>
This commit is contained in:
Rhys Perry 2021-06-16 15:35:36 +01:00 committed by Marge Bot
parent f41200d289
commit b1e4794f0f
3 changed files with 44 additions and 2 deletions

View 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);
}

View 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();

View 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