From: Jason Ekstrand Date: Sat, 10 Mar 2018 18:08:22 +0000 (-0800) Subject: ac/nir: Use lower_vote_eq_to_ballot instead of ac_nir_lower_subgroups X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=85000b812d34639b2afeaf3d2eed67b17dcdbc26;p=mesa.git ac/nir: Use lower_vote_eq_to_ballot instead of ac_nir_lower_subgroups Reviewed-by: Bas Nieuwenhuizen --- diff --git a/src/amd/Makefile.sources b/src/amd/Makefile.sources index aee3393b158..41334cb9818 100644 --- a/src/amd/Makefile.sources +++ b/src/amd/Makefile.sources @@ -44,7 +44,6 @@ AMD_COMPILER_FILES = \ common/ac_llvm_helper.cpp \ common/ac_llvm_util.c \ common/ac_llvm_util.h \ - common/ac_lower_subgroups.c \ common/ac_shader_abi.h \ common/ac_shader_util.c \ common/ac_shader_util.h diff --git a/src/amd/common/ac_lower_subgroups.c b/src/amd/common/ac_lower_subgroups.c deleted file mode 100644 index d0782b481b7..00000000000 --- a/src/amd/common/ac_lower_subgroups.c +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright © 2018 Google Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "nir/nir.h" -#include "nir/nir_builder.h" - -#include "ac_nir_to_llvm.h" - -static nir_ssa_def *ac_lower_subgroups_intrin(nir_builder *b, nir_intrinsic_instr *intrin) -{ - switch(intrin->intrinsic) { - case nir_intrinsic_vote_ieq: - case nir_intrinsic_vote_feq: { - nir_intrinsic_instr *rfi = - nir_intrinsic_instr_create(b->shader, nir_intrinsic_read_first_invocation); - nir_ssa_dest_init(&rfi->instr, &rfi->dest, - 1, intrin->src[0].ssa->bit_size, NULL); - nir_src_copy(&rfi->src[0], &intrin->src[0], rfi); - rfi->num_components = 1; - - nir_ssa_def *is_ne; - if (intrin->intrinsic == nir_intrinsic_vote_feq) - is_ne = nir_fne(b, &rfi->dest.ssa, intrin->src[0].ssa); - else - is_ne = nir_ine(b, &rfi->dest.ssa, intrin->src[0].ssa); - - nir_intrinsic_instr *ballot = - nir_intrinsic_instr_create(b->shader, nir_intrinsic_ballot); - nir_ssa_dest_init(&ballot->instr, &ballot->dest, - 1, 64, NULL); - ballot->src[0] = nir_src_for_ssa(is_ne); - ballot->num_components = 1; - - return nir_ieq(b, &ballot->dest.ssa, nir_imm_int64(b, 0)); - } - default: - return NULL; - } -} - -bool ac_lower_subgroups(struct nir_shader *shader) -{ - bool progress = false; - - nir_foreach_function(function, shader) { - if (!function->impl) - continue; - - nir_builder b; - nir_builder_init(&b, function->impl); - - nir_foreach_block(block, function->impl) { - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - b.cursor = nir_before_instr(instr); - - nir_ssa_def *lower = ac_lower_subgroups_intrin(&b, intrin); - if (!lower) - continue; - - nir_ssa_def_rewrite_uses(&intrin->dest.ssa, nir_src_for_ssa(lower)); - nir_instr_remove(instr); - progress = true; - } - } - } - - return progress; -} diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c index 5d701cb0112..ade042d3d98 100644 --- a/src/amd/common/ac_nir_to_llvm.c +++ b/src/amd/common/ac_nir_to_llvm.c @@ -3812,9 +3812,6 @@ void ac_nir_translate(struct ac_llvm_context *ac, struct ac_shader_abi *abi, struct ac_nir_context ctx = {}; struct nir_function *func; - /* Last minute passes for both radv & radeonsi */ - ac_lower_subgroups(nir); - ctx.ac = *ac; ctx.abi = abi; diff --git a/src/amd/common/ac_nir_to_llvm.h b/src/amd/common/ac_nir_to_llvm.h index ca1da33ca5e..778bd7544fc 100644 --- a/src/amd/common/ac_nir_to_llvm.h +++ b/src/amd/common/ac_nir_to_llvm.h @@ -59,6 +59,4 @@ ac_handle_shader_output_decl(struct ac_llvm_context *ctx, void ac_emit_barrier(struct ac_llvm_context *ac, gl_shader_stage stage); -bool ac_lower_subgroups(struct nir_shader *shader); - #endif /* AC_NIR_TO_LLVM_H */ diff --git a/src/amd/common/meson.build b/src/amd/common/meson.build index 01db536c06e..0967b1adb76 100644 --- a/src/amd/common/meson.build +++ b/src/amd/common/meson.build @@ -35,7 +35,6 @@ amd_common_files = files( 'ac_llvm_helper.cpp', 'ac_llvm_util.c', 'ac_llvm_util.h', - 'ac_lower_subgroups.c', 'ac_shader_abi.h', 'ac_shader_util.c', 'ac_shader_util.h', diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c b/src/gallium/drivers/radeonsi/si_shader_nir.c index e5377358dc1..acb796b331c 100644 --- a/src/gallium/drivers/radeonsi/si_shader_nir.c +++ b/src/gallium/drivers/radeonsi/si_shader_nir.c @@ -670,6 +670,7 @@ si_lower_nir(struct si_shader_selector* sel) .lower_to_scalar = true, .lower_subgroup_masks = true, .lower_vote_trivial = false, + .lower_vote_eq_to_ballot = true, }; NIR_PASS_V(sel->nir, nir_lower_subgroups, &subgroups_options);