re PR tree-optimization/78721 (ICE on valid code at -O2 and -O3 on x86_64-linux-gnu...
authorKugan Vivekanandarajah <kuganv@linaro.org>
Fri, 9 Dec 2016 19:47:10 +0000 (19:47 +0000)
committerKugan Vivekanandarajah <kugan@gcc.gnu.org>
Fri, 9 Dec 2016 19:47:10 +0000 (19:47 +0000)
gcc/testsuite/ChangeLog:

2016-12-09  Kugan Vivekanandarajah  <kuganv@linaro.org>

PR ipa/78721
* gcc.dg/pr78721.c: New test.

gcc/ChangeLog:

2016-12-09  Kugan Vivekanandarajah  <kuganv@linaro.org>

PR ipa/78721
* ipa-cp.c (propagate_vr_accross_jump_function): drop_tree_overflow
after fold_convert.

From-SVN: r243501

gcc/ChangeLog
gcc/ipa-cp.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr78721.c [new file with mode: 0644]

index b36a14c4b6e6bfbe17a29c763dbb280570ad9ad1..eedb11b12016f804faa8f1accfcba01692bb2e36 100644 (file)
@@ -1,3 +1,9 @@
+2016-12-09  Kugan Vivekanandarajah  <kuganv@linaro.org>
+
+       PR ipa/78721
+       * ipa-cp.c (propagate_vr_accross_jump_function): drop_tree_overflow
+       after fold_convert.
+
 2016-12-09  Jakub Jelinek  <jakub@redhat.com>
 
        PR target/72742
index 2ec671ffff6b3c2cef62957608d275100a5977d3..4ec7cc5dfeb45addf084209942e44db9ae4ddd6e 100644 (file)
@@ -1895,9 +1895,9 @@ propagate_vr_accross_jump_function (cgraph_edge *cs,
       tree val = ipa_get_jf_constant (jfunc);
       if (TREE_CODE (val) == INTEGER_CST)
        {
+         val = fold_convert (param_type, val);
          if (TREE_OVERFLOW_P (val))
            val = drop_tree_overflow (val);
-         val = fold_convert (param_type, val);
          jfunc->vr_known = true;
          jfunc->m_vr.type = VR_RANGE;
          jfunc->m_vr.min = val;
index ac7abfd357b665244718a150cd6d7b4b09e53072..db4765bfad7c0bd9663cfeee8ff7654205058926 100644 (file)
@@ -1,3 +1,8 @@
+2016-12-09  Kugan Vivekanandarajah  <kuganv@linaro.org>
+
+       PR ipa/78721
+       * gcc.dg/pr78721.c: New test.
+
 2016-12-09  Jakub Jelinek  <jakub@redhat.com>
 
        PR target/72742
diff --git a/gcc/testsuite/gcc.dg/pr78721.c b/gcc/testsuite/gcc.dg/pr78721.c
new file mode 100644 (file)
index 0000000..fb2ffc3
--- /dev/null
@@ -0,0 +1,23 @@
+/* { dg-do run } */
+/* { dg-options "-O2" } */
+
+int a, b, c;
+
+int fn1 (char e, char f)
+{
+  return !f || (e && f == 1);
+}
+
+void fn2 (char e)
+{
+  while (b)
+    e = 0;
+  a = 128;
+  c = fn1 (e, a == e);
+}
+
+int main ()
+{
+  fn2 (0);
+  return 0;
+}