2013-02-08 Richard Biener <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 8 Feb 2013 09:07:49 +0000 (09:07 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 8 Feb 2013 09:07:49 +0000 (09:07 +0000)
* Makefile.in (tree-tailcall.o): Add $(CFGLOOP_H) dependency.
* ipa-pure-const.c (analyze_function): Avoid calling
mark_irreducible_loops twice.
* tree-tailcall.c (tree_optimize_tail_calls_1): Mark loops
for fixup.

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

gcc/ChangeLog
gcc/Makefile.in
gcc/ipa-pure-const.c
gcc/tree-tailcall.c

index dcbe029..575f74a 100644 (file)
@@ -1,3 +1,11 @@
+2013-02-08  Richard Biener  <rguenther@suse.de>
+
+       * Makefile.in (tree-tailcall.o): Add $(CFGLOOP_H) dependency.
+       * ipa-pure-const.c (analyze_function): Avoid calling
+       mark_irreducible_loops twice.
+       * tree-tailcall.c (tree_optimize_tail_calls_1): Mark loops
+       for fixup.
+
 2013-02-07  David S. Miller  <davem@davemloft.net>
 
        * dwarf2out.c (based_loc_descr): Perform leaf register remapping
index 6fe6345..375d5f5 100644 (file)
@@ -2391,7 +2391,7 @@ tree-tailcall.o : tree-tailcall.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \
    $(TREE_H) $(TM_P_H) $(FUNCTION_H) $(TM_H) coretypes.h \
    $(EXCEPT_H) $(TREE_PASS_H) $(FLAGS_H) langhooks.h \
    $(BASIC_BLOCK_H) $(DBGCNT_H) $(GIMPLE_PRETTY_PRINT_H) $(TARGET_H) \
-   $(COMMON_TARGET_H)
+   $(COMMON_TARGET_H) $(CFGLOOP_H)
 tree-ssa-sink.o : tree-ssa-sink.c $(TREE_FLOW_H) $(CONFIG_H) \
    $(SYSTEM_H) $(TREE_H) $(DIAGNOSTIC_H) \
    $(TM_H) coretypes.h $(TREE_PASS_H) $(FLAGS_H) alloc-pool.h \
index 3824a2f..07ba90f 100644 (file)
@@ -779,8 +779,10 @@ end:
         {
          /* Preheaders are needed for SCEV to work.
             Simple latches and recorded exits improve chances that loop will
-            proved to be finite in testcases such as in loop-15.c and loop-24.c  */
-         loop_optimizer_init (LOOPS_NORMAL
+            proved to be finite in testcases such as in loop-15.c
+            and loop-24.c  */
+         loop_optimizer_init (LOOPS_HAVE_PREHEADERS
+                              | LOOPS_HAVE_SIMPLE_LATCHES
                               | LOOPS_HAVE_RECORDED_EXITS);
          if (dump_file && (dump_flags & TDF_DETAILS))
            flow_loops_dump (dump_file, NULL, 0);
@@ -799,7 +801,8 @@ end:
                if (!finite_loop_p (loop))
                  {
                    if (dump_file)
-                     fprintf (dump_file, "    can not prove finiteness of loop %i\n", loop->num);
+                     fprintf (dump_file, "    can not prove finiteness of "
+                              "loop %i\n", loop->num);
                    l->looping =true;
                    FOR_EACH_LOOP_BREAK (li);
                  }
index e08978c..80c0521 100644 (file)
@@ -33,6 +33,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "langhooks.h"
 #include "dbgcnt.h"
 #include "target.h"
+#include "cfgloop.h"
 #include "common/common-target.h"
 
 /* The file implements the tail recursion elimination.  It is also used to
@@ -1011,7 +1012,12 @@ tree_optimize_tail_calls_1 (bool opt_tailcalls)
     }
 
   if (changed)
-    free_dominance_info (CDI_DOMINATORS);
+    {
+      /* We may have created new loops.  Make them magically appear.  */
+      if (current_loops)
+       loops_state_set (LOOPS_NEED_FIXUP);
+      free_dominance_info (CDI_DOMINATORS);
+    }
 
   /* Add phi nodes for the virtual operands defined in the function to the
      header of the loop created by tail recursion elimination.  Do so