nir/search: Extend 'a@bool' to handle a couple of system values.
authorKenneth Graunke <kenneth@whitecape.org>
Wed, 17 Aug 2016 22:03:00 +0000 (15:03 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 18 Aug 2016 08:27:27 +0000 (01:27 -0700)
load_front_face and load_helper_invocation produce booleans.

On Broadwell:

total instructions in shared programs: 11638956 -> 11638011 (-0.01%)
instructions in affected programs: 115093 -> 114148 (-0.82%)
helped: 628
HURT: 14

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/compiler/nir/nir_search.c

index bfa00c24a414b8bb140c3b9eaf321cc56ab79b8e..f24a7b9d07fedc3eab2c6e2baffb66d55b63c06b 100644 (file)
@@ -78,6 +78,13 @@ src_is_type(nir_src src, nir_alu_type type)
       }
 
       return nir_alu_type_get_base_type(output_type) == type;
+   } else if (src.ssa->parent_instr->type == nir_instr_type_intrinsic) {
+      nir_intrinsic_instr *intr = nir_instr_as_intrinsic(src.ssa->parent_instr);
+
+      if (type == nir_type_bool) {
+         return intr->intrinsic == nir_intrinsic_load_front_face ||
+                intr->intrinsic == nir_intrinsic_load_helper_invocation;
+      }
    }
 
    /* don't know */