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:
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user