From: Richard Henderson Date: Fri, 14 Apr 2000 17:45:17 +0000 (-0700) Subject: fold-const.c (extract_muldiv): Don't distribute and widen multiply across plus for... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=23cdce68cfdbf75b2a7fc60ccf17477260db9f68;p=gcc.git fold-const.c (extract_muldiv): Don't distribute and widen multiply across plus for non-sizetype unsigned types. * fold-const.c (extract_muldiv): Don't distribute and widen multiply across plus for non-sizetype unsigned types. From-SVN: r33151 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4465c292dfc..29c1d1f22c8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2000-04-14 Richard Henderson + + * fold-const.c (extract_muldiv): Don't distribute and widen + multiply across plus for non-sizetype unsigned types. + 2000-04-14 Richard Henderson * flow.c (find_auto_inc): Don't autoinc eliminable registers. diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 19b2f703201..991dddda973 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -4480,6 +4480,14 @@ extract_muldiv (t, c, code, wide_type) if (op1 == 0 || TREE_OVERFLOW (op1)) break; + /* If we have an unsigned type is not a sizetype, we cannot widen + the operation since it will change the result if the original + computation overflowed. */ + if (TREE_UNSIGNED (ctype) + && ! TYPE_IS_SIZETYPE (ctype) + && ctype != type) + break; + /* If we were able to eliminate our operation from the first side, apply our operation to the second side and reform the PLUS. */ if (t1 != 0 && (TREE_CODE (t1) != code || code == MULT_EXPR))