nir/lower_io: Use b2b for shader and function temporaries
authorJason Ekstrand <jason@jlekstrand.net>
Wed, 15 Jul 2020 19:09:06 +0000 (14:09 -0500)
committerMarge Bot <eric+marge@anholt.net>
Wed, 22 Jul 2020 23:43:35 +0000 (23:43 +0000)
This way we can avoid some unnecessary conversions because there's no
need to sanitize to 0/1 for scratch.

Reviewed-by: Jesse Natalie <jenatali@microsoft.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5927>

src/compiler/nir/nir_lower_io.c

index 90bfe8a3dacac1f12649eafa0ecf744df0d34ea0..8018bab9cd022a1daa112126b1b3432d876991ab 100644 (file)
@@ -920,7 +920,9 @@ build_explicit_io_load(nir_builder *b, nir_intrinsic_instr *intrin,
        * standard encoding for booleans rather than forcing a 0/1 boolean.
        * This should save an instruction or two.
        */
-      if (mode == nir_var_mem_shared)
+      if (mode == nir_var_mem_shared ||
+          mode == nir_var_shader_temp ||
+          mode == nir_var_function_temp)
          result = nir_b2b1(b, result);
       else
          result = nir_i2b(b, result);
@@ -970,7 +972,9 @@ build_explicit_io_store(nir_builder *b, nir_intrinsic_instr *intrin,
        *
        * TODO: Make the native bool bit_size an option.
        */
-      if (mode == nir_var_mem_shared)
+      if (mode == nir_var_mem_shared ||
+          mode == nir_var_shader_temp ||
+          mode == nir_var_function_temp)
          value = nir_b2b32(b, value);
       else
          value = nir_b2i(b, value, 32);