i965/fs: Disable some optimization passes under 16-wide for now.
authorEric Anholt <eric@anholt.net>
Wed, 23 Mar 2011 21:00:01 +0000 (14:00 -0700)
committerEric Anholt <eric@anholt.net>
Tue, 26 Apr 2011 19:19:30 +0000 (12:19 -0700)
These are fixable for 16, but that can wait until after it's basically
working.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_fs.cpp
src/mesa/drivers/dri/i965/brw_fs_schedule_instructions.cpp

index 19dbf418df96f7555819c7c9cb312cf6bdaca509..17f4435a1ac7683d578118a5390b791bcde2dfd6 100644 (file)
@@ -2910,6 +2910,10 @@ fs_visitor::propagate_constants()
 {
    bool progress = false;
 
+   /* Need to update the MRF tracking for compressed instructions. */
+   if (c->dispatch_width == 16)
+      return false;
+
    calculate_live_intervals();
 
    foreach_iter(exec_list_iterator, iter, this->instructions) {
@@ -3171,6 +3175,10 @@ fs_visitor::compute_to_mrf()
    bool progress = false;
    int next_ip = 0;
 
+   /* Need to update the MRF tracking for compressed instructions. */
+   if (c->dispatch_width == 16)
+      return false;
+
    calculate_live_intervals();
 
    foreach_iter(exec_list_iterator, iter, this->instructions) {
@@ -3302,6 +3310,10 @@ fs_visitor::remove_duplicate_mrf_writes()
    fs_inst *last_mrf_move[16];
    bool progress = false;
 
+   /* Need to update the MRF tracking for compressed instructions. */
+   if (c->dispatch_width == 16)
+      return false;
+
    memset(last_mrf_move, 0, sizeof(last_mrf_move));
 
    foreach_iter(exec_list_iterator, iter, this->instructions) {
index bff8f82f3f7d90331de394abf942a5e6efe18369..400452d71f815735736c2dd98ab1b46f2c6c4782 100644 (file)
@@ -463,6 +463,9 @@ fs_visitor::schedule_instructions()
    fs_inst *next_block_header = (fs_inst *)instructions.head;
    instruction_scheduler sched(this, mem_ctx, this->virtual_grf_next);
 
+   if (c->dispatch_width == 16)
+      return;
+
    while (!next_block_header->is_tail_sentinel()) {
       /* Add things to be scheduled until we get to a new BB. */
       while (!next_block_header->is_tail_sentinel()) {