blob: 75f0a323237e5c1fca9103011d70ccf7eb5880d1 [file] [log] [blame]
/*
* Copyright (c) 2024 Intel Corporation
* SPDX-License-Identifier: MIT
*/
#include "test_helpers.h"
#include "brw_builder.h"
class CombineConstantsTest : public brw_shader_pass_test {};
TEST_F(CombineConstantsTest, Simple)
{
brw_builder bld = make_shader(MESA_SHADER_COMPUTE);
brw_builder exp = make_shader(MESA_SHADER_COMPUTE);
brw_reg r = brw_vec8_grf(1, 0);
brw_reg imm_a = brw_imm_d(1);
brw_reg imm_b = brw_imm_d(2);
bld.SEL(r, imm_a, imm_b);
EXPECT_PROGRESS(brw_opt_combine_constants, bld);
brw_reg tmp = component(exp.vgrf(BRW_TYPE_D), 0);
exp.uniform().MOV(tmp, imm_a);
exp .SEL(r, tmp, imm_b);
EXPECT_SHADERS_MATCH(bld, exp);
}
TEST_F(CombineConstantsTest, DoContainingDo)
{
brw_builder bld = make_shader(MESA_SHADER_COMPUTE);
brw_builder exp = make_shader(MESA_SHADER_COMPUTE);
brw_reg r1 = brw_vec8_grf(1, 0);
brw_reg r2 = brw_vec8_grf(2, 0);
brw_reg imm_a = brw_imm_d(1);
brw_reg imm_b = brw_imm_d(2);
bld.DO();
bld.DO();
bld.SEL(r1, imm_a, imm_b);
bld.WHILE();
bld.WHILE();
bld.SEL(r2, imm_a, imm_b);
EXPECT_PROGRESS(brw_opt_combine_constants, bld);
/* Explicit emit the expected FLOW instruction. */
exp.emit(BRW_OPCODE_DO);
brw_reg tmp = component(exp.vgrf(BRW_TYPE_D), 0);
exp.uniform().MOV(tmp, imm_a);
exp.emit(SHADER_OPCODE_FLOW);
exp.DO();
exp.SEL(r1, tmp, imm_b);
exp.WHILE();
exp.WHILE();
exp.SEL(r2, tmp, imm_b);
EXPECT_SHADERS_MATCH(bld, exp);
}