https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98069

--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> ---
The following helps:

diff --git a/gcc/tree-data-ref.c b/gcc/tree-data-ref.c
index 3bf460cccfd..a7606b3db99 100644
--- a/gcc/tree-data-ref.c
+++ b/gcc/tree-data-ref.c
@@ -754,9 +759,10 @@ split_constant_offset_1 (tree type, tree op0, enum
tree_code code, tree op1,
            && TYPE_PRECISION (type) >= TYPE_PRECISION (itype)
            && (POINTER_TYPE_P (type) || INTEGRAL_TYPE_P (type)))
          {
-           if (INTEGRAL_TYPE_P (itype) && TYPE_OVERFLOW_WRAPS (itype)
+           if (INTEGRAL_TYPE_P (itype)
                && (TYPE_PRECISION (type) > TYPE_PRECISION (itype)
-                   || TYPE_UNSIGNED (itype) != TYPE_UNSIGNED (type)))
+                   || (TYPE_UNSIGNED (itype) != TYPE_UNSIGNED (type)
+                       && TYPE_OVERFLOW_WRAPS (itype))))
              {
                /* Split the unconverted operand and try to prove that
                   wrapping isn't a problem.  */

but I fear this will have quite some negative impact on dependence analysis.

I'm still not sure I have the issue nailed down properly :/

Reply via email to