[Mesa-dev] [PATCH] nir/remove_phis: handle trivial back-edges
Matt Turner
mattst88 at gmail.com
Thu May 21 22:24:17 PDT 2015
On Thu, May 21, 2015 at 5:07 PM, Connor Abbott <cwabbott0 at gmail.com> wrote:
> Some loops may have phi nodes that look like:
>
> foo = ...
> loop {
> bar = phi(foo, bar)
> ...
> }
>
> in which case we can remove the phi node and replace all uses of 'bar'
> with 'foo'. In particular, there are some L4D2 vertex shaders with loops
> that, after optimization, look like:
>
> /* succs: block_1 */
> loop {
> block block_1:
> /* preds: block_0 block_4 */
> vec1 ssa_2195 = phi block_0: ssa_2136, block_4: ssa_994
> vec1 ssa_7321 = phi block_0: ssa_8195, block_4: ssa_7321
> vec1 ssa_7324 = phi block_0: ssa_8198, block_4: ssa_7324
> vec1 ssa_7327 = phi block_0: ssa_8174, block_4: ssa_7327
> vec1 ssa_8139 = intrinsic load_uniform () () (232)
> vec1 ssa_588 = ige ssa_2195, ssa_8139
> /* succs: block_2 block_3 */
> if ssa_588 {
> block block_2:
> /* preds: block_1 */
> break
> /* succs: block_5 */
> } else {
> block block_3:
> /* preds: block_1 */
> /* succs: block_4 */
> }
> block block_4:
> /* preds: block_3 */
> vec1 ssa_994 = iadd ssa_2195, ssa_2150
> /* succs: block_1 */
> }
>
> where after removing the second, third, and fourth phi nodes, the loop
> becomes entirely dead, and this patch combined with my nir-dead-cf-v4
> branch will cause the loop to be deleted entirely.
>
> No piglit regressions.
>
> Signed-off-by: Connor Abbott <cwabbott0 at gmail.com>
On top of the first 13-patches (on BDW):
instructions in affected programs: 5824 -> 5664 (-2.75%)
helped: 32
(to save Jason from rerunning it tomorrow)
More information about the mesa-dev
mailing list