#include "brw_fs_live_variables.h"
#include "brw_cfg.h"
+using namespace brw;
+
/** @file brw_fs_saturate_propagation.cpp
*
* Implements a pass that propagates the SAT modifier from a MOV.SAT into the
*/
static bool
-opt_saturate_propagation_local(fs_visitor *v, bblock_t *block)
+opt_saturate_propagation_local(const fs_live_variables &live, bblock_t *block)
{
bool progress = false;
int ip = block->end_ip + 1;
inst->src[0].abs)
continue;
- int src_var = v->live_intervals->var_from_reg(inst->src[0]);
- int src_end_ip = v->live_intervals->end[src_var];
+ int src_var = live.var_from_reg(inst->src[0]);
+ int src_end_ip = live.end[src_var];
bool interfered = false;
foreach_inst_in_block_reverse_starting_from(fs_inst, scan_inst, inst) {
- if (regions_overlap(scan_inst->dst, scan_inst->size_written,
+ if (scan_inst->exec_size == inst->exec_size &&
+ regions_overlap(scan_inst->dst, scan_inst->size_written,
inst->src[0], inst->size_read(0))) {
if (scan_inst->is_partial_write() ||
(scan_inst->dst.type != inst->dst.type &&
bool
fs_visitor::opt_saturate_propagation()
{
+ const fs_live_variables &live = live_analysis.require();
bool progress = false;
- calculate_live_intervals();
-
foreach_block (block, cfg) {
- progress = opt_saturate_propagation_local(this, block) || progress;
+ progress = opt_saturate_propagation_local(live, block) || progress;
}
/* Live intervals are still valid. */