From: Bill Schmidt Date: Tue, 25 Jul 2017 19:44:10 +0000 (+0000) Subject: backport: re PR tree-optimization/81162 (UBSAN switch triggers incorrect optimization... X-Git-Tag: releases/gcc-5.5.0~143 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=803bdb10605c0ca118d2dc727ece1903c7aae52c;p=thirdparty%2Fgcc.git backport: re PR tree-optimization/81162 (UBSAN switch triggers incorrect optimization in SLSR) [gcc] 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. [gcc/testsuite] 2016-07-25 Bill Schmidt Backport from mainline 2016-07-14 Bill Schmidt PR tree-optimization/81162 * gcc.dg/ubsan/pr81162.c: New file. From-SVN: r250544 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2ace2023444d..3179d342b31c 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-24 Uros Bizjak PR target/80569 diff --git a/gcc/gimple-ssa-strength-reduction.c b/gcc/gimple-ssa-strength-reduction.c index 4c4610e28d01..77c5a0508845 100644 --- a/gcc/gimple-ssa-strength-reduction.c +++ b/gcc/gimple-ssa-strength-reduction.c @@ -2048,13 +2048,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 != MODIFY_EXPR && !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 ba0c3fe3ce46..26a84ab89cb2 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-24 Uros Bizjak PR target/80569 diff --git a/gcc/testsuite/gcc.dg/ubsan/pr81162.c b/gcc/testsuite/gcc.dg/ubsan/pr81162.c new file mode 100644 index 000000000000..9ce98afa367d --- /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; + } +}