nir/lower_io: don't reduce range if parent length is zero

When handling arrays, range is increased based on the array size minus
one. But if such is zero, it has the effect of reducing the
range. Handle that case by returning the unknown range value.

v2:
  * Add missing braces.
  * Return unknown range in this case, instead of keeping the initial
    range.
v3: Simplify code, using existing "fail" label. (Jason)

Fixes the following using v3dv:
  dEQP-VK.graphicsfuzz.cov-simplify-clamp-max-itself

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Eric Anholt <eric@anholt.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6737>
diff --git a/src/compiler/nir/nir_lower_io.c b/src/compiler/nir/nir_lower_io.c
index 52c22ad..986c4c0 100644
--- a/src/compiler/nir/nir_lower_io.c
+++ b/src/compiler/nir/nir_lower_io.c
@@ -982,10 +982,13 @@
             goto fail;
 
          if (deref->deref_type != nir_deref_type_array_wildcard &&
-             nir_src_is_const(deref->arr.index))
+             nir_src_is_const(deref->arr.index)) {
             base += stride * nir_src_as_uint(deref->arr.index);
-         else
+         } else {
+            if (glsl_get_length(parent->type) == 0)
+               goto fail;
             range += stride * (glsl_get_length(parent->type) - 1);
+         }
          break;
       }