i965/fs: Remove broken optimization for live intervals in loops.
The theory here was to detect a temporary variable used within a loop, and avoid considering it live across the entire loop. However, it was overeager and failed when the first definition of the variable appeared within the loop but was only conditionally defined. Fixes glsl-fs-loop-redundant-condition.
This commit is contained in:
parent
a0d154dc13
commit
9634318290
|
@ -2812,8 +2812,7 @@ fs_visitor::calculate_live_intervals()
|
|||
if (inst->src[i].file == GRF && inst->src[i].reg != 0) {
|
||||
int reg = inst->src[i].reg;
|
||||
|
||||
if (!loop_depth || (this->virtual_grf_sizes[reg] == 1 &&
|
||||
def[reg] >= bb_header_ip)) {
|
||||
if (!loop_depth) {
|
||||
use[reg] = ip;
|
||||
} else {
|
||||
def[reg] = MIN2(loop_start, def[reg]);
|
||||
|
@ -2829,8 +2828,7 @@ fs_visitor::calculate_live_intervals()
|
|||
if (inst->dst.file == GRF && inst->dst.reg != 0) {
|
||||
int reg = inst->dst.reg;
|
||||
|
||||
if (!loop_depth || (this->virtual_grf_sizes[reg] == 1 &&
|
||||
!inst->predicated)) {
|
||||
if (!loop_depth) {
|
||||
def[reg] = MIN2(def[reg], ip);
|
||||
} else {
|
||||
def[reg] = MIN2(def[reg], loop_start);
|
||||
|
|
Loading…
Reference in New Issue