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