]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR tree-optimization/81162 (UBSAN switch triggers incorrect optimization...
authorBill Schmidt <wschmidt@linux.vnet.ibm.com>
Tue, 25 Jul 2017 19:44:10 +0000 (19:44 +0000)
committerWilliam Schmidt <wschmidt@gcc.gnu.org>
Tue, 25 Jul 2017 19:44:10 +0000 (19:44 +0000)
[gcc]

2016-07-25  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>

Backport from mainline
2016-07-14  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>

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  <wschmidt@linux.vnet.ibm.com>

Backport from mainline
2016-07-14  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>

PR tree-optimization/81162
* gcc.dg/ubsan/pr81162.c: New file.

From-SVN: r250544

gcc/ChangeLog
gcc/gimple-ssa-strength-reduction.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/ubsan/pr81162.c [new file with mode: 0644]

index 2ace2023444df163802700a8de4198efd119523a..3179d342b31c9989f9718a8ff5d233019a57666b 100644 (file)
@@ -1,3 +1,12 @@
+2016-07-25  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       Backport from mainline
+       2016-07-14  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       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  <ubizjak@gmail.com>
 
        PR target/80569
index 4c4610e28d014154a7422f1aeb54b59759bdcc21..77c5a05088453ae0c18e342889085503d0e92455 100644 (file)
@@ -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;
index ba0c3fe3ce460aad70fa68b83a6bd9b523542d1f..26a84ab89cb2fc5471d1b120cc1a313eace090fa 100644 (file)
@@ -1,3 +1,11 @@
+2016-07-25  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       Backport from mainline
+       2016-07-14  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       PR tree-optimization/81162
+       * gcc.dg/ubsan/pr81162.c: New file.
+
 2017-07-24  Uros Bizjak  <ubizjak@gmail.com>
 
        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 (file)
index 0000000..9ce98af
--- /dev/null
@@ -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;
+  }
+}