Lines Matching refs:inst
41 can_eliminate(const fs_inst *inst, BITSET_WORD *flag_live)
43 return !inst->is_control_flow() &&
44 !inst->has_side_effects() &&
45 !(flag_live[0] & inst->flags_written()) &&
46 !inst->writes_accumulator;
53 can_omit_write(const fs_inst *inst)
55 switch (inst->opcode) {
65 if (inst->opcode < 128 && inst->mlen == 0)
90 foreach_inst_in_block_reverse_safe(fs_inst, inst, block) {
91 if (inst->dst.file == VGRF) {
92 const unsigned var = live_intervals->var_from_reg(inst->dst);
95 for (unsigned i = 0; i < regs_written(inst); i++)
99 (can_omit_write(inst) || can_eliminate(inst, flag_live))) {
100 inst->dst = fs_reg(retype(brw_null_reg(), inst->dst.type));
105 if (inst->dst.is_null() && can_eliminate(inst, flag_live)) {
106 inst->opcode = BRW_OPCODE_NOP;
110 if (inst->dst.file == VGRF) {
111 if (!inst->is_partial_write()) {
112 int var = live_intervals->var_from_reg(inst->dst);
113 for (unsigned i = 0; i < regs_written(inst); i++) {
119 if (!inst->predicate && inst->exec_size >= 8)
120 flag_live[0] &= ~inst->flags_written();
122 if (inst->opcode == BRW_OPCODE_NOP) {
123 inst->remove(block);
127 for (int i = 0; i < inst->sources; i++) {
128 if (inst->src[i].file == VGRF) {
129 int var = live_intervals->var_from_reg(inst->src[i]);
131 for (unsigned j = 0; j < regs_read(inst, i); j++) {
137 flag_live[0] |= inst->flags_read(devinfo);