intel/compiler: Update block IPs once in opt_cmod_propagation
No difference proven at 95.0% confidence (n=10) in dEQP-VK.ssbo.phys.layout.random.16bit.scalar.13. v2: Only update each block's IP data once instead of once per block. Suggested by Emma. Reviewed-by: Emma Anholt <emma@anholt.net> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11632>
This commit is contained in:
parent
8f1052938d
commit
3cb203303c
|
@ -135,7 +135,7 @@ cmod_propagate_cmp_to_add(const intel_device_info *devinfo, bblock_t *block,
|
|||
((!read_flag && scan_inst->conditional_mod == BRW_CONDITIONAL_NONE) ||
|
||||
scan_inst->conditional_mod == cond)) {
|
||||
scan_inst->conditional_mod = cond;
|
||||
inst->remove(block);
|
||||
inst->remove(block, true);
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
|
@ -203,7 +203,7 @@ cmod_propagate_not(const intel_device_info *devinfo, bblock_t *block,
|
|||
((!read_flag && scan_inst->conditional_mod == BRW_CONDITIONAL_NONE) ||
|
||||
scan_inst->conditional_mod == cond)) {
|
||||
scan_inst->conditional_mod = cond;
|
||||
inst->remove(block);
|
||||
inst->remove(block, true);
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
|
@ -309,7 +309,7 @@ opt_cmod_propagation_local(const intel_device_info *devinfo, bblock_t *block)
|
|||
if (inst->conditional_mod == BRW_CONDITIONAL_NZ &&
|
||||
scan_inst->opcode == BRW_OPCODE_CMP &&
|
||||
brw_reg_type_is_integer(inst->dst.type)) {
|
||||
inst->remove(block);
|
||||
inst->remove(block, true);
|
||||
progress = true;
|
||||
break;
|
||||
}
|
||||
|
@ -403,17 +403,17 @@ opt_cmod_propagation_local(const intel_device_info *devinfo, bblock_t *block)
|
|||
inst->src[0].type == BRW_REGISTER_TYPE_UD) ||
|
||||
(inst->conditional_mod == BRW_CONDITIONAL_L &&
|
||||
inst->src[0].type == BRW_REGISTER_TYPE_D)) {
|
||||
inst->remove(block);
|
||||
inst->remove(block, true);
|
||||
progress = true;
|
||||
break;
|
||||
}
|
||||
} else if (scan_inst->conditional_mod == inst->conditional_mod) {
|
||||
inst->remove(block);
|
||||
inst->remove(block, true);
|
||||
progress = true;
|
||||
break;
|
||||
} else if (!read_flag) {
|
||||
scan_inst->conditional_mod = inst->conditional_mod;
|
||||
inst->remove(block);
|
||||
inst->remove(block, true);
|
||||
progress = true;
|
||||
break;
|
||||
}
|
||||
|
@ -499,7 +499,7 @@ opt_cmod_propagation_local(const intel_device_info *devinfo, bblock_t *block)
|
|||
scan_inst->conditional_mod == cond)) {
|
||||
scan_inst->conditional_mod = cond;
|
||||
scan_inst->flag_subreg = inst->flag_subreg;
|
||||
inst->remove(block);
|
||||
inst->remove(block, true);
|
||||
progress = true;
|
||||
}
|
||||
break;
|
||||
|
@ -513,6 +513,9 @@ opt_cmod_propagation_local(const intel_device_info *devinfo, bblock_t *block)
|
|||
}
|
||||
}
|
||||
|
||||
/* There is progress if and only if instructions were removed. */
|
||||
assert(progress == (block->end_ip_delta != 0));
|
||||
|
||||
return progress;
|
||||
}
|
||||
|
||||
|
@ -525,8 +528,11 @@ fs_visitor::opt_cmod_propagation()
|
|||
progress = opt_cmod_propagation_local(devinfo, block) || progress;
|
||||
}
|
||||
|
||||
if (progress)
|
||||
if (progress) {
|
||||
cfg->adjust_block_ips();
|
||||
|
||||
invalidate_analysis(DEPENDENCY_INSTRUCTIONS);
|
||||
}
|
||||
|
||||
return progress;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue