Mesa (main): intel/fs: Refactor some cmod propagation tests
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Mon Aug 30 21:11:44 UTC 2021
Module: Mesa
Branch: main
Commit: 3afefb0818da96b06c07d0cf18142962e61be75c
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=3afefb0818da96b06c07d0cf18142962e61be75c
Author: Ian Romanick <ian.d.romanick at intel.com>
Date: Wed Jul 21 13:56:34 2021 -0700
intel/fs: Refactor some cmod propagation tests
This will simplify some later changes to these tests.
v2: Combine test_positive_saturate_prop and test_negative_saturate_prop
into a single function. Suggested by Marcin.
Reviewed-by: Marcin Ślusarz <marcin.slusarz at intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12045>
---
src/intel/compiler/test_fs_cmod_propagation.cpp | 278 +++++++++++++-----------
1 file changed, 154 insertions(+), 124 deletions(-)
diff --git a/src/intel/compiler/test_fs_cmod_propagation.cpp b/src/intel/compiler/test_fs_cmod_propagation.cpp
index e157a92b3c3..50e4efc137e 100644
--- a/src/intel/compiler/test_fs_cmod_propagation.cpp
+++ b/src/intel/compiler/test_fs_cmod_propagation.cpp
@@ -40,15 +40,12 @@ public:
struct gl_shader_program *shader_prog;
fs_visitor *v;
- void test_positive_float_saturate_prop(enum brw_conditional_mod before,
- enum brw_conditional_mod after,
- enum opcode op);
-
- void test_negative_float_saturate_prop(enum brw_conditional_mod before,
- enum opcode op);
-
- void test_negative_int_saturate_prop(enum brw_conditional_mod before,
- enum opcode op);
+ void test_saturate_prop(enum brw_conditional_mod before,
+ enum brw_conditional_mod after,
+ enum opcode op,
+ enum brw_reg_type add_type,
+ enum brw_reg_type op_type,
+ bool expected_cmod_prop_progress);
};
class cmod_propagation_fs_visitor : public fs_visitor
@@ -1504,53 +1501,31 @@ TEST_F(cmod_propagation_test, signed_unsigned_comparison_mismatch)
}
void
-cmod_propagation_test::test_positive_float_saturate_prop(enum brw_conditional_mod before,
- enum brw_conditional_mod after,
- enum opcode op)
+cmod_propagation_test::test_saturate_prop(enum brw_conditional_mod before,
+ enum brw_conditional_mod after,
+ enum opcode op,
+ enum brw_reg_type add_type,
+ enum brw_reg_type op_type,
+ bool expected_cmod_prop_progress)
{
const fs_builder &bld = v->bld;
- fs_reg dest = v->vgrf(glsl_type::float_type);
- fs_reg src0 = v->vgrf(glsl_type::float_type);
- fs_reg src1 = v->vgrf(glsl_type::float_type);
- fs_reg zero(brw_imm_f(0.0f));
- bld.ADD(dest, src0, src1)->saturate = true;
-
- assert(op == BRW_OPCODE_CMP || op == BRW_OPCODE_MOV);
- if (op == BRW_OPCODE_CMP)
- bld.CMP(bld.null_reg_f(), dest, zero, before);
- else
- bld.MOV(bld.null_reg_f(), dest)->conditional_mod = before;
-
- v->calculate_cfg();
- bblock_t *block0 = v->cfg->blocks[0];
-
- EXPECT_EQ(0, block0->start_ip);
- EXPECT_EQ(1, block0->end_ip);
-
- EXPECT_TRUE(cmod_propagation(v));
- EXPECT_EQ(0, block0->start_ip);
- EXPECT_EQ(0, block0->end_ip);
- EXPECT_EQ(BRW_OPCODE_ADD, instruction(block0, 0)->opcode);
- EXPECT_TRUE(instruction(block0, 0)->saturate);
- EXPECT_EQ(after, instruction(block0, 0)->conditional_mod);
-}
+ fs_reg dest = bld.vgrf(add_type);
+ fs_reg src0 = bld.vgrf(add_type);
+ fs_reg src1 = bld.vgrf(add_type);
+ fs_reg zero(brw_imm_ud(0));
-void
-cmod_propagation_test::test_negative_float_saturate_prop(enum brw_conditional_mod before,
- enum opcode op)
-{
- const fs_builder &bld = v->bld;
- fs_reg dest = v->vgrf(glsl_type::float_type);
- fs_reg src0 = v->vgrf(glsl_type::float_type);
- fs_reg src1 = v->vgrf(glsl_type::float_type);
- fs_reg zero(brw_imm_f(0.0f));
bld.ADD(dest, src0, src1)->saturate = true;
assert(op == BRW_OPCODE_CMP || op == BRW_OPCODE_MOV);
- if (op == BRW_OPCODE_CMP)
- bld.CMP(bld.null_reg_f(), dest, zero, before);
- else
- bld.MOV(bld.null_reg_f(), dest)->conditional_mod = before;
+ if (op == BRW_OPCODE_CMP) {
+ bld.CMP(bld.vgrf(op_type, 0),
+ retype(dest, op_type),
+ retype(zero, op_type),
+ before);
+ } else {
+ bld.MOV(bld.vgrf(op_type, 0), retype(dest, op_type))
+ ->conditional_mod = before;
+ }
v->calculate_cfg();
bblock_t *block0 = v->cfg->blocks[0];
@@ -1558,49 +1533,31 @@ cmod_propagation_test::test_negative_float_saturate_prop(enum brw_conditional_mo
EXPECT_EQ(0, block0->start_ip);
EXPECT_EQ(1, block0->end_ip);
- EXPECT_FALSE(cmod_propagation(v));
+ EXPECT_EQ(expected_cmod_prop_progress, cmod_propagation(v));
EXPECT_EQ(0, block0->start_ip);
- EXPECT_EQ(1, block0->end_ip);
- EXPECT_EQ(BRW_OPCODE_ADD, instruction(block0, 0)->opcode);
- EXPECT_TRUE(instruction(block0, 0)->saturate);
- EXPECT_EQ(BRW_CONDITIONAL_NONE, instruction(block0, 0)->conditional_mod);
- EXPECT_EQ(op, instruction(block0, 1)->opcode);
- EXPECT_FALSE(instruction(block0, 1)->saturate);
- EXPECT_EQ(before, instruction(block0, 1)->conditional_mod);
-}
-void
-cmod_propagation_test::test_negative_int_saturate_prop(enum brw_conditional_mod before,
- enum opcode op)
-{
- const fs_builder &bld = v->bld;
- fs_reg dest = v->vgrf(glsl_type::int_type);
- fs_reg src0 = v->vgrf(glsl_type::int_type);
- fs_reg src1 = v->vgrf(glsl_type::int_type);
- fs_reg zero(brw_imm_d(0));
- bld.ADD(dest, src0, src1)->saturate = true;
-
- assert(op == BRW_OPCODE_CMP || op == BRW_OPCODE_MOV);
- if (op == BRW_OPCODE_CMP)
- bld.CMP(bld.null_reg_d(), dest, zero, before);
- else
- bld.MOV(bld.null_reg_d(), dest)->conditional_mod = before;
-
- v->calculate_cfg();
- bblock_t *block0 = v->cfg->blocks[0];
-
- EXPECT_EQ(0, block0->start_ip);
- EXPECT_EQ(1, block0->end_ip);
-
- EXPECT_FALSE(cmod_propagation(v));
- EXPECT_EQ(0, block0->start_ip);
- EXPECT_EQ(1, block0->end_ip);
EXPECT_EQ(BRW_OPCODE_ADD, instruction(block0, 0)->opcode);
+ EXPECT_EQ(add_type, instruction(block0, 0)->dst.type);
+ EXPECT_EQ(add_type, instruction(block0, 0)->src[0].type);
+ EXPECT_EQ(add_type, instruction(block0, 0)->src[1].type);
EXPECT_TRUE(instruction(block0, 0)->saturate);
- EXPECT_EQ(BRW_CONDITIONAL_NONE, instruction(block0, 0)->conditional_mod);
- EXPECT_EQ(op, instruction(block0, 1)->opcode);
- EXPECT_FALSE(instruction(block0, 1)->saturate);
- EXPECT_EQ(before, instruction(block0, 1)->conditional_mod);
+
+ if (expected_cmod_prop_progress) {
+ EXPECT_EQ(0, block0->end_ip);
+ EXPECT_EQ(after, instruction(block0, 0)->conditional_mod);
+ } else {
+ EXPECT_EQ(BRW_CONDITIONAL_NONE, instruction(block0, 0)->conditional_mod);
+
+ /* This is ASSERT_EQ because if end_ip is 0, the instruction(block0, 1)
+ * calls will not work properly, and the test will give weird results.
+ */
+ ASSERT_EQ(1, block0->end_ip);
+ EXPECT_EQ(op, instruction(block0, 1)->opcode);
+ EXPECT_EQ(op_type, instruction(block0, 1)->dst.type);
+ EXPECT_EQ(op_type, instruction(block0, 1)->src[0].type);
+ EXPECT_FALSE(instruction(block0, 1)->saturate);
+ EXPECT_EQ(before, instruction(block0, 1)->conditional_mod);
+ }
}
TEST_F(cmod_propagation_test, float_saturate_nz_cmp)
@@ -1616,8 +1573,10 @@ TEST_F(cmod_propagation_test, float_saturate_nz_cmp)
* = After =
* 0: add.sat.g.f0(8) dest src0 src1
*/
- test_positive_float_saturate_prop(BRW_CONDITIONAL_NZ, BRW_CONDITIONAL_G,
- BRW_OPCODE_CMP);
+ test_saturate_prop(BRW_CONDITIONAL_NZ, BRW_CONDITIONAL_G,
+ BRW_OPCODE_CMP,
+ BRW_REGISTER_TYPE_F, BRW_REGISTER_TYPE_F,
+ true);
}
TEST_F(cmod_propagation_test, float_saturate_nz_mov)
@@ -1633,8 +1592,10 @@ TEST_F(cmod_propagation_test, float_saturate_nz_mov)
* = After =
* 0: add.sat.g.f0(8) dest src0 src1
*/
- test_positive_float_saturate_prop(BRW_CONDITIONAL_NZ, BRW_CONDITIONAL_G,
- BRW_OPCODE_MOV);
+ test_saturate_prop(BRW_CONDITIONAL_NZ, BRW_CONDITIONAL_G,
+ BRW_OPCODE_MOV,
+ BRW_REGISTER_TYPE_F, BRW_REGISTER_TYPE_F,
+ true);
}
TEST_F(cmod_propagation_test, float_saturate_z_cmp)
@@ -1650,8 +1611,10 @@ TEST_F(cmod_propagation_test, float_saturate_z_cmp)
* = After =
* 0: add.sat.le.f0(8) dest src0 src1
*/
- test_positive_float_saturate_prop(BRW_CONDITIONAL_Z, BRW_CONDITIONAL_LE,
- BRW_OPCODE_CMP);
+ test_saturate_prop(BRW_CONDITIONAL_Z, BRW_CONDITIONAL_LE,
+ BRW_OPCODE_CMP,
+ BRW_REGISTER_TYPE_F, BRW_REGISTER_TYPE_F,
+ true);
}
TEST_F(cmod_propagation_test, float_saturate_z_mov)
@@ -1669,10 +1632,15 @@ TEST_F(cmod_propagation_test, float_saturate_z_mov)
*/
#if 1
/* cmod propagation bails on every MOV except MOV.NZ. */
- test_negative_float_saturate_prop(BRW_CONDITIONAL_Z, BRW_OPCODE_MOV);
+ test_saturate_prop(BRW_CONDITIONAL_Z, BRW_CONDITIONAL_Z,
+ BRW_OPCODE_MOV,
+ BRW_REGISTER_TYPE_F, BRW_REGISTER_TYPE_F,
+ false);
#else
- test_positive_float_saturate_prop(BRW_CONDITIONAL_Z, BRW_CONDITIONAL_LE,
- BRW_OPCODE_MOV);
+ test_saturate_prop(BRW_CONDITIONAL_Z, BRW_CONDITIONAL_LE,
+ BRW_OPCODE_MOV,
+ BRW_REGISTER_TYPE_F, BRW_REGISTER_TYPE_F,
+ true);
#endif
}
@@ -1689,8 +1657,10 @@ TEST_F(cmod_propagation_test, float_saturate_g_cmp)
* = After =
* 0: add.sat.g.f0(8) dest src0 src1
*/
- test_positive_float_saturate_prop(BRW_CONDITIONAL_G, BRW_CONDITIONAL_G,
- BRW_OPCODE_CMP);
+ test_saturate_prop(BRW_CONDITIONAL_G, BRW_CONDITIONAL_G,
+ BRW_OPCODE_CMP,
+ BRW_REGISTER_TYPE_F, BRW_REGISTER_TYPE_F,
+ true);
}
TEST_F(cmod_propagation_test, float_saturate_g_mov)
@@ -1708,10 +1678,15 @@ TEST_F(cmod_propagation_test, float_saturate_g_mov)
*/
#if 1
/* cmod propagation bails on every MOV except MOV.NZ. */
- test_negative_float_saturate_prop(BRW_CONDITIONAL_G, BRW_OPCODE_MOV);
+ test_saturate_prop(BRW_CONDITIONAL_G, BRW_CONDITIONAL_G,
+ BRW_OPCODE_MOV,
+ BRW_REGISTER_TYPE_F, BRW_REGISTER_TYPE_F,
+ false);
#else
- test_positive_float_saturate_prop(BRW_CONDITIONAL_G, BRW_CONDITIONAL_G,
- BRW_OPCODE_MOV);
+ test_saturate_prop(BRW_CONDITIONAL_G, BRW_CONDITIONAL_G,
+ BRW_OPCODE_MOV,
+ BRW_REGISTER_TYPE_F, BRW_REGISTER_TYPE_F,
+ true);
#endif
}
@@ -1728,8 +1703,10 @@ TEST_F(cmod_propagation_test, float_saturate_le_cmp)
* = After =
* 0: add.sat.le.f0(8) dest src0 src1
*/
- test_positive_float_saturate_prop(BRW_CONDITIONAL_LE, BRW_CONDITIONAL_LE,
- BRW_OPCODE_CMP);
+ test_saturate_prop(BRW_CONDITIONAL_LE, BRW_CONDITIONAL_LE,
+ BRW_OPCODE_CMP,
+ BRW_REGISTER_TYPE_F, BRW_REGISTER_TYPE_F,
+ true);
}
TEST_F(cmod_propagation_test, float_saturate_le_mov)
@@ -1747,10 +1724,15 @@ TEST_F(cmod_propagation_test, float_saturate_le_mov)
*/
#if 1
/* cmod propagation bails on every MOV except MOV.NZ. */
- test_negative_float_saturate_prop(BRW_CONDITIONAL_LE, BRW_OPCODE_MOV);
+ test_saturate_prop(BRW_CONDITIONAL_LE, BRW_CONDITIONAL_LE,
+ BRW_OPCODE_MOV,
+ BRW_REGISTER_TYPE_F, BRW_REGISTER_TYPE_F,
+ false);
#else
- test_positive_float_saturate_prop(BRW_CONDITIONAL_LE, BRW_CONDITIONAL_LE,
- BRW_OPCODE_MOV);
+ test_saturate_prop(BRW_CONDITIONAL_LE, BRW_CONDITIONAL_LE,
+ BRW_OPCODE_MOV,
+ BRW_REGISTER_TYPE_F, BRW_REGISTER_TYPE_F,
+ true);
#endif
}
@@ -1767,7 +1749,10 @@ TEST_F(cmod_propagation_test, float_saturate_l_cmp)
* = After =
* No change
*/
- test_negative_float_saturate_prop(BRW_CONDITIONAL_L, BRW_OPCODE_CMP);
+ test_saturate_prop(BRW_CONDITIONAL_L, BRW_CONDITIONAL_L,
+ BRW_OPCODE_CMP,
+ BRW_REGISTER_TYPE_F, BRW_REGISTER_TYPE_F,
+ false);
}
#if 0
@@ -1784,7 +1769,10 @@ TEST_F(cmod_propagation_test, float_saturate_l_mov)
* = After =
* No change
*/
- test_negative_float_saturate_prop(BRW_CONDITIONAL_L, BRW_OPCODE_MOV);
+ test_saturate_prop(BRW_CONDITIONAL_L, BRW_CONDITIONAL_L,
+ BRW_OPCODE_MOV,
+ BRW_REGISTER_TYPE_F, BRW_REGISTER_TYPE_F,
+ false);
}
#endif
@@ -1801,7 +1789,10 @@ TEST_F(cmod_propagation_test, float_saturate_ge_cmp)
* = After =
* No change
*/
- test_negative_float_saturate_prop(BRW_CONDITIONAL_GE, BRW_OPCODE_CMP);
+ test_saturate_prop(BRW_CONDITIONAL_GE, BRW_CONDITIONAL_GE,
+ BRW_OPCODE_CMP,
+ BRW_REGISTER_TYPE_F, BRW_REGISTER_TYPE_F,
+ false);
}
TEST_F(cmod_propagation_test, float_saturate_ge_mov)
@@ -1817,7 +1808,10 @@ TEST_F(cmod_propagation_test, float_saturate_ge_mov)
* = After =
* No change
*/
- test_negative_float_saturate_prop(BRW_CONDITIONAL_GE, BRW_OPCODE_MOV);
+ test_saturate_prop(BRW_CONDITIONAL_GE, BRW_CONDITIONAL_GE,
+ BRW_OPCODE_MOV,
+ BRW_REGISTER_TYPE_F, BRW_REGISTER_TYPE_F,
+ false);
}
TEST_F(cmod_propagation_test, int_saturate_nz_cmp)
@@ -1830,7 +1824,10 @@ TEST_F(cmod_propagation_test, int_saturate_nz_cmp)
* = After =
* No change.
*/
- test_negative_int_saturate_prop(BRW_CONDITIONAL_NZ, BRW_OPCODE_CMP);
+ test_saturate_prop(BRW_CONDITIONAL_NZ, BRW_CONDITIONAL_NZ,
+ BRW_OPCODE_CMP,
+ BRW_REGISTER_TYPE_D, BRW_REGISTER_TYPE_D,
+ false);
}
TEST_F(cmod_propagation_test, int_saturate_nz_mov)
@@ -1843,7 +1840,10 @@ TEST_F(cmod_propagation_test, int_saturate_nz_mov)
* = After =
* No change.
*/
- test_negative_int_saturate_prop(BRW_CONDITIONAL_NZ, BRW_OPCODE_MOV);
+ test_saturate_prop(BRW_CONDITIONAL_NZ, BRW_CONDITIONAL_NZ,
+ BRW_OPCODE_MOV,
+ BRW_REGISTER_TYPE_D, BRW_REGISTER_TYPE_D,
+ false);
}
TEST_F(cmod_propagation_test, int_saturate_z_cmp)
@@ -1856,7 +1856,10 @@ TEST_F(cmod_propagation_test, int_saturate_z_cmp)
* = After =
* No change.
*/
- test_negative_int_saturate_prop(BRW_CONDITIONAL_Z, BRW_OPCODE_CMP);
+ test_saturate_prop(BRW_CONDITIONAL_Z, BRW_CONDITIONAL_Z,
+ BRW_OPCODE_CMP,
+ BRW_REGISTER_TYPE_D, BRW_REGISTER_TYPE_D,
+ false);
}
TEST_F(cmod_propagation_test, int_saturate_z_mov)
@@ -1872,7 +1875,10 @@ TEST_F(cmod_propagation_test, int_saturate_z_mov)
* = After =
* No change.
*/
- test_negative_int_saturate_prop(BRW_CONDITIONAL_Z, BRW_OPCODE_MOV);
+ test_saturate_prop(BRW_CONDITIONAL_Z, BRW_CONDITIONAL_Z,
+ BRW_OPCODE_MOV,
+ BRW_REGISTER_TYPE_D, BRW_REGISTER_TYPE_D,
+ false);
}
TEST_F(cmod_propagation_test, int_saturate_g_cmp)
@@ -1885,7 +1891,10 @@ TEST_F(cmod_propagation_test, int_saturate_g_cmp)
* = After =
* No change.
*/
- test_negative_int_saturate_prop(BRW_CONDITIONAL_G, BRW_OPCODE_CMP);
+ test_saturate_prop(BRW_CONDITIONAL_G, BRW_CONDITIONAL_G,
+ BRW_OPCODE_CMP,
+ BRW_REGISTER_TYPE_D, BRW_REGISTER_TYPE_D,
+ false);
}
TEST_F(cmod_propagation_test, int_saturate_g_mov)
@@ -1898,7 +1907,10 @@ TEST_F(cmod_propagation_test, int_saturate_g_mov)
* = After =
* No change.
*/
- test_negative_int_saturate_prop(BRW_CONDITIONAL_G, BRW_OPCODE_MOV);
+ test_saturate_prop(BRW_CONDITIONAL_G, BRW_CONDITIONAL_G,
+ BRW_OPCODE_MOV,
+ BRW_REGISTER_TYPE_D, BRW_REGISTER_TYPE_D,
+ false);
}
TEST_F(cmod_propagation_test, int_saturate_le_cmp)
@@ -1911,7 +1923,10 @@ TEST_F(cmod_propagation_test, int_saturate_le_cmp)
* = After =
* No change.
*/
- test_negative_int_saturate_prop(BRW_CONDITIONAL_LE, BRW_OPCODE_CMP);
+ test_saturate_prop(BRW_CONDITIONAL_LE, BRW_CONDITIONAL_LE,
+ BRW_OPCODE_CMP,
+ BRW_REGISTER_TYPE_D, BRW_REGISTER_TYPE_D,
+ false);
}
TEST_F(cmod_propagation_test, int_saturate_le_mov)
@@ -1924,7 +1939,10 @@ TEST_F(cmod_propagation_test, int_saturate_le_mov)
* = After =
* No change.
*/
- test_negative_int_saturate_prop(BRW_CONDITIONAL_LE, BRW_OPCODE_MOV);
+ test_saturate_prop(BRW_CONDITIONAL_LE, BRW_CONDITIONAL_LE,
+ BRW_OPCODE_MOV,
+ BRW_REGISTER_TYPE_D, BRW_REGISTER_TYPE_D,
+ false);
}
TEST_F(cmod_propagation_test, int_saturate_l_cmp)
@@ -1937,7 +1955,10 @@ TEST_F(cmod_propagation_test, int_saturate_l_cmp)
* = After =
* No change
*/
- test_negative_int_saturate_prop(BRW_CONDITIONAL_L, BRW_OPCODE_CMP);
+ test_saturate_prop(BRW_CONDITIONAL_L, BRW_CONDITIONAL_L,
+ BRW_OPCODE_CMP,
+ BRW_REGISTER_TYPE_D, BRW_REGISTER_TYPE_D,
+ false);
}
TEST_F(cmod_propagation_test, int_saturate_l_mov)
@@ -1950,7 +1971,10 @@ TEST_F(cmod_propagation_test, int_saturate_l_mov)
* = After =
* No change
*/
- test_negative_int_saturate_prop(BRW_CONDITIONAL_L, BRW_OPCODE_MOV);
+ test_saturate_prop(BRW_CONDITIONAL_L, BRW_CONDITIONAL_L,
+ BRW_OPCODE_MOV,
+ BRW_REGISTER_TYPE_D, BRW_REGISTER_TYPE_D,
+ false);
}
TEST_F(cmod_propagation_test, int_saturate_ge_cmp)
@@ -1963,7 +1987,10 @@ TEST_F(cmod_propagation_test, int_saturate_ge_cmp)
* = After =
* No change
*/
- test_negative_int_saturate_prop(BRW_CONDITIONAL_GE, BRW_OPCODE_CMP);
+ test_saturate_prop(BRW_CONDITIONAL_GE, BRW_CONDITIONAL_GE,
+ BRW_OPCODE_CMP,
+ BRW_REGISTER_TYPE_D, BRW_REGISTER_TYPE_D,
+ false);
}
TEST_F(cmod_propagation_test, int_saturate_ge_mov)
@@ -1976,7 +2003,10 @@ TEST_F(cmod_propagation_test, int_saturate_ge_mov)
* = After =
* No change
*/
- test_negative_int_saturate_prop(BRW_CONDITIONAL_GE, BRW_OPCODE_MOV);
+ test_saturate_prop(BRW_CONDITIONAL_GE, BRW_CONDITIONAL_GE,
+ BRW_OPCODE_MOV,
+ BRW_REGISTER_TYPE_D, BRW_REGISTER_TYPE_D,
+ false);
}
TEST_F(cmod_propagation_test, not_to_or)
More information about the mesa-commit
mailing list