Mesa (main): nir: Add test to check edge case in Split ALU optimization
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Fri Jun 25 23:15:25 UTC 2021
Module: Mesa
Branch: main
Commit: 3a9289eaedc1fe7b92783a94dbe3a5fc308471c5
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=3a9289eaedc1fe7b92783a94dbe3a5fc308471c5
Author: Caio Marcelo de Oliveira Filho <caio.oliveira at intel.com>
Date: Wed Jun 23 15:28:40 2021 -0700
nir: Add test to check edge case in Split ALU optimization
Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11476>
---
src/compiler/nir/tests/opt_if_tests.cpp | 49 +++++++++++++++++++++++++++++++++
1 file changed, 49 insertions(+)
diff --git a/src/compiler/nir/tests/opt_if_tests.cpp b/src/compiler/nir/tests/opt_if_tests.cpp
index 38ad45a7025..250c5a0314a 100644
--- a/src/compiler/nir/tests/opt_if_tests.cpp
+++ b/src/compiler/nir/tests/opt_if_tests.cpp
@@ -141,3 +141,52 @@ TEST_F(nir_opt_if_test, opt_if_simplification_single_source_phi_after_if)
ASSERT_TRUE(nir_block_ends_in_jump(nir_if_last_then_block(nif)));
ASSERT_TRUE(exec_list_is_empty((&nir_if_first_else_block(nif)->instr_list)));
}
+
+TEST_F(nir_opt_if_test, opt_if_alu_of_phi_progress)
+{
+ nir_ssa_def *two = nir_imm_int(&bld, 2);
+ nir_ssa_def *x = nir_imm_int(&bld, 0);
+
+ nir_phi_instr *phi = nir_phi_instr_create(bld.shader);
+
+ nir_loop *loop = nir_push_loop(&bld);
+ {
+ nir_ssa_dest_init(&phi->instr, &phi->dest,
+ x->num_components, x->bit_size, NULL);
+
+ nir_phi_src *phi_src_x = ralloc(phi, nir_phi_src);
+ phi_src_x->pred = x->parent_instr->block;
+ phi_src_x->src = nir_src_for_ssa(x);
+ exec_list_push_tail(&phi->srcs, &phi_src_x->node);
+
+ nir_ssa_def *y = nir_iadd(&bld, &phi->dest.ssa, two);
+ nir_store_var(&bld, out_var,
+ nir_imul(&bld, &phi->dest.ssa, two), 1);
+
+ nir_phi_src *phi_src_y = ralloc(phi, nir_phi_src);
+ phi_src_y->pred = nir_cursor_current_block(bld.cursor);
+ phi_src_y->src = nir_src_for_ssa(y);
+ exec_list_push_tail(&phi->srcs, &phi_src_y->node);
+ }
+ nir_pop_loop(&bld, loop);
+
+ bld.cursor = nir_before_block(nir_loop_first_block(loop));
+ nir_builder_instr_insert(&bld, &phi->instr);
+
+ nir_validate_shader(bld.shader, "input");
+
+ bool progress;
+
+ int progress_count = 0;
+ for (int i = 0; i < 10; i++) {
+ progress = nir_opt_if(bld.shader, false);
+ if (progress)
+ progress_count++;
+ else
+ break;
+ nir_opt_constant_folding(bld.shader);
+ }
+
+ EXPECT_LE(progress_count, 2);
+ ASSERT_FALSE(progress);
+}
More information about the mesa-commit
mailing list