i965: correct mt->align_h for 2D textures on Skylake
[mesa.git] / src / mesa / drivers / dri / i965 / brw_fs_live_variables.h
index ab612cce169dd01df5928dc338bcfe16c7a8ae38..c7457069edec6ccb013fe9a027caaf985eb9d8ef 100644 (file)
@@ -26,7 +26,9 @@
  */
 
 #include "brw_fs.h"
-#include "main/bitset.h"
+#include "util/bitset.h"
+
+struct cfg_t;
 
 namespace brw {
 
@@ -49,21 +51,25 @@ struct block_data {
 
    /** 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 compute_live_variables();
-
-   fs_visitor *v;
-   cfg_t *cfg;
-   void *mem_ctx;
+   bool vars_interfere(int a, int b);
+   int var_from_reg(const fs_reg &reg) const
+   {
+      return var_from_vgrf[reg.reg] + reg.reg_offset;
+   }
 
    /** Map from virtual GRF number to index in block_data arrays. */
    int *var_from_vgrf;
@@ -71,7 +77,7 @@ public:
    /**
     * 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;
@@ -80,8 +86,30 @@ public:
    int num_vgrfs;
    int bitset_words;
 
+   /** @{
+    * Final computed live ranges for each var (each component of each virtual
+    * GRF).
+    */
+   int *start;
+   int *end;
+   /** @} */
+
    /** 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 &reg);
+   void setup_one_write(struct block_data *bd, fs_inst *inst, int ip,
+                        const fs_reg &reg);
+   void compute_live_variables();
+   void compute_start_end();
+
+   fs_visitor *v;
+   const cfg_t *cfg;
+   void *mem_ctx;
+
 };
 
 } /* namespace brw */