tree-ssa-pre.c (print_pre_expr): Handle NULL expr.
authorRichard Biener <rguenther@suse.de>
Tue, 1 Aug 2017 10:47:14 +0000 (10:47 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 1 Aug 2017 10:47:14 +0000 (10:47 +0000)
2017-08-01  Richard Biener  <rguenther@suse.de>

* tree-ssa-pre.c (print_pre_expr): Handle NULL expr.
(compute_antic): Seed worklist with exit block predecessors.
* cfganal.c (dfs_find_deadend): For a cycle return the source
of the edge closing it.

* gcc.dg/tree-ssa/ssa-dce-3.c: Adjust.
* gcc.dg/tree-ssa/split-path-5.c: Remove case with just dead
endless loop.
* gcc.dg/uninit-23.c: Adjust.

From-SVN: r250767

gcc/ChangeLog
gcc/cfganal.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/tree-ssa/split-path-5.c
gcc/testsuite/gcc.dg/tree-ssa/ssa-dce-3.c
gcc/testsuite/gcc.dg/uninit-23.c
gcc/tree-ssa-pre.c

index aba255029a3d1baf6fecabf3240135c1961d0eb1..f48f0cc237966da0672591f881ca5dfc8505e4e5 100644 (file)
@@ -1,3 +1,10 @@
+2017-08-01  Richard Biener  <rguenther@suse.de>
+
+       * tree-ssa-pre.c (print_pre_expr): Handle NULL expr.
+       (compute_antic): Seed worklist with exit block predecessors.
+       * cfganal.c (dfs_find_deadend): For a cycle return the source
+       of the edge closing it.
+
 2017-08-01  Tamar Christina  <tamar.christina@arm.com>
 
        * config/aarch64/aarch64.c
index 792ea62cc56e411105a49c26cd2c23dc28893917..394d986c945a3d02ce8a8769859ce2ccba2c8fcb 100644 (file)
@@ -737,23 +737,24 @@ post_order_compute (int *post_order, bool include_entry_exit,
 basic_block
 dfs_find_deadend (basic_block bb)
 {
-  bitmap visited = BITMAP_ALLOC (NULL);
+  auto_bitmap visited;
+  basic_block next = bb;
 
   for (;;)
     {
-      if (EDGE_COUNT (bb->succs) == 0
-         || ! bitmap_set_bit (visited, bb->index))
-        {
-          BITMAP_FREE (visited);
-          return bb;
-        }
+      if (EDGE_COUNT (next->succs) == 0)
+       return next;
+
+      if (! bitmap_set_bit (visited, next->index))
+       return bb;
 
+      bb = next;
       /* If we are in an analyzed cycle make sure to try exiting it.
          Note this is a heuristic only and expected to work when loop
         fixup is needed as well.  */
       if (! bb->loop_father
          || ! loop_outer (bb->loop_father))
-       bb = EDGE_SUCC (bb, 0)->dest;
+       next = EDGE_SUCC (bb, 0)->dest;
       else
        {
          edge_iterator ei;
@@ -761,7 +762,7 @@ dfs_find_deadend (basic_block bb)
          FOR_EACH_EDGE (e, ei, bb->succs)
            if (loop_exit_edge_p (bb->loop_father, e))
              break;
-         bb = e ? e->dest : EDGE_SUCC (bb, 0)->dest;
+         next = e ? e->dest : EDGE_SUCC (bb, 0)->dest;
        }
     }
 
index 02df696860c1d50bcabca245a1fe03d0048a7f37..c901efbcef12bcd3f5f878b8a23ae5c7cd9429c2 100644 (file)
@@ -1,3 +1,10 @@
+2017-08-01  Richard Biener  <rguenther@suse.de>
+
+       * gcc.dg/tree-ssa/ssa-dce-3.c: Adjust.
+       * gcc.dg/tree-ssa/split-path-5.c: Remove case with just dead
+       endless loop.
+       * gcc.dg/uninit-23.c: Adjust.
+
 2017-08-01  Bin Cheng  <bin.cheng@arm.com>
 
        * gcc.dg/no-strict-overflow-7.c: Revise comment and test string.
index 5044c7301a1c2d3a35c98fdac65113feae51807f..95aabdaf6be645c012457d1d04c732ce0ba11cda 100644 (file)
@@ -41,20 +41,4 @@ bmhi_init (const char *pattern)
     }
 }
 
-char *
-bmhi_search (const char *string, const int stringlen)
-{
-  int i, j;
-  char *s;
-  for (;;)
-    {
-      while (--j >= 0 && (
-                          {
-                          __typeof__ (s[j]) __x = (s[j]);
-                          ((((__ctype_ptr__ +
-                              sizeof (""[__x]))[(int) (__x)]) &
-                            (01 | 02)) ==
-                           02) ? (int) __x - 'a' +
-                          'A' : (int) __x;}) == pat[j]);
-}}
-/* { dg-final { scan-tree-dump-times "Duplicating join block" 2 "split-paths" } } */
+/* { dg-final { scan-tree-dump-times "Duplicating join block" 1 "split-paths" } } */
index 64b30ca1eb3f3d1400c2ca7a5033113f11916bf2..863aa79b4eb1cd74a7e9755089e27e84bcf54bd4 100644 (file)
@@ -26,9 +26,6 @@ int main(void)
    by marking the j % 7 condition as useful.  See PR45178.  */
 
 /* We should eliminate the inner condition, but the loop must be preserved
-   as it is infinite.  Therefore there should be just one phi node (for i):  */
-/* { dg-final { scan-tree-dump-times "PHI " 1 "cddce1" { xfail *-*-* } } } */
-
-/* And one if (for the exit condition of the loop):  */
-/* { dg-final { scan-tree-dump-times "if " 1 "cddce1" } } */
-
+   as it is infinite.  Therefore there should be just one goto and no PHI.  */
+/* { dg-final { scan-tree-dump-times "PHI " 0 "cddce1" } } */
+/* { dg-final { scan-tree-dump-times "goto" 1 "cddce1" } } */
index b38e1d08eabd00ac121d9156608307bf88e222f3..d64eb7d2ee9c893e80aaa112c0adbf61a68c392d 100644 (file)
@@ -15,10 +15,10 @@ ql (void)
       for (;;)
       {
         int *go;
-        int *t4 = go;
+        int *t4 = go; /* { dg-warning "is used uninitialized" } */
 
  l1:
-        *t4 = (*t4 != 0) ? 0 : 2; /* { dg-warning "may be used uninitialized" } */
+        *t4 = (*t4 != 0) ? 0 : 2;
       }
 
     if (ij != 0)
index 0ec3d3c7f7e0b80c3bd706134f2e09df2fe73844..eaadaad5db3554d33000afccdd15e653e743e89d 100644 (file)
@@ -837,7 +837,7 @@ bitmap_set_and (bitmap_set_t dest, bitmap_set_t orig)
     }
 }
 
-/* Subtract all values and expressions contained in ORIG from DEST.  */
+/* Subtract all expressions contained in ORIG from DEST.  */
 
 static bitmap_set_t
 bitmap_set_subtract (bitmap_set_t dest, bitmap_set_t orig)
@@ -859,7 +859,7 @@ bitmap_set_subtract (bitmap_set_t dest, bitmap_set_t orig)
   return result;
 }
 
-/* Subtract all the values in bitmap set B from bitmap set A.  */
+/* Subtract all values in bitmap set B from bitmap set A.  */
 
 static void
 bitmap_set_subtract_values (bitmap_set_t a, bitmap_set_t b)
@@ -987,6 +987,11 @@ bitmap_value_insert_into_set (bitmap_set_t set, pre_expr expr)
 static void
 print_pre_expr (FILE *outfile, const pre_expr expr)
 {
+  if (! expr)
+    {
+      fprintf (outfile, "NULL");
+      return;
+    }
   switch (expr->kind)
     {
     case CONSTANT:
@@ -2418,7 +2423,9 @@ compute_antic (void)
   inverted_post_order_compute (&postorder);
 
   auto_sbitmap worklist (last_basic_block_for_fn (cfun) + 1);
-  bitmap_ones (worklist);
+  bitmap_clear (worklist);
+  FOR_EACH_EDGE (e, ei, EXIT_BLOCK_PTR_FOR_FN (cfun)->preds)
+    bitmap_set_bit (worklist, e->src->index);
   while (changed)
     {
       if (dump_file && (dump_flags & TDF_DETAILS))