i965/fs: Optimize saturating SEL.L(E) with imm val >= 1.0.
authorMatt Turner <mattst88@gmail.com>
Mon, 28 Oct 2013 03:03:48 +0000 (20:03 -0700)
committerMatt Turner <mattst88@gmail.com>
Fri, 1 Nov 2013 22:21:07 +0000 (15:21 -0700)
total instructions in shared programs: 1409124 -> 1406971 (-0.15%)
instructions in affected programs:     158376 -> 156223 (-1.36%)

Reviewed-by: Eric Anholt <eric@anholt.net>
Reviewed-by: Paul Berry <stereotype441@gmail.com>
src/mesa/drivers/dri/i965/brw_fs.cpp

index 2350cd097c5c4f19b58a767b1ebce5aed152e792..56284d94e0b3ce76f100cab13c1ad557bd0723d5 100644 (file)
@@ -1880,6 +1880,28 @@ fs_visitor::opt_algebraic()
             break;
          }
          break;
+      case BRW_OPCODE_SEL:
+         if (inst->saturate && inst->src[1].file == IMM) {
+            switch (inst->conditional_mod) {
+            case BRW_CONDITIONAL_LE:
+            case BRW_CONDITIONAL_L:
+               switch (inst->src[1].type) {
+               case BRW_REGISTER_TYPE_F:
+                  if (inst->src[1].imm.f >= 1.0f) {
+                     inst->opcode = BRW_OPCODE_MOV;
+                     inst->src[1] = reg_undef;
+                     progress = true;
+                  }
+                  break;
+               default:
+                  break;
+               }
+               break;
+            default:
+               break;
+            }
+         }
+         break;
       default:
         break;
       }