mirror of https://gitlab.freedesktop.org/mesa/mesa
nir/opt_if: don't split ALU of phi into otherwise empty blocks
RADV GFX11: Totals from 1566 (1.97% of 79395) affected shaders: Instrs: 5663011 -> 5638219 (-0.44%); split: -0.45%, +0.01% CodeSize: 29760844 -> 29639756 (-0.41%); split: -0.42%, +0.01% SpillSGPRs: 1750 -> 1603 (-8.40%) Latency: 62963520 -> 62831280 (-0.21%); split: -0.22%, +0.01% InvThroughput: 10501171 -> 10490116 (-0.11%); split: -0.11%, +0.00% VClause: 127928 -> 128054 (+0.10%); split: -0.01%, +0.11% SClause: 152635 -> 152956 (+0.21%); split: -0.08%, +0.29% Copies: 476865 -> 461288 (-3.27%); split: -3.28%, +0.02% Branches: 169038 -> 168104 (-0.55%); split: -0.56%, +0.00% PreSGPRs: 88851 -> 88356 (-0.56%); split: -0.58%, +0.02% PreVGPRs: 114565 -> 114559 (-0.01%); split: -0.01%, +0.01% VALU: 3158023 -> 3157387 (-0.02%); split: -0.03%, +0.01% SALU: 615028 -> 595360 (-3.20%); split: -3.21%, +0.01% VMEM: 219891 -> 218287 (-0.73%); split: -0.74%, +0.01% SMEM: 206956 -> 206484 (-0.23%) Reviewed-by: Alyssa Rosenzweig <alyssa@rosenzweig.io> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28150>
This commit is contained in:
parent
e74f5b16e3
commit
3a2226be47
|
@ -304,6 +304,13 @@ is_trivial_bcsel(const nir_instr *instr, bool allow_non_phi_src)
|
|||
return true;
|
||||
}
|
||||
|
||||
static bool
|
||||
is_block_empty(nir_block *block)
|
||||
{
|
||||
return nir_cf_node_is_last(&block->cf_node) &&
|
||||
exec_list_is_empty(&block->instr_list);
|
||||
}
|
||||
|
||||
/**
|
||||
* Splits ALU instructions that have a source that is a phi node
|
||||
*
|
||||
|
@ -388,6 +395,10 @@ opt_split_alu_of_phi(nir_builder *b, nir_loop *loop, nir_opt_if_options options)
|
|||
if (continue_block == header_block)
|
||||
return false;
|
||||
|
||||
/* If the continue block is otherwise empty, leave it that way. */
|
||||
if (is_block_empty(continue_block))
|
||||
return false;
|
||||
|
||||
nir_foreach_instr_safe(instr, header_block) {
|
||||
if (instr->type != nir_instr_type_alu)
|
||||
continue;
|
||||
|
@ -690,13 +701,6 @@ opt_simplify_bcsel_of_phi(nir_builder *b, nir_loop *loop)
|
|||
return progress;
|
||||
}
|
||||
|
||||
static bool
|
||||
is_block_empty(nir_block *block)
|
||||
{
|
||||
return nir_cf_node_is_last(&block->cf_node) &&
|
||||
exec_list_is_empty(&block->instr_list);
|
||||
}
|
||||
|
||||
/* Walk all the phis in the block immediately following the if statement and
|
||||
* swap the blocks.
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue