intel/compiler: Treat b32csel as potentially producing a Boolean result for resolve...
authorIan Romanick <ian.d.romanick@intel.com>
Tue, 4 Jun 2019 19:16:55 +0000 (12:16 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Thu, 6 Jun 2019 00:04:17 +0000 (17:04 -0700)
If the 2nd and 3rd source are both Boolean values, we can potentially
avoid a resolve by only resolving the result of the b32csel.

No changes on any Gen6+ Intel platform.

v2: Use ?: instead of cast from bool to unsigned.  Suggested by Caio.

Iron Lake
total instructions in shared programs: 8142729 -> 8142677 (<.01%)
instructions in affected programs: 12890 -> 12838 (-0.40%)
helped: 26
HURT: 0
helped stats (abs) min: 2 max: 2 x̄: 2.00 x̃: 2
helped stats (rel) min: 0.25% max: 0.74% x̄: 0.45% x̃: 0.38%
95% mean confidence interval for instructions value: -2.00 -2.00
95% mean confidence interval for instructions %-change: -0.52% -0.39%
Instructions are helped.

total cycles in shared programs: 188549632 -> 188549394 (<.01%)
cycles in affected programs: 60754 -> 60516 (-0.39%)
helped: 25
HURT: 1
helped stats (abs) min: 2 max: 26 x̄: 9.92 x̃: 8
helped stats (rel) min: 0.07% max: 2.23% x̄: 0.59% x̃: 0.27%
HURT stats (abs)   min: 10 max: 10 x̄: 10.00 x̃: 10
HURT stats (rel)   min: 0.70% max: 0.70% x̄: 0.70% x̃: 0.70%
95% mean confidence interval for cycles value: -12.91 -5.40
95% mean confidence interval for cycles %-change: -0.84% -0.23%
Cycles are helped.

GM45
total instructions in shared programs: 5013119 -> 5013093 (<.01%)
instructions in affected programs: 6764 -> 6738 (-0.38%)
helped: 13
HURT: 0
helped stats (abs) min: 2 max: 2 x̄: 2.00 x̃: 2
helped stats (rel) min: 0.24% max: 0.68% x̄: 0.43% x̃: 0.36%
95% mean confidence interval for instructions value: -2.00 -2.00
95% mean confidence interval for instructions %-change: -0.52% -0.34%
Instructions are helped.

total cycles in shared programs: 128977804 -> 128977700 (<.01%)
cycles in affected programs: 37738 -> 37634 (-0.28%)
helped: 13
HURT: 0
helped stats (abs) min: 8 max: 8 x̄: 8.00 x̃: 8
helped stats (rel) min: 0.18% max: 0.46% x̄: 0.30% x̃: 0.26%
95% mean confidence interval for cycles value: -8.00 -8.00
95% mean confidence interval for cycles %-change: -0.36% -0.24%
Cycles are helped.

Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
src/intel/compiler/brw_nir_analyze_boolean_resolves.c

index f298590c4703b99aa7201f150cc183e9cbaa1c13..63d094168b9d2ae23c24cd364f4ac066e8358ba8 100644 (file)
@@ -137,11 +137,13 @@ analyze_boolean_resolves_block(nir_block *block)
             resolve_status = get_resolve_status_for_src(&alu->src[0].src);
             break;
 
+         case nir_op_b32csel:
          case nir_op_iand:
          case nir_op_ior:
          case nir_op_ixor: {
-            uint8_t src0_status = get_resolve_status_for_src(&alu->src[0].src);
-            uint8_t src1_status = get_resolve_status_for_src(&alu->src[1].src);
+            const unsigned first = alu->op == nir_op_b32csel ? 1 : 0;
+            uint8_t src0_status = get_resolve_status_for_src(&alu->src[first + 0].src);
+            uint8_t src1_status = get_resolve_status_for_src(&alu->src[first + 1].src);
 
             if (src0_status == src1_status) {
                resolve_status = src0_status;