| /* |
| * 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); |
| } |