mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-04 20:38:06 +02:00
aco/tests: add setup_reduce_temp.divergent_if_phi
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/20621>
This commit is contained in:
parent
44fdd2ebcb
commit
850d945baf
6 changed files with 82 additions and 6 deletions
|
|
@ -545,7 +545,7 @@ formats = [("pseudo", [Format.PSEUDO], 'Pseudo_instruction', list(itertools.prod
|
|||
("exp", [Format.EXP], 'Export_instruction', [(0, 4), (0, 5)]),
|
||||
("branch", [Format.PSEUDO_BRANCH], 'Pseudo_branch_instruction', itertools.product([1], [0, 1])),
|
||||
("barrier", [Format.PSEUDO_BARRIER], 'Pseudo_barrier_instruction', [(0, 0)]),
|
||||
("reduction", [Format.PSEUDO_REDUCTION], 'Pseudo_reduction_instruction', [(3, 2)]),
|
||||
("reduction", [Format.PSEUDO_REDUCTION], 'Pseudo_reduction_instruction', [(3, 3)]),
|
||||
("vop1", [Format.VOP1], 'VOP1_instruction', [(0, 0), (1, 1), (2, 2)]),
|
||||
("vop1_sdwa", [Format.VOP1, Format.SDWA], 'SDWA_instruction', [(1, 1)]),
|
||||
("vop2", [Format.VOP2], 'VOP2_instruction', itertools.product([1, 2], [2, 3])),
|
||||
|
|
|
|||
|
|
@ -175,6 +175,21 @@ void finish_opt_test()
|
|||
aco_print_program(program.get(), output);
|
||||
}
|
||||
|
||||
void finish_setup_reduce_temp_test()
|
||||
{
|
||||
finish_program(program.get());
|
||||
if (!aco::validate_ir(program.get())) {
|
||||
fail_test("Validation before setup_reduce_temp failed");
|
||||
return;
|
||||
}
|
||||
aco::setup_reduce_temp(program.get());
|
||||
if (!aco::validate_ir(program.get())) {
|
||||
fail_test("Validation after setup_reduce_temp failed");
|
||||
return;
|
||||
}
|
||||
aco_print_program(program.get(), output);
|
||||
}
|
||||
|
||||
void finish_ra_test(ra_test_policy policy, bool lower)
|
||||
{
|
||||
finish_program(program.get());
|
||||
|
|
@ -382,7 +397,7 @@ void emit_divergent_if_else(Program* prog, aco::Builder& b, Operand cond, std::f
|
|||
|
||||
if_block->kind |= block_kind_branch;
|
||||
invert->kind |= block_kind_invert;
|
||||
endif_block->kind |= block_kind_merge;
|
||||
endif_block->kind |= block_kind_merge | (if_block->kind & block_kind_top_level);
|
||||
|
||||
/* Set up logical CF */
|
||||
then_logical->logical_preds.push_back(if_block->index);
|
||||
|
|
|
|||
|
|
@ -80,6 +80,7 @@ bool setup_cs(const char *input_spec, enum amd_gfx_level gfx_level,
|
|||
void finish_program(aco::Program *program);
|
||||
void finish_validator_test();
|
||||
void finish_opt_test();
|
||||
void finish_setup_reduce_temp_test();
|
||||
void finish_ra_test(aco::ra_test_policy, bool lower=false);
|
||||
void finish_optimizer_postRA_test();
|
||||
void finish_to_hw_instr_test();
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ aco_tests_files = files(
|
|||
'test_insert_waitcnt.cpp',
|
||||
'test_isel.cpp',
|
||||
'test_optimizer.cpp',
|
||||
'test_reduce_assign.cpp',
|
||||
'test_regalloc.cpp',
|
||||
'test_optimizer_postRA.cpp',
|
||||
'test_sdwa.cpp',
|
||||
|
|
|
|||
|
|
@ -514,7 +514,7 @@ BEGIN_TEST(optimizer_postRA.dpp_across_cf)
|
|||
|
||||
/* --- merge block --- */
|
||||
//! BB6
|
||||
//! /* logical preds: BB1, BB4, / linear preds: BB4, BB5, / kind: uniform, merge, */
|
||||
//! /* logical preds: BB1, BB4, / linear preds: BB4, BB5, / kind: uniform, top-level, merge, */
|
||||
//! s2: %0:exec = p_parallelcopy %saved_exec:s[84-85]
|
||||
|
||||
//! v1: %res10:v[12] = v_add_f32 %a:v[0], %b:v[1] row_mirror bound_ctrl:1
|
||||
|
|
@ -593,7 +593,7 @@ BEGIN_TEST(optimizer_postRA.dpp_across_cf_overwritten)
|
|||
|
||||
/* --- merge block --- */
|
||||
//! BB6
|
||||
//! /* logical preds: BB1, BB4, / linear preds: BB4, BB5, / kind: uniform, merge, */
|
||||
//! /* logical preds: BB1, BB4, / linear preds: BB4, BB5, / kind: uniform, top-level, merge, */
|
||||
//! s2: %0:exec = p_parallelcopy %saved_exec:s[84-85]
|
||||
|
||||
//! v1: %result:v[12] = v_add_f32 %dpp_mov_tmp:v[12], %b:v[1]
|
||||
|
|
@ -665,7 +665,7 @@ BEGIN_TEST(optimizer_postRA.scc_nocmp_across_cf)
|
|||
|
||||
/* --- merge block --- */
|
||||
//! BB6
|
||||
//! /* logical preds: BB1, BB4, / linear preds: BB4, BB5, / kind: uniform, merge, */
|
||||
//! /* logical preds: BB1, BB4, / linear preds: BB4, BB5, / kind: uniform, top-level, merge, */
|
||||
//! s2: %0:exec = p_parallelcopy %saved_exec:s[84-85]
|
||||
|
||||
//! s2: %tmp_salu:s[8-9], s1: %br_scc:scc = s_and_b64 %a:s[2-3], 0x40018
|
||||
|
|
@ -748,7 +748,7 @@ BEGIN_TEST(optimizer_postRA.scc_nocmp_across_cf_partially_overwritten)
|
|||
|
||||
/* --- merge block --- */
|
||||
//! BB6
|
||||
//! /* logical preds: BB1, BB4, / linear preds: BB4, BB5, / kind: uniform, merge, */
|
||||
//! /* logical preds: BB1, BB4, / linear preds: BB4, BB5, / kind: uniform, top-level, merge, */
|
||||
//! s2: %0:exec = p_parallelcopy %saved_exec:s[84-85]
|
||||
|
||||
//! s1: %br_scc:scc = s_cmp_lg_u32 %tmp_salu:s[8-9], 0
|
||||
|
|
|
|||
59
src/amd/compiler/tests/test_reduce_assign.cpp
Normal file
59
src/amd/compiler/tests/test_reduce_assign.cpp
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
/*
|
||||
* Copyright © 2022 Valve Corporation
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the next
|
||||
* paragraph) shall be included in all copies or substantial portions of the
|
||||
* Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
#include "helpers.h"
|
||||
|
||||
using namespace aco;
|
||||
|
||||
BEGIN_TEST(setup_reduce_temp.divergent_if_phi)
|
||||
/*
|
||||
* This must have an end_linear_vgpr after the phi (to ensure it's live during the phi copies):
|
||||
* v0 = start_linear_vgpr
|
||||
* divergent_if (...) {
|
||||
*
|
||||
* } else {
|
||||
* use_linear_vgpr(v0)
|
||||
* }
|
||||
* ... = phi ...
|
||||
*/
|
||||
//TODO: fix the RA validator to spot this
|
||||
//>> s2: %_, v1: %a = p_startpgm
|
||||
if (!setup_cs("s2 v1", GFX9))
|
||||
return;
|
||||
|
||||
//>> lv1: %lv = p_start_linear_vgpr
|
||||
emit_divergent_if_else(program.get(), bld, Operand(inputs[0]), [&]() -> void {
|
||||
//>> s1: %_, s2: %_, s1: %_:scc = p_reduce %a, %lv, lv1: undef op:umin32 cluster_size:64
|
||||
Instruction* reduce = bld.reduction(aco_opcode::p_reduce, bld.def(s1),
|
||||
bld.def(bld.lm), bld.def(s1, scc), inputs[1],
|
||||
Operand(v1.as_linear()), Operand(v1.as_linear()), umin32);
|
||||
reduce->reduction().cluster_size = bld.lm.bytes() * 8;
|
||||
}, [&]() -> void {
|
||||
/* nothing */
|
||||
});
|
||||
bld.pseudo(aco_opcode::p_phi, bld.def(v1), Operand::c32(1), Operand::zero());
|
||||
//>> /* logical preds: BB1, BB4, / linear preds: BB4, BB5, / kind: uniform, top-level, merge, */
|
||||
//! p_end_linear_vgpr %lv
|
||||
|
||||
finish_setup_reduce_temp_test();
|
||||
END_TEST
|
||||
Loading…
Add table
Reference in a new issue