Edit

IABSD.fr/xenocara/lib/mesa/src/amd/compiler/tests/test_reduce_assign.cpp

Branch :

  • Show log

    Commit

  • Author : jsg
    Date : 2025-06-05 11:23:11
    Hash : 67d6f117
    Message : Import Mesa 25.0.7

  • lib/mesa/src/amd/compiler/tests/test_reduce_assign.cpp
  • /*
     * Copyright © 2022 Valve Corporation
     *
     * SPDX-License-Identifier: MIT
     */
    #include "helpers.h"
    
    using namespace aco;
    
    BEGIN_TEST(setup_reduce_temp.divergent_if_phi)
       /*
        * This must have an end_linear_vgpr after the phi (to ensure it's live during the phi copies):
        * v0 = start_linear_vgpr
        * divergent_if (...) {
        *
        * } else {
        *    use_linear_vgpr(v0)
        * }
        * ... = phi ...
        */
       // TODO: fix the RA validator to spot this
       //>> s2: %_, v1: %a = p_startpgm
       if (!setup_cs("s2 v1", GFX9))
          return;
    
       //>> p_logical_start
       //>> p_logical_end
       bld.pseudo(aco_opcode::p_logical_start);
       bld.pseudo(aco_opcode::p_logical_end);
    
       //>> lv1: %lv = p_start_linear_vgpr
       emit_divergent_if_else(
          program.get(), bld, Operand(inputs[0]),
          [&]() -> void
          {
             //>> s1: %_, s2: %_, s1: %_:scc = p_reduce %a, %lv, lv1: undef op:umin32 cluster_size:64
             Instruction* reduce =
                bld.reduction(aco_opcode::p_reduce, bld.def(s1), bld.def(bld.lm), bld.def(s1, scc),
                              inputs[1], Operand(v1.as_linear()), Operand(v1.as_linear()), umin32);
             reduce->reduction().cluster_size = bld.lm.bytes() * 8;
          },
          [&]() -> void
          {
             /* nothing */
          });
       bld.pseudo(aco_opcode::p_phi, bld.def(v1), Operand::c32(1), Operand::zero());
       //>> /* logical preds: BB1, BB4, / linear preds: BB4, BB5, / kind: uniform, top-level, merge, */
       //! p_end_linear_vgpr %lv
    
       finish_setup_reduce_temp_test();
    END_TEST