aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/20190228-1.c16
-rw-r--r--gcc/tree-ssa-dom.c2
4 files changed, 27 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3ee6370..4c57ead 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2019-02-28 Eric Botcazou <ebotcazou@adacore.com>
+
+ PR tree-optimization/89536
+ * tree-ssa-dom.c (edge_info::derive_equivalences) <BIT_NOT_EXPR>: Test
+ only whether bit #0 of the value is 0 instead of the entire value.
+
2019-02-28 Marek Polacek <polacek@redhat.com>
PR c++/87068 - missing diagnostic with fallthrough statement.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 423591d..cf4f06e 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2019-02-28 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gcc.c-torture/execute/20190228-1.c: New test.
+
2019-02-28 Marek Polacek <polacek@redhat.com>
PR c++/87068 - missing diagnostic with fallthrough statement.
diff --git a/gcc/testsuite/gcc.c-torture/execute/20190228-1.c b/gcc/testsuite/gcc.c-torture/execute/20190228-1.c
new file mode 100644
index 0000000..e71f33a
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/20190228-1.c
@@ -0,0 +1,16 @@
+/* PR tree-optimization/89536 */
+/* Testcase by Zhendong Su <su@cs.ucdavis.edu> */
+
+int a = 1;
+
+int main (void)
+{
+ a = ~(a && 1);
+ if (a < -1)
+ a = ~a;
+
+ if (!a)
+ __builtin_abort ();
+
+ return 0;
+}
diff --git a/gcc/tree-ssa-dom.c b/gcc/tree-ssa-dom.c
index 4f4b7db..aa4e24b 100644
--- a/gcc/tree-ssa-dom.c
+++ b/gcc/tree-ssa-dom.c
@@ -348,7 +348,7 @@ edge_info::derive_equivalences (tree name, tree value, int recursion_limit)
&& TREE_CODE (rhs) == SSA_NAME
&& ssa_name_has_boolean_range (rhs))
{
- if (integer_zerop (value))
+ if ((TREE_INT_CST_LOW (value) & 1) == 0)
res = build_one_cst (TREE_TYPE (rhs));
else
res = build_zero_cst (TREE_TYPE (rhs));