Mercurial > hg > CbC > CbC_gcc
diff gcc/tree-ssa-loop-manip.c @ 63:b7f97abdc517 gcc-4.6-20100522
update gcc from gcc-4.5.0 to gcc-4.6
author | ryoma <e075725@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 24 May 2010 12:47:05 +0900 |
parents | 77e2b8dfacca |
children | f6334be47118 |
line wrap: on
line diff
--- a/gcc/tree-ssa-loop-manip.c Fri Feb 12 23:41:23 2010 +0900 +++ b/gcc/tree-ssa-loop-manip.c Mon May 24 12:47:05 2010 +0900 @@ -1,5 +1,6 @@ /* High-level loop manipulation functions. - Copyright (C) 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. + Copyright (C) 2004, 2005, 2006, 2007, 2008, 2010 + Free Software Foundation, Inc. This file is part of GCC. @@ -22,9 +23,7 @@ #include "coretypes.h" #include "tm.h" #include "tree.h" -#include "rtl.h" #include "tm_p.h" -#include "hard-reg-set.h" #include "basic-block.h" #include "output.h" #include "diagnostic.h" @@ -439,10 +438,11 @@ check_loop_closed_ssa_use (bb, var); } -/* Checks that invariants of the loop closed ssa form are preserved. */ +/* Checks that invariants of the loop closed ssa form are preserved. + Call verify_ssa when VERIFY_SSA_P is true. */ void -verify_loop_closed_ssa (void) +verify_loop_closed_ssa (bool verify_ssa_p) { basic_block bb; gimple_stmt_iterator bsi; @@ -453,7 +453,8 @@ if (number_of_loops () <= 1) return; - verify_ssa (false); + if (verify_ssa_p) + verify_ssa (false); FOR_EACH_BB (bb) { @@ -615,7 +616,7 @@ #ifdef ENABLE_CHECKING if (loops_state_satisfies_p (LOOP_CLOSED_SSA)) - verify_loop_closed_ssa (); + verify_loop_closed_ssa (true); #endif first_new_block = last_basic_block; @@ -1094,7 +1095,7 @@ verify_flow_info (); verify_dominators (CDI_DOMINATORS); verify_loop_structure (); - verify_loop_closed_ssa (); + verify_loop_closed_ssa (true); #endif } @@ -1181,11 +1182,13 @@ compared with *NIT. When the IV type precision has to be larger than *NIT type precision, *NIT is converted to the larger type, the conversion code is inserted before the loop, and *NIT is updated to - the new definition. The induction variable is incremented in the - loop latch. Return the induction variable that was created. */ + the new definition. When BUMP_IN_LATCH is true, the induction + variable is incremented in the loop latch, otherwise it is + incremented in the loop header. Return the induction variable that + was created. */ tree -canonicalize_loop_ivs (struct loop *loop, tree *nit) +canonicalize_loop_ivs (struct loop *loop, tree *nit, bool bump_in_latch) { unsigned precision = TYPE_PRECISION (TREE_TYPE (*nit)); unsigned original_precision = precision; @@ -1215,9 +1218,9 @@ gsi_insert_seq_on_edge_immediate (loop_preheader_edge (loop), stmts); } - gsi = gsi_last_bb (loop->latch); + gsi = gsi_last_bb (bump_in_latch ? loop->latch : loop->header); create_iv (build_int_cst_type (type, 0), build_int_cst (type, 1), NULL_TREE, - loop, &gsi, true, &var_before, NULL); + loop, &gsi, bump_in_latch, &var_before, NULL); rewrite_all_phi_nodes_with_iv (loop, var_before);