]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Do not check the if-convertibility of statements that are not predicated.
authorspop <spop@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 26 May 2010 16:47:08 +0000 (16:47 +0000)
committerspop <spop@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 26 May 2010 16:47:08 +0000 (16:47 +0000)
2010-05-26  Sebastian Pop  <sebastian.pop@amd.com>

* tree-if-conv.c (if_convertible_gimple_assign_stmt_p): Do not
special case loop->header.
(is_predicated): New.
(if_convertible_loop_p): Call it.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@159887 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/tree-if-conv.c

index ed863df906ceeba55c9452fc8d0b3d79cce61149..31bc2922b64ab95c4b4c16eed52e86ae9283d812 100644 (file)
@@ -1,3 +1,10 @@
+2010-05-26  Sebastian Pop  <sebastian.pop@amd.com>
+
+       * tree-if-conv.c (if_convertible_gimple_assign_stmt_p): Do not
+       special case loop->header.
+       (is_predicated): New.
+       (if_convertible_loop_p): Call it.
+
 2010-05-26  Sebastian Pop  <sebastian.pop@amd.com>
 
        * tree-if-conv.c (add_to_dst_predicate_list): Do not pass a statemet
index da6b1cde27aa57a1de61df7c3443179d146d6de7..8dc1de682be2ab1ea354e50fc12a1d20888e9318 100644 (file)
@@ -274,9 +274,7 @@ if_convertible_gimple_assign_stmt_p (struct loop *loop, basic_block bb,
       return false;
     }
 
-  /* See if it needs speculative loading or not.  */
-  if (bb != loop->header
-      && gimple_assign_rhs_could_trap_p (stmt))
+  if (gimple_assign_rhs_could_trap_p (stmt))
     {
       if (dump_file && (dump_flags & TDF_DETAILS))
        fprintf (dump_file, "tree could trap...\n");
@@ -588,6 +586,19 @@ predicate_bbs (loop_p loop)
   return true;
 }
 
+/* Returns true when BB has a predicate that is not trivial: true or
+   NULL_TREE.  */
+
+static bool
+is_predicated (basic_block bb)
+{
+  tree cond = (tree) bb->aux;
+
+  return (cond != NULL_TREE
+         && cond != boolean_true_node
+         && !integer_onep (cond));
+}
+
 /* Return true when LOOP is if-convertible.
    LOOP is if-convertible if:
    - it is innermost,
@@ -682,6 +693,10 @@ if_convertible_loop_p (struct loop *loop)
       basic_block bb = ifc_bbs[i];
       gimple_stmt_iterator itr;
 
+      /* For non predicated BBs, don't check their statements.  */
+      if (!is_predicated (bb))
+       continue;
+
       for (itr = gsi_start_bb (bb); !gsi_end_p (itr); gsi_next (&itr))
        if (!if_convertible_stmt_p (loop, bb, gsi_stmt (itr)))
          return false;