OSDN Git Service

fix in tree-if-conv.c
authorrevitale <revitale@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 25 Mar 2007 06:53:02 +0000 (06:53 +0000)
committerrevitale <revitale@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 25 Mar 2007 06:53:02 +0000 (06:53 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@123194 138bc75d-0d04-0410-961f-82ee72b054a4

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

index ae81fcd..a8902bf 100644 (file)
@@ -1,3 +1,8 @@
+2007-03-25  Revital Eres  <eres@il.ibm.com>
+
+        * tree-if-conv.c (if_convertible_gimple_modify_stmt_p):
+          Fold movement_possibility function into it.
+
 2007-03-25  David Edelsohn  <edelsohn@gnu.org>
 
        * config/rs6000/darwin.md (load_macho_picbase): Ignore operand 0.
index 7d1a838..709c414 100644 (file)
@@ -346,17 +346,28 @@ static bool
 if_convertible_gimple_modify_stmt_p (struct loop *loop, basic_block bb,
                                     tree m_expr)
 {
+  tree lhs, rhs;
+
+  if (TREE_CODE (m_expr) != GIMPLE_MODIFY_STMT)
+    return false;
+
   if (dump_file && (dump_flags & TDF_DETAILS))
     {
       fprintf (dump_file, "-------------------------\n");
       print_generic_stmt (dump_file, m_expr, TDF_SLIM);
     }
 
-  /* Be conservative and do not handle immovable expressions.  */
-  if (movement_possibility (m_expr) == MOVE_IMPOSSIBLE)
+  lhs = GIMPLE_STMT_OPERAND (m_expr, 0);
+  rhs = GIMPLE_STMT_OPERAND (m_expr, 1);
+
+  /* Some of these constrains might be too conservative.  */
+  if (stmt_ends_bb_p (m_expr) || stmt_ann (m_expr)->has_volatile_ops
+      || (TREE_CODE (lhs) == SSA_NAME
+          && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (lhs))
+      || TREE_SIDE_EFFECTS (rhs))
     {
       if (dump_file && (dump_flags & TDF_DETAILS))
-       fprintf (dump_file, "stmt is movable. Don't take risk\n");
+        fprintf (dump_file, "stmt not suitable for ifcvt\n");
       return false;
     }