From: Ian Romanick Date: Tue, 4 Jun 2019 19:16:55 +0000 (-0700) Subject: intel/compiler: Treat b32csel as potentially producing a Boolean result for resolve... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=1c30d26d89c52b253062522d4ea488c22a83a7ab;p=mesa.git intel/compiler: Treat b32csel as potentially producing a Boolean result for resolve analysis 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 Reviewed-by: Matt Turner --- diff --git a/src/intel/compiler/brw_nir_analyze_boolean_resolves.c b/src/intel/compiler/brw_nir_analyze_boolean_resolves.c index f298590c470..63d094168b9 100644 --- a/src/intel/compiler/brw_nir_analyze_boolean_resolves.c +++ b/src/intel/compiler/brw_nir_analyze_boolean_resolves.c @@ -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;