From 8ff30f9a0235ba6746f7d1544bc1474fc422d98b Mon Sep 17 00:00:00 2001 From: rguenth Date: Fri, 8 Feb 2013 09:07:49 +0000 Subject: [PATCH] 2013-02-08 Richard Biener * 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 | 8 ++++++++ gcc/Makefile.in | 2 +- gcc/ipa-pure-const.c | 9 ++++++--- gcc/tree-tailcall.c | 8 +++++++- 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index dcbe029..575f74a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2013-02-08 Richard Biener + + * 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 * dwarf2out.c (based_loc_descr): Perform leaf register remapping diff --git a/gcc/Makefile.in b/gcc/Makefile.in index 6fe6345..375d5f5 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -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 \ diff --git a/gcc/ipa-pure-const.c b/gcc/ipa-pure-const.c index 3824a2f..07ba90f 100644 --- a/gcc/ipa-pure-const.c +++ b/gcc/ipa-pure-const.c @@ -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); } diff --git a/gcc/tree-tailcall.c b/gcc/tree-tailcall.c index e08978c..80c0521 100644 --- a/gcc/tree-tailcall.c +++ b/gcc/tree-tailcall.c @@ -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 -- 2.7.4