brw: Use control flow helpers in scoreboard tests

Also update WHILE to optionally take a predicate (default to NONE).  And
make the predicate in the IF optional (default to NORMAL).

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/34354>
This commit is contained in:
Caio Oliveira
2025-04-02 23:23:31 -07:00
committed by Marge Bot
parent 7c5389695b
commit cd486cda48
2 changed files with 39 additions and 34 deletions
+16 -11
View File
@@ -660,15 +660,6 @@ public:
fix_unsigned_negate(src1)));
}
/**
* Gfx4 predicated IF.
*/
brw_inst *
IF(brw_predicate predicate) const
{
return set_predicate(predicate, emit(BRW_OPCODE_IF));
}
/**
* CSEL: dst = src2 <op> 0.0f ? src0 : src1
*/
@@ -891,12 +882,26 @@ public:
brw_shader *shader;
brw_inst *BREAK() const { return emit(BRW_OPCODE_BREAK); }
brw_inst *ELSE() const { return emit(BRW_OPCODE_ELSE); }
brw_inst *ENDIF() const { return emit(BRW_OPCODE_ENDIF); }
brw_inst *NOP() const { return emit(BRW_OPCODE_NOP); }
brw_inst *WHILE() const { return emit(BRW_OPCODE_WHILE); }
brw_inst *CONTINUE() const { return emit(BRW_OPCODE_CONTINUE); }
void DO() const {
brw_inst *
IF(brw_predicate predicate = BRW_PREDICATE_NORMAL) const
{
return set_predicate(predicate, emit(BRW_OPCODE_IF));
}
brw_inst *
WHILE(brw_predicate predicate = BRW_PREDICATE_NONE) const
{
return set_predicate(predicate, emit(BRW_OPCODE_WHILE));
}
void
DO() const
{
emit(BRW_OPCODE_DO);
/* Ensure that there'll always be a block after DO to add
* instructions and serve as sucessor for predicated WHILE
+23 -23
View File
@@ -484,7 +484,7 @@ TEST_F(scoreboard_test, loop1)
bld.DO();
bld.ADD( x, g[1], g[2]);
bld.emit(BRW_OPCODE_WHILE)->predicate = BRW_PREDICATE_NORMAL;
bld.WHILE(BRW_PREDICATE_NORMAL);
bld.MUL( x, g[1], g[2]);
@@ -519,7 +519,7 @@ TEST_F(scoreboard_test, loop2)
bld.DO();
bld.ADD( x, g[1], g[2]);
bld.emit(BRW_OPCODE_WHILE)->predicate = BRW_PREDICATE_NORMAL;
bld.WHILE(BRW_PREDICATE_NORMAL);
bld.MUL( x, g[1], g[2]);
@@ -559,7 +559,7 @@ TEST_F(scoreboard_test, loop3)
bld.XOR(g[6], g[1], g[2]);
bld.ADD( x, g[1], g[2]);
bld.emit(BRW_OPCODE_WHILE)->predicate = BRW_PREDICATE_NORMAL;
bld.WHILE(BRW_PREDICATE_NORMAL);
bld.MUL( x, g[1], g[2]);
@@ -588,11 +588,11 @@ TEST_F(scoreboard_test, conditional1)
brw_reg x = bld.vgrf(BRW_TYPE_D);
bld.XOR( x, g[1], g[2]);
bld.emit(BRW_OPCODE_IF);
bld.IF();
bld.ADD( x, g[1], g[2]);
bld.emit(BRW_OPCODE_ENDIF);
bld.ENDIF();
bld.MUL( x, g[1], g[2]);
brw_calculate_cfg(*v);
@@ -620,11 +620,11 @@ TEST_F(scoreboard_test, conditional2)
bld.XOR(g[3], g[1], g[2]);
bld.XOR(g[4], g[1], g[2]);
bld.XOR(g[5], g[1], g[2]);
bld.emit(BRW_OPCODE_IF);
bld.IF();
bld.ADD( x, g[1], g[2]);
bld.emit(BRW_OPCODE_ENDIF);
bld.ENDIF();
bld.MUL( x, g[1], g[2]);
brw_calculate_cfg(*v);
@@ -649,14 +649,14 @@ TEST_F(scoreboard_test, conditional3)
brw_reg x = bld.vgrf(BRW_TYPE_D);
bld.XOR( x, g[1], g[2]);
bld.emit(BRW_OPCODE_IF);
bld.IF();
bld.XOR(g[3], g[1], g[2]);
bld.XOR(g[4], g[1], g[2]);
bld.XOR(g[5], g[1], g[2]);
bld.ADD( x, g[1], g[2]);
bld.emit(BRW_OPCODE_ENDIF);
bld.ENDIF();
bld.MUL( x, g[1], g[2]);
brw_calculate_cfg(*v);
@@ -681,14 +681,14 @@ TEST_F(scoreboard_test, conditional4)
brw_reg x = bld.vgrf(BRW_TYPE_D);
bld.XOR( x, g[1], g[2]);
bld.emit(BRW_OPCODE_IF);
bld.IF();
bld.ADD( x, g[1], g[2]);
bld.XOR(g[3], g[1], g[2]);
bld.XOR(g[4], g[1], g[2]);
bld.XOR(g[5], g[1], g[2]);
bld.emit(BRW_OPCODE_ENDIF);
bld.ENDIF();
bld.MUL( x, g[1], g[2]);
brw_calculate_cfg(*v);
@@ -713,14 +713,14 @@ TEST_F(scoreboard_test, conditional5)
brw_reg x = bld.vgrf(BRW_TYPE_D);
bld.XOR( x, g[1], g[2]);
bld.emit(BRW_OPCODE_IF);
bld.IF();
bld.ADD( x, g[1], g[2]);
bld.emit(BRW_OPCODE_ELSE);
bld.ELSE();
bld.ROL( x, g[1], g[2]);
bld.emit(BRW_OPCODE_ENDIF);
bld.ENDIF();
bld.MUL( x, g[1], g[2]);
brw_calculate_cfg(*v);
@@ -750,13 +750,13 @@ TEST_F(scoreboard_test, conditional6)
brw_reg x = bld.vgrf(BRW_TYPE_D);
bld.XOR( x, g[1], g[2]);
bld.emit(BRW_OPCODE_IF);
bld.IF();
bld.XOR(g[3], g[1], g[2]);
bld.XOR(g[4], g[1], g[2]);
bld.XOR(g[5], g[1], g[2]);
bld.ADD( x, g[1], g[2]);
bld.emit(BRW_OPCODE_ELSE);
bld.ELSE();
bld.XOR(g[6], g[1], g[2]);
bld.XOR(g[7], g[1], g[2]);
@@ -764,7 +764,7 @@ TEST_F(scoreboard_test, conditional6)
bld.XOR(g[9], g[1], g[2]);
bld.ROL( x, g[1], g[2]);
bld.emit(BRW_OPCODE_ENDIF);
bld.ENDIF();
bld.MUL( x, g[1], g[2]);
brw_calculate_cfg(*v);
@@ -794,13 +794,13 @@ TEST_F(scoreboard_test, conditional7)
brw_reg x = bld.vgrf(BRW_TYPE_D);
bld.XOR( x, g[1], g[2]);
bld.emit(BRW_OPCODE_IF);
bld.IF();
bld.ADD( x, g[1], g[2]);
bld.XOR(g[3], g[1], g[2]);
bld.XOR(g[4], g[1], g[2]);
bld.XOR(g[5], g[1], g[2]);
bld.emit(BRW_OPCODE_ELSE);
bld.ELSE();
bld.ROL( x, g[1], g[2]);
bld.XOR(g[6], g[1], g[2]);
@@ -808,7 +808,7 @@ TEST_F(scoreboard_test, conditional7)
bld.XOR(g[8], g[1], g[2]);
bld.XOR(g[9], g[1], g[2]);
bld.emit(BRW_OPCODE_ENDIF);
bld.ENDIF();
bld.MUL( x, g[1], g[2]);
brw_calculate_cfg(*v);
@@ -843,14 +843,14 @@ TEST_F(scoreboard_test, conditional8)
bld.XOR(g[5], g[1], g[2]);
bld.XOR(g[6], g[1], g[2]);
bld.XOR(g[7], g[1], g[2]);
bld.emit(BRW_OPCODE_IF);
bld.IF();
bld.ADD( x, g[1], g[2]);
bld.emit(BRW_OPCODE_ELSE);
bld.ELSE();
bld.ROL( x, g[1], g[2]);
bld.emit(BRW_OPCODE_ENDIF);
bld.ENDIF();
bld.MUL( x, g[1], g[2]);
brw_calculate_cfg(*v);