i965: correct mt->align_h for 2D textures on Skylake
[mesa.git] / src / mesa / drivers / dri / i965 / brw_fs_live_variables.h
index 1cde5f46798946a05b8916bf38d144f59919cee8..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,35 +51,65 @@ 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:
-   static void* operator new(size_t size, void *ctx)
-   {
-      void *node;
+   DECLARE_RALLOC_CXX_OPERATORS(fs_live_variables)
 
-      node = rzalloc_size(ctx, size);
-      assert(node != NULL);
+   fs_live_variables(fs_visitor *v, const cfg_t *cfg);
+   ~fs_live_variables();
 
-      return node;
+   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;
    }
 
-   fs_live_variables(fs_visitor *v, cfg_t *cfg);
-   ~fs_live_variables();
+   /** 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 alloc.sizes of [1, 2, 3], vgrf_from_var would contain
+    * [0, 1, 1, 2, 2, 2].
+    */
+   int *vgrf_from_var;
+
+   int num_vars;
+   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 *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;
-   cfg_t *cfg;
+   const cfg_t *cfg;
    void *mem_ctx;
 
-   int num_vars;
-   int bitset_words;
-
-   /** Per-basic-block information on live variables */
-   struct block_data *bd;
 };
 
 } /* namespace brw */