]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
graphite-scop-detection.c (make_close_phi_nodes_unique): New forward declaration.
authorBill Schmidt <wschmidt@linux.vnet.ibm.com>
Thu, 29 Sep 2011 14:06:31 +0000 (14:06 +0000)
committerWilliam Schmidt <wschmidt@gcc.gnu.org>
Thu, 29 Sep 2011 14:06:31 +0000 (14:06 +0000)
2011-09-29  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>

* graphite-scop-detection.c (make_close_phi_nodes_unique):  New
forward declaration.
(remove_duplicate_close_phi): Detect and repair creation of
duplicate close-phis for a containing loop.

From-SVN: r179351

gcc/ChangeLog
gcc/graphite-scop-detection.c

index 465ce0d03b0fea26fe48c13caf5449a50ebaf0c4..71f9b59a2a755ada70510d4a18eecc72c0e8e9eb 100644 (file)
@@ -1,3 +1,10 @@
+2011-09-29  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       * graphite-scop-detection.c (make_close_phi_nodes_unique):  New
+       forward declaration.
+       (remove_duplicate_close_phi): Detect and repair creation of
+       duplicate close-phis for a containing loop.
+       
 2011-09-27   Andi Kleen <ak@linux.intel.com>
 
        * gcc.c (get_local_tick). Rename to get_random_number.
index 346056899d31466379f89ed213ea49de898ec9b9..e8370ef4e5a191875e00d0cc9c40d0750623c1ca 100644 (file)
@@ -36,6 +36,9 @@ along with GCC; see the file COPYING3.  If not see
 #include "graphite-poly.h"
 #include "graphite-scop-detection.h"
 
+/* Forward declarations.  */
+static void make_close_phi_nodes_unique (basic_block);
+
 /* The type of the analyzed basic block.  */
 
 typedef enum gbb_type {
@@ -1231,6 +1234,13 @@ remove_duplicate_close_phi (gimple phi, gimple_stmt_iterator *gsi)
        SET_USE (use_p, res);
 
       update_stmt (use_stmt);
+      
+      /* It is possible that we just created a duplicate close-phi
+        for an already-processed containing loop.  Check for this
+        case and clean it up.  */
+      if (gimple_code (use_stmt) == GIMPLE_PHI
+         && gimple_phi_num_args (use_stmt) == 1)
+       make_close_phi_nodes_unique (gimple_bb (use_stmt));
     }
 
   remove_phi_node (gsi, true);