diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 98f3038154d..b25a64343ee 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2016-07-25 Bill Schmidt + + Backport from mainline + 2016-07-14 Bill Schmidt + + PR tree-optimization/81162 + * gimple-ssa-strength-reduction.c (replace_mult_candidate): Don't + replace a negate with an add. + 2017-07-25 Georg-Johann Lay Backport from 2017-07-12 trunk r250151. diff --git a/gcc/gimple-ssa-strength-reduction.c b/gcc/gimple-ssa-strength-reduction.c index 92d32f117f3..eed1dba5f86 100644 --- a/gcc/gimple-ssa-strength-reduction.c +++ b/gcc/gimple-ssa-strength-reduction.c @@ -2051,13 +2051,14 @@ replace_mult_candidate (slsr_cand_t c, tree basis_name, widest_int bump) types but allows for safe negation without twisted logic. */ if (wi::fits_shwi_p (bump) && bump.to_shwi () != HOST_WIDE_INT_MIN - /* It is not useful to replace casts, copies, or adds of + /* It is not useful to replace casts, copies, negates, or adds of an SSA name and a constant. */ && cand_code != SSA_NAME && !CONVERT_EXPR_CODE_P (cand_code) && cand_code != PLUS_EXPR && cand_code != POINTER_PLUS_EXPR - && cand_code != MINUS_EXPR) + && cand_code != MINUS_EXPR + && cand_code != NEGATE_EXPR) { enum tree_code code = PLUS_EXPR; tree bump_tree; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ee6948cf943..6d1608bfe3d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2016-07-25 Bill Schmidt + + Backport from mainline + 2016-07-14 Bill Schmidt + + PR tree-optimization/81162 + * gcc.dg/ubsan/pr81162.c: New file. + 2017-07-25 Wilco Dijkstra PR target/79041 diff --git a/gcc/testsuite/gcc.dg/ubsan/pr81162.c b/gcc/testsuite/gcc.dg/ubsan/pr81162.c new file mode 100644 index 00000000000..9ce98afa367 --- /dev/null +++ b/gcc/testsuite/gcc.dg/ubsan/pr81162.c @@ -0,0 +1,17 @@ +/* PR tree-optimization/81162 */ +/* { dg-do run } */ +/* { dg-options "-fsanitize=undefined -O2" } */ + +short s; +int i1 = 1; +int i2 = 1; +unsigned char uc = 147; + +int main() { + s = (-uc + 2147483647) << 0; + if (9031239389974324562ULL >= (-((i1 && i2) + uc) ^ -21096) ) { + return 0; + } else { + return -1; + } +}