diff --git a/src/intel/compiler/brw_builder.h b/src/intel/compiler/brw_builder.h index f89f8f38034..b191b6c5735 100644 --- a/src/intel/compiler/brw_builder.h +++ b/src/intel/compiler/brw_builder.h @@ -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 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 diff --git a/src/intel/compiler/test_lower_scoreboard.cpp b/src/intel/compiler/test_lower_scoreboard.cpp index ca1825d9386..08d9880fda4 100644 --- a/src/intel/compiler/test_lower_scoreboard.cpp +++ b/src/intel/compiler/test_lower_scoreboard.cpp @@ -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);