aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Law <law@redhat.com>2013-05-03 10:35:04 -0600
committerJeff Law <law@gcc.gnu.org>2013-05-03 10:35:04 -0600
commita4ee7cb9bfdf444a1bd5d6f3931b6bb3d286b805 (patch)
tree7cfbfff1d49a5ddd719a789fcc708a20ad8f75af
parent47954c4e773ef399e269f0660a74369b3fb95f93 (diff)
downloadgcc-a4ee7cb9bfdf444a1bd5d6f3931b6bb3d286b805.zip
gcc-a4ee7cb9bfdf444a1bd5d6f3931b6bb3d286b805.tar.gz
gcc-a4ee7cb9bfdf444a1bd5d6f3931b6bb3d286b805.tar.bz2
re PR tree-optimization/57411 (ICE: verify_ssa failed: definition in block 4 does not dominate use in block 11 with -fno-tree-dce -ftree-vectorize)
PR tree-optimization/57411 * tree-vrp.c (simplify_cond_using_ranges): Verify the constant operand of the condition will bit into the new type when eliminating a cast feeding a condition. PR tree-optimization/57411 * gcc.c-torture/execute/pr57144.c: New test. From-SVN: r198582
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr57144.c19
-rw-r--r--gcc/tree-vrp.c3
4 files changed, 33 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4bd0ea7..5d16636 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2013-05-03 Jeff Law <law@redhat.com>
+
+ PR tree-optimization/57411
+ * tree-vrp.c (simplify_cond_using_ranges): Verify the constant
+ operand of the condition will bit into the new type when eliminating
+ a cast feeding a condition.
+
2013-05-03 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/57130
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 25a131c..1322477 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2013-05-02 Jeff Law <law@redhat.com>
+
+ PR tree-optimization/57411
+ * gcc.c-torture/execute/pr57144.c: New test.
+
2013-05-03 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/57130
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr57144.c b/gcc/testsuite/gcc.c-torture/execute/pr57144.c
new file mode 100644
index 0000000..ffa2df4
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr57144.c
@@ -0,0 +1,19 @@
+extern void abort (void);
+extern void exit (int);
+
+void __attribute__ ((noinline))
+foo(int a)
+{
+ int z = a > 0 ? a : -a;
+ long long x = z;
+ if (x > 0x100000000LL)
+ abort ();
+ else
+ exit (0);
+}
+
+int
+main()
+{
+ foo (1);
+}
diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c
index 6ed353f..b5de683 100644
--- a/gcc/tree-vrp.c
+++ b/gcc/tree-vrp.c
@@ -8668,7 +8668,8 @@ simplify_cond_using_ranges (gimple stmt)
if (range_int_cst_p (vr)
&& range_fits_type_p (vr,
TYPE_PRECISION (TREE_TYPE (op0)),
- TYPE_UNSIGNED (TREE_TYPE (op0))))
+ TYPE_UNSIGNED (TREE_TYPE (op0)))
+ && int_fits_type_p (op1, TREE_TYPE (innerop)))
{
tree newconst = fold_convert (TREE_TYPE (innerop), op1);
gimple_cond_set_lhs (stmt, innerop);