nir: remove nir_op_unpack_64 handling from nir_opt_undef
authorMarek Olšák <marek.olsak@amd.com>
Sat, 8 Jul 2023 23:33:31 +0000 (19:33 -0400)
committerMarge Bot <emma+marge@anholt.net>
Wed, 6 Sep 2023 03:24:16 +0000 (03:24 +0000)
It's no longer needed because undef is replaced with 0 in this case.

It also has a bug that it doesn't freeze the undef value if undef has
multiple uses.

Reviewed-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Reviewed-by: Faith Ekstrand <faith.ekstrand@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24059>

src/compiler/nir/nir_opt_undef.c

index 461f6cc..0f227b0 100644 (file)
@@ -154,27 +154,6 @@ opt_undef_store(nir_intrinsic_instr *intrin)
    return true;
 }
 
-static bool
-opt_undef_pack(nir_builder *b, nir_alu_instr *alu)
-{
-   switch (alu->op) {
-   case nir_op_unpack_64_2x32_split_x:
-   case nir_op_unpack_64_2x32_split_y:
-   case nir_op_unpack_64_2x32:
-      if (nir_src_is_undef(alu->src[0].src))
-         break;
-      return false;
-   default:
-      return false;
-   }
-   unsigned num_components = alu->def.num_components;
-   b->cursor = nir_before_instr(&alu->instr);
-   nir_def *def = nir_undef(b, num_components, 32);
-   nir_def_rewrite_uses_after(&alu->def, def, &alu->instr);
-   nir_instr_remove(&alu->instr);
-   return true;
-}
-
 struct visit_info {
    bool replace_undef_with_constant;
    bool prefer_nan;
@@ -297,8 +276,7 @@ nir_opt_undef_instr(nir_builder *b, nir_instr *instr, void *data)
    } else if (instr->type == nir_instr_type_alu) {
       nir_alu_instr *alu = nir_instr_as_alu(instr);
       return opt_undef_csel(b, alu) ||
-             opt_undef_vecN(b, alu) ||
-             opt_undef_pack(b, alu);
+             opt_undef_vecN(b, alu);
    } else if (instr->type == nir_instr_type_intrinsic) {
       nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr);
       return opt_undef_store(intrin);