]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gimple-loop-interchange.cc (is-a.h): New header file.
authorBin Cheng <amker@gcc.gnu.org>
Fri, 1 Dec 2017 14:33:03 +0000 (14:33 +0000)
committerBin Cheng <amker@gcc.gnu.org>
Fri, 1 Dec 2017 14:33:03 +0000 (14:33 +0000)
2017-12-01  Bin Cheng  <bin.cheng@arm.com>

* gimple-loop-interchange.cc (is-a.h): New header file.
(loop_cand::find_reduction_by_stmt): Use dyn_cast instead of is_a<>
and as_a<>.
(loop_cand::analyze_iloop_reduction_var): Ditto.
(loop_cand::analyze_oloop_reduction_var): Ditto.  Check gimple stmt
against phi node directly.

From-SVN: r255310

gcc/gimple-loop-interchange.cc

index d5a39a0f7f0719061f22cb4451e20a5778727c61..21dbdec1c3a3ccb365df26633cd95beecd647d0a 100644 (file)
@@ -22,6 +22,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "system.h"
 #include "coretypes.h"
 #include "backend.h"
+#include "is-a.h"
 #include "tree.h"
 #include "gimple.h"
 #include "tree-pass.h"
@@ -270,12 +271,9 @@ unsupported_edge (edge e)
 reduction_p
 loop_cand::find_reduction_by_stmt (gimple *stmt)
 {
-  gphi *phi = NULL;
+  gphi *phi = dyn_cast <gphi *> (stmt);
   reduction_p re;
 
-  if (is_a <gphi *> (stmt))
-    phi = as_a <gphi *> (stmt);
-
   for (unsigned i = 0; m_reductions.iterate (i, &re); ++i)
     if ((phi != NULL && phi == re->lcssa_phi)
        || (stmt == re->producer || stmt == re->consumer))
@@ -591,10 +589,8 @@ loop_cand::analyze_iloop_reduction_var (tree var)
        continue;
 
       /* Or else it's used in PHI itself.  */
-      use_phi = NULL;
-      if (is_a <gphi *> (stmt)
-         && (use_phi = as_a <gphi *> (stmt)) != NULL
-         && use_phi == phi)
+      use_phi = dyn_cast <gphi *> (stmt);
+      if (use_phi == phi)
        continue;
 
       if (use_phi != NULL
@@ -684,12 +680,7 @@ loop_cand::analyze_oloop_reduction_var (loop_cand *iloop, tree var)
       if (is_gimple_debug (stmt))
        continue;
 
-      if (!flow_bb_inside_loop_p (m_loop, gimple_bb (stmt)))
-       return false;
-
-      if (! is_a <gphi *> (stmt)
-         || (use_phi = as_a <gphi *> (stmt)) == NULL
-         || use_phi != inner_re->phi)
+      if (stmt != inner_re->phi)
        return false;
     }
 
@@ -701,10 +692,8 @@ loop_cand::analyze_oloop_reduction_var (loop_cand *iloop, tree var)
        continue;
 
       /* Or else it's used in PHI itself.  */
-      use_phi = NULL;
-      if (is_a <gphi *> (stmt)
-         && (use_phi = as_a <gphi *> (stmt)) != NULL
-         && use_phi == phi)
+      use_phi = dyn_cast <gphi *> (stmt);
+      if (use_phi == phi)
        continue;
 
       if (lcssa_phi == NULL