From: Bill Schmidt Date: Fri, 14 Jul 2017 18:06:45 +0000 (+0000) Subject: re PR tree-optimization/81162 (UBSAN switch triggers incorrect optimization in SLSR) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3b80566699a6474e82a630652bf85cf872128b6d;p=gcc.git re PR tree-optimization/81162 (UBSAN switch triggers incorrect optimization in SLSR) [gcc] 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-14 Bill Schmidt PR tree-optimization/81162 * gcc.dg/pr81162.c: New file. From-SVN: r250212 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3c8effb88de..fe1d9e93755 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +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-14 James Greenhalgh * doc/invoke.texi (arm/-mcpu): Document +crypto. diff --git a/gcc/gimple-ssa-strength-reduction.c b/gcc/gimple-ssa-strength-reduction.c index dc2cb469d6c..00c30444700 100644 --- a/gcc/gimple-ssa-strength-reduction.c +++ b/gcc/gimple-ssa-strength-reduction.c @@ -2082,13 +2082,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 aa4fb1de293..073a8e5d62f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-07-14 Bill Schmidt + + PR tree-optimization/81162 + * gcc.dg/pr81162.c: New file. + 2017-07-14 Martin Sebor * gcc.dg/tree-ssa/ssa-dse-30.c: Correct test to look for memmove diff --git a/gcc/testsuite/gcc.dg/pr81162.c b/gcc/testsuite/gcc.dg/pr81162.c new file mode 100644 index 00000000000..9ce98afa367 --- /dev/null +++ b/gcc/testsuite/gcc.dg/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; + } +}