intel/cfg: Add first/last_block helpers
authorJason Ekstrand <jason@jlekstrand.net>
Sat, 4 Apr 2020 02:25:40 +0000 (21:25 -0500)
committerMarge Bot <eric+marge@anholt.net>
Fri, 17 Apr 2020 14:48:06 +0000 (14:48 +0000)
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4447>

src/intel/compiler/brw_cfg.h

index c747805817d730bce45c4587c516a3e5ad8ba4e8..cec1464c69e1e727994bfbaff142e184091413a6 100644 (file)
@@ -310,6 +310,11 @@ struct cfg_t {
 
    void remove_block(bblock_t *block);
 
+   bblock_t *first_block();
+   const bblock_t *first_block() const;
+   bblock_t *last_block();
+   const bblock_t *last_block() const;
+
    bblock_t *new_block();
    void set_next_block(bblock_t **cur, bblock_t *block, int ip);
    void make_block_array();
@@ -328,6 +333,56 @@ struct cfg_t {
    unsigned cycle_count;
 };
 
+static inline struct bblock_t *
+cfg_first_block(struct cfg_t *cfg)
+{
+   return (struct bblock_t *)exec_list_get_head(&cfg->block_list);
+}
+
+static inline const struct bblock_t *
+cfg_first_block_const(const struct cfg_t *cfg)
+{
+   return (const struct bblock_t *)exec_list_get_head_const(&cfg->block_list);
+}
+
+static inline struct bblock_t *
+cfg_last_block(struct cfg_t *cfg)
+{
+   return (struct bblock_t *)exec_list_get_tail(&cfg->block_list);
+}
+
+static inline const struct bblock_t *
+cfg_last_block_const(const struct cfg_t *cfg)
+{
+   return (const struct bblock_t *)exec_list_get_tail_const(&cfg->block_list);
+}
+
+#ifdef __cplusplus
+inline bblock_t *
+cfg_t::first_block()
+{
+   return cfg_first_block(this);
+}
+
+const inline bblock_t *
+cfg_t::first_block() const
+{
+   return cfg_first_block_const(this);
+}
+
+inline bblock_t *
+cfg_t::last_block()
+{
+   return cfg_last_block(this);
+}
+
+const inline bblock_t *
+cfg_t::last_block() const
+{
+   return cfg_last_block_const(this);
+}
+#endif
+
 /* Note that this is implemented with a double for loop -- break will
  * break from the inner loop only!
  */