mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-25 13:00:09 +01:00
i965/fs: Let sat-prop ignore live ranges if producer already has sat.
This sequence (where both x and w are used afterwards) wasn't handled. mul.sat x, y, z ... mov.sat w, x We assumed that if x was used after the mov.sat, that we couldn't propagate the saturate modifier, but in fact x was already saturated. So ignore the live range check if the producing instruction already saturates its result. Cuts one instruction from hundreds of TF2 shaders. total instructions in shared programs: 1995631 -> 1994951 (-0.03%) instructions in affected programs: 155248 -> 154568 (-0.44%) Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
e58992aedd
commit
bcbb7c41b7
1 changed files with 7 additions and 4 deletions
|
|
@ -49,8 +49,6 @@ opt_saturate_propagation_local(fs_visitor *v, bblock_t *block)
|
|||
|
||||
int src_var = v->live_intervals->var_from_reg(&inst->src[0]);
|
||||
int src_end_ip = v->live_intervals->end[src_var];
|
||||
if (src_end_ip > ip && !inst->dst.equals(inst->src[0]))
|
||||
continue;
|
||||
|
||||
int scan_ip = ip;
|
||||
bool interfered = false;
|
||||
|
|
@ -63,10 +61,15 @@ opt_saturate_propagation_local(fs_visitor *v, bblock_t *block)
|
|||
scan_inst->dst.reg == inst->src[0].reg &&
|
||||
scan_inst->dst.reg_offset == inst->src[0].reg_offset &&
|
||||
!scan_inst->is_partial_write()) {
|
||||
if (scan_inst->can_do_saturate()) {
|
||||
scan_inst->saturate = true;
|
||||
if (scan_inst->saturate) {
|
||||
inst->saturate = false;
|
||||
progress = true;
|
||||
} else if (src_end_ip <= ip || inst->dst.equals(inst->src[0])) {
|
||||
if (scan_inst->can_do_saturate()) {
|
||||
scan_inst->saturate = true;
|
||||
inst->saturate = false;
|
||||
progress = true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue