*/
#include "brw_fs.h"
-#include "main/bitset.h"
+#include "util/bitset.h"
+
+struct cfg_t;
namespace brw {
/** Which defs reach the exit point of the block. */
BITSET_WORD *liveout;
+
+ BITSET_WORD flag_def[1];
+ BITSET_WORD flag_use[1];
+ BITSET_WORD flag_livein[1];
+ BITSET_WORD flag_liveout[1];
};
class fs_live_variables {
public:
DECLARE_RALLOC_CXX_OPERATORS(fs_live_variables)
- fs_live_variables(fs_visitor *v, cfg_t *cfg);
+ fs_live_variables(fs_visitor *v, const cfg_t *cfg);
~fs_live_variables();
- void setup_def_use();
- void setup_one_read(bblock_t *block, fs_inst *inst, int ip, fs_reg reg);
- void setup_one_write(bblock_t *block, fs_inst *inst, int ip, fs_reg reg);
- void compute_live_variables();
- void compute_start_end();
-
- fs_visitor *v;
- cfg_t *cfg;
- void *mem_ctx;
+ bool vars_interfere(int a, int b);
+ int var_from_reg(const fs_reg ®) const
+ {
+ return var_from_vgrf[reg.nr] + reg.reg_offset;
+ }
/** Map from virtual GRF number to index in block_data arrays. */
int *var_from_vgrf;
/**
* Map from any index in block_data to the virtual GRF containing it.
*
- * For virtual_grf_sizes of [1, 2, 3], vgrf_from_var would contain
+ * For alloc.sizes of [1, 2, 3], vgrf_from_var would contain
* [0, 1, 1, 2, 2, 2].
*/
int *vgrf_from_var;
/** @} */
/** Per-basic-block information on live variables */
- struct block_data *bd;
+ struct block_data *block_data;
+
+protected:
+ void setup_def_use();
+ void setup_one_read(struct block_data *bd, fs_inst *inst, int ip,
+ const fs_reg ®);
+ void setup_one_write(struct block_data *bd, fs_inst *inst, int ip,
+ const fs_reg ®);
+ void compute_live_variables();
+ void compute_start_end();
+
+ fs_visitor *v;
+ const cfg_t *cfg;
+ void *mem_ctx;
+
};
} /* namespace brw */