Module: Mesa Branch: staging/20.0 Commit: a1fd16e507b3381ff97fa74ea60e37a9ead0621d URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a1fd16e507b3381ff97fa74ea60e37a9ead0621d
Author: Rhys Perry <[email protected]> Date: Fri Jan 31 16:47:10 2020 +0000 aco: skip NIR in unreachable merge blocks NIR removes most of this but undef instructions for loop header phis can remain. These were harmless because ACO would DCE them itself. Signed-off-by: Rhys Perry <[email protected]> CC: <[email protected]> Reviewed-by: Daniel Schürmann <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3658> (cherry picked from commit 46e94fd854e8f209ae662826e1794de4c5da2b80) --- .pick_status.json | 2 +- src/amd/compiler/aco_instruction_selection.cpp | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index c7b5ab0bc1f..20e6dc2f2a6 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -481,7 +481,7 @@ "description": "aco: skip NIR in unreachable merge blocks", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "master_sha": null, "because_sha": null }, diff --git a/src/amd/compiler/aco_instruction_selection.cpp b/src/amd/compiler/aco_instruction_selection.cpp index 4f1f7751572..f0e95d1fc1f 100644 --- a/src/amd/compiler/aco_instruction_selection.cpp +++ b/src/amd/compiler/aco_instruction_selection.cpp @@ -8180,7 +8180,7 @@ static void end_divergent_if(isel_context *ctx, if_context *ic) } } -static void visit_if(isel_context *ctx, nir_if *if_stmt) +static bool visit_if(isel_context *ctx, nir_if *if_stmt) { Temp cond = get_ssa_temp(ctx, if_stmt->condition.ssa); Builder bld(ctx->program, ctx->block); @@ -8273,6 +8273,7 @@ static void visit_if(isel_context *ctx, nir_if *if_stmt) ctx->block = ctx->program->insert_block(std::move(BB_endif)); append_logical_start(ctx->block); } + return !ctx->cf_info.has_branch; } else { /* non-uniform condition */ /** * To maintain a logical and linear CFG without critical edges, @@ -8308,6 +8309,8 @@ static void visit_if(isel_context *ctx, nir_if *if_stmt) visit_cf_list(ctx, &if_stmt->else_list); end_divergent_if(ctx, &ic); + + return true; } } @@ -8320,7 +8323,8 @@ static void visit_cf_list(isel_context *ctx, visit_block(ctx, nir_cf_node_as_block(node)); break; case nir_cf_node_if: - visit_if(ctx, nir_cf_node_as_if(node)); + if (!visit_if(ctx, nir_cf_node_as_if(node))) + return; break; case nir_cf_node_loop: visit_loop(ctx, nir_cf_node_as_loop(node)); _______________________________________________ mesa-commit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-commit
