v3d: do not setup execute flags for else block in uniform control flow
authorIago Toral Quiroga <itoral@igalia.com>
Thu, 13 Jun 2019 09:38:45 +0000 (11:38 +0200)
committerIago Toral Quiroga <itoral@igalia.com>
Fri, 14 Jun 2019 06:00:52 +0000 (08:00 +0200)
Either all channels executed the 'then' block, in which case all
channels will directly jump to the 'endif' block at the end of the
'then' block, or all channels execute the 'else' block (so no
execution masking is necessary).

Shader-db results:

total instructions in shared programs: 9119238 -> 9117550 (-0.02%)
instructions in affected programs: 401252 -> 399564 (-0.42%)
helped: 855
HURT: 77

total uniforms in shared programs: 3022622 -> 3022605 (<.01%)
uniforms in affected programs: 3566 -> 3549 (-0.48%)
helped: 17
HURT: 0

total max-temps in shared programs: 1327762 -> 1327774 (<.01%)
max-temps in affected programs: 619 -> 631 (1.94%)
helped: 2
HURT: 15

Reviewed-by: Eric Anholt <eric@anholt.net>
src/broadcom/compiler/nir_to_vir.c

index 702e4bf15f811e67a542ef57ce9b7d8058927e59..242414983e1f412e1bf628a9900417cfd8af4d38 100644 (file)
@@ -2015,7 +2015,6 @@ ntq_emit_uniform_if(struct v3d_compile *c, nir_if *if_stmt)
 
                 /* Emit the else block. */
                 vir_set_emit_block(c, else_block);
 
                 /* Emit the else block. */
                 vir_set_emit_block(c, else_block);
-                ntq_activate_execute_for_block(c);
                 ntq_emit_cf_list(c, &if_stmt->else_list);
         }
 
                 ntq_emit_cf_list(c, &if_stmt->else_list);
         }