i965: Add and use foreach_inst_in_block macros.
authorMatt Turner <mattst88@gmail.com>
Tue, 24 Jun 2014 19:42:00 +0000 (12:42 -0700)
committerMatt Turner <mattst88@gmail.com>
Tue, 1 Jul 2014 15:55:51 +0000 (08:55 -0700)
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
src/mesa/drivers/dri/i965/brw_cfg.h
src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp
src/mesa/drivers/dri/i965/brw_fs_cse.cpp
src/mesa/drivers/dri/i965/brw_fs_dead_code_eliminate.cpp
src/mesa/drivers/dri/i965/brw_fs_live_variables.cpp
src/mesa/drivers/dri/i965/brw_fs_saturate_propagation.cpp
src/mesa/drivers/dri/i965/brw_vec4_live_variables.cpp

index 9466bd2fdd1e1490219f8867001c09005f179278..b55eacbec2680dd1ee3c26b5c0ce3fd4da54cc0d 100644 (file)
@@ -105,4 +105,14 @@ public:
 };
 #endif
 
+#define foreach_inst_in_block(__type, __inst, __block)         \
+   for (__type *__inst = (__type *)__block->start;             \
+        __inst != __block->end->next;                          \
+        __inst = (__type *)__inst->next)
+
+#define foreach_inst_in_block_reverse(__type, __inst, __block) \
+   for (__type *__inst = (__type *)__block->end;               \
+        __inst != __block->start->prev;                        \
+        __inst = (__type *)__inst->prev)
+
 #endif /* BRW_CFG_H */
index 3c6e616d92a904e3ba65e6bd9965b745047ce6fe..184a2842093fa1d90bb1d6b3254b40c970732a50 100644 (file)
@@ -157,9 +157,7 @@ fs_copy_prop_dataflow::setup_initial_values()
    for (int b = 0; b < cfg->num_blocks; b++) {
       bblock_t *block = cfg->blocks[b];
 
-      for (fs_inst *inst = (fs_inst *)block->start;
-           inst != block->end->next;
-           inst = (fs_inst *)inst->next) {
+      foreach_inst_in_block(fs_inst, inst, block) {
          if (inst->dst.file != GRF)
             continue;
 
@@ -532,10 +530,7 @@ fs_visitor::opt_copy_propagate_local(void *copy_prop_ctx, bblock_t *block,
 {
    bool progress = false;
 
-   for (fs_inst *inst = (fs_inst *)block->start;
-       inst != block->end->next;
-       inst = (fs_inst *)inst->next) {
-
+   foreach_inst_in_block(fs_inst, inst, block) {
       /* Try propagating into this instruction. */
       for (int i = 0; i < inst->sources; i++) {
          if (inst->src[i].file != GRF)
index 26873b8427d299b555df29a517b384b65a0fe6a0..e4068fc708790db7cdb66c75237bea5366d32804 100644 (file)
@@ -173,10 +173,7 @@ fs_visitor::opt_cse_local(bblock_t *block, exec_list *aeb)
    void *cse_ctx = ralloc_context(NULL);
 
    int ip = block->start_ip;
-   for (fs_inst *inst = (fs_inst *)block->start;
-        inst != block->end->next;
-        inst = (fs_inst *) inst->next) {
-
+   foreach_inst_in_block(fs_inst, inst, block) {
       /* Skip some cases. */
       if (is_expression(inst) && !inst->is_partial_write() &&
           (inst->dst.file != HW_REG || inst->dst.is_null()))
index 962d8c6f414793a4e84ada01f182b60265cc66b2..3fefe81fa225e77c520eb69fccbcd768858ff036 100644 (file)
@@ -51,9 +51,7 @@ fs_visitor::dead_code_eliminate()
       memcpy(live, live_intervals->bd[b].liveout,
              sizeof(BITSET_WORD) * BITSET_WORDS(num_vars));
 
-      for (fs_inst *inst = (fs_inst *)block->end;
-           inst != block->start->prev;
-           inst = (fs_inst *)inst->prev) {
+      foreach_inst_in_block_reverse(fs_inst, inst, block) {
          if (inst->dst.file == GRF &&
              !inst->has_side_effects() &&
              !inst->writes_flag()) {
index d39724a5ce383b288030bbac8f1cd881e58d1575..0973dc9d83adf6e817e7591bcf4e143d58acf026 100644 (file)
@@ -144,10 +144,7 @@ fs_live_variables::setup_def_use()
       if (b > 0)
         assert(cfg->blocks[b - 1]->end_ip == ip - 1);
 
-      for (fs_inst *inst = (fs_inst *)block->start;
-          inst != block->end->next;
-          inst = (fs_inst *)inst->next) {
-
+      foreach_inst_in_block(fs_inst, inst, block) {
         /* Set use[] for this instruction */
         for (unsigned int i = 0; i < inst->sources; i++) {
             fs_reg reg = inst->src[i];
index 29c8b2ea31832476b58e42c42362e7a58c34500d..079eb2eb79535eb8ed51f10446ecd4a34efb6066 100644 (file)
@@ -34,9 +34,7 @@ opt_saturate_propagation_local(fs_visitor *v, bblock_t *block)
    bool progress = false;
    int ip = block->start_ip - 1;
 
-   for (fs_inst *inst = (fs_inst *)block->start;
-        inst != block->end->next;
-        inst = (fs_inst *) inst->next) {
+   foreach_inst_in_block(fs_inst, inst, block) {
       ip++;
 
       if (inst->opcode != BRW_OPCODE_MOV ||
index 7ffa5fe4f464d45b45961ab7718520e3b3cd40f4..5f0b696bf1ce1fa1b411dc7f8469feb753a36cd3 100644 (file)
@@ -72,10 +72,7 @@ vec4_live_variables::setup_def_use()
       if (b > 0)
         assert(cfg->blocks[b - 1]->end_ip == ip - 1);
 
-      for (vec4_instruction *inst = (vec4_instruction *)block->start;
-          inst != block->end->next;
-          inst = (vec4_instruction *)inst->next) {
-
+      foreach_inst_in_block(vec4_instruction, inst, block) {
         /* Set use[] for this instruction */
         for (unsigned int i = 0; i < 3; i++) {
            if (inst->src[i].file == GRF) {