i965/fs: Preserve CFG in the SEL peephole.
authorMatt Turner <mattst88@gmail.com>
Thu, 17 Jul 2014 04:51:19 +0000 (21:51 -0700)
committerMatt Turner <mattst88@gmail.com>
Fri, 22 Aug 2014 17:23:34 +0000 (10:23 -0700)
Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
src/mesa/drivers/dri/i965/brw_fs_sel_peephole.cpp

index d64cd98343aa02b3c4b941f56b58638667a60a95..f6091387530b10f543cc0424a51fdeb227d27e3a 100644 (file)
@@ -212,23 +212,26 @@ fs_visitor::opt_peephole_sel()
       if (brw->gen == 6 && if_inst->conditional_mod) {
          fs_inst *cmp_inst = CMP(reg_null_d, if_inst->src[0], if_inst->src[1],
                                  if_inst->conditional_mod);
-         if_inst->insert_before(cmp_inst);
+         if_inst->insert_before(block, cmp_inst);
       }
 
+      bblock_t *then_block = (bblock_t *)block->link.next;
+      bblock_t *else_block = (bblock_t *)block->else_block->link.next;
+
       for (int i = 0; i < movs; i++) {
          if (mov_imm_inst[i])
-            if_inst->insert_before(mov_imm_inst[i]);
-         if_inst->insert_before(sel_inst[i]);
+            if_inst->insert_before(block, mov_imm_inst[i]);
+         if_inst->insert_before(block, sel_inst[i]);
 
-         then_mov[i]->remove();
-         else_mov[i]->remove();
+         then_mov[i]->remove(then_block);
+         else_mov[i]->remove(else_block);
       }
 
       progress = true;
    }
 
    if (progress)
-      invalidate_live_intervals();
+      invalidate_live_intervals(false);
 
    return progress;
 }