This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug target/70333] [5/6 Regression] Test miscompiled with -O0.


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

--- Comment #6 from Richard Biener <rguenth at gcc dot gnu.org> ---
Testing the following - 4.9 performed a wide unsigned multiplication

@@ -6376,18 +6376,17 @@ extract_muldiv_1 (tree t, tree c, enum t
          bool overflow_p = false;
          bool overflow_mul_p;
          signop sign = TYPE_SIGN (ctype);
-         wide_int mul = wi::mul (op1, c, sign, &overflow_mul_p);
+         unsigned prec = TYPE_PRECISION (ctype);
+         wide_int mul = wi::mul (wide_int::from (op1, prec, sign),
+                                 wide_int::from (c, prec, sign),
+                                 UNSIGNED, &overflow_mul_p);
          overflow_p = TREE_OVERFLOW (c) | TREE_OVERFLOW (op1);
          if (overflow_mul_p
              && ((sign == UNSIGNED && tcode != MULT_EXPR) || sign == SIGNED))
            overflow_p = true;
          if (!overflow_p)
-           {
-             mul = wide_int::from (mul, TYPE_PRECISION (ctype),
-                                   TYPE_SIGN (TREE_TYPE (op1)));
-             return fold_build2 (tcode, ctype, fold_convert (ctype, op0),
-                                 wide_int_to_tree (ctype, mul));
-           }
+           return fold_build2 (tcode, ctype, fold_convert (ctype, op0),
+                               wide_int_to_tree (ctype, mul));
        }

       /* If these operations "cancel" each other, we have the main

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]