#include "brw_fs.h"
#include "brw_cfg.h"
+using namespace brw;
+
/** @file brw_fs_peephole_predicated_break.cpp
*
* Loops are often structured as
/* For Sandybridge with IF with embedded comparison we need to emit an
* instruction to set the flag register.
*/
- if (brw->gen == 6 && if_inst->conditional_mod) {
- fs_inst *cmp_inst = CMP(reg_null_d, if_inst->src[0], if_inst->src[1],
- if_inst->conditional_mod);
- if_inst->insert_before(if_block, cmp_inst);
+ if (devinfo->gen == 6 && if_inst->conditional_mod) {
+ const fs_builder ibld(this, if_block, if_inst);
+ ibld.CMP(ibld.null_reg_d(), if_inst->src[0], if_inst->src[1],
+ if_inst->conditional_mod);
jump_inst->predicate = BRW_PREDICATE_NORMAL;
} else {
jump_inst->predicate = if_inst->predicate;
}
endif_inst->remove(endif_block);
- earlier_block->children.make_empty();
- later_block->parents.make_empty();
+ if (!earlier_block->ends_with_control_flow()) {
+ earlier_block->children.make_empty();
+ earlier_block->add_successor(cfg->mem_ctx, jump_block);
+ }
- earlier_block->add_successor(cfg->mem_ctx, jump_block);
+ if (!later_block->starts_with_control_flow()) {
+ later_block->parents.make_empty();
+ }
jump_block->add_successor(cfg->mem_ctx, later_block);
if (earlier_block->can_combine_with(jump_block)) {