mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 07:28:11 +02:00
i965/vec4: Only examine virtual_grf_end for GRF sources
If the source is not a GRF, it could have a register >= virtual_grf_count. Accessing virtual_grf_end with such a register would lead to out-of-bounds access. Make sure the source is a GRF before accessing virtual_grf_end. Fixes Valgrind complaints while compiling some shaders. Signed-off-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Cc: mesa-stable@lists.freedesktop.org
This commit is contained in:
parent
a46d7579e9
commit
7aeb853c90
1 changed files with 12 additions and 8 deletions
|
|
@ -224,14 +224,18 @@ vec4_visitor::opt_cse_local(bblock_t *block)
|
|||
/* Kill any AEB entries using registers that don't get reused any
|
||||
* more -- a sure sign they'll fail operands_match().
|
||||
*/
|
||||
int last_reg_use = MAX2(MAX2(virtual_grf_end[src->reg * 4 + 0],
|
||||
virtual_grf_end[src->reg * 4 + 1]),
|
||||
MAX2(virtual_grf_end[src->reg * 4 + 2],
|
||||
virtual_grf_end[src->reg * 4 + 3]));
|
||||
if (src->file == GRF && last_reg_use < ip) {
|
||||
entry->remove();
|
||||
ralloc_free(entry);
|
||||
break;
|
||||
if (src->file == GRF) {
|
||||
assert((src->reg * 4 + 3) < (virtual_grf_count * 4));
|
||||
|
||||
int last_reg_use = MAX2(MAX2(virtual_grf_end[src->reg * 4 + 0],
|
||||
virtual_grf_end[src->reg * 4 + 1]),
|
||||
MAX2(virtual_grf_end[src->reg * 4 + 2],
|
||||
virtual_grf_end[src->reg * 4 + 3]));
|
||||
if (last_reg_use < ip) {
|
||||
entry->remove();
|
||||
ralloc_free(entry);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue