aboutsummaryrefslogtreecommitdiff
path: root/gcc/cfgloopmanip.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2012-10-17 21:50:16 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2012-10-17 19:50:16 +0000
commitbf45c4c0c13c77791f8ec5325706baef32ce6644 (patch)
tree0946728541035742ddd41dc817f634a847ab85d2 /gcc/cfgloopmanip.c
parentb7442c2fe0e28b96f0789d41132849b7c99402d4 (diff)
downloadgcc-bf45c4c0c13c77791f8ec5325706baef32ce6644.zip
gcc-bf45c4c0c13c77791f8ec5325706baef32ce6644.tar.gz
gcc-bf45c4c0c13c77791f8ec5325706baef32ce6644.tar.bz2
cfgloopmanip.c (copy_loop_info): New function.
* cfgloopmanip.c (copy_loop_info): New function. (duplicate_loop): Use it. (loop_version): Use it. * loop-unswitch.c (unswitch_loop): Use it. * cfgloop.h (copy_loop_info): Declare. From-SVN: r192543
Diffstat (limited to 'gcc/cfgloopmanip.c')
-rw-r--r--gcc/cfgloopmanip.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/gcc/cfgloopmanip.c b/gcc/cfgloopmanip.c
index 98f359e..97a90bb 100644
--- a/gcc/cfgloopmanip.c
+++ b/gcc/cfgloopmanip.c
@@ -970,6 +970,20 @@ fix_loop_placements (struct loop *loop, bool *irred_invalidated)
}
}
+/* Duplicate loop bounds and other information we store about
+ the loop into its duplicate. */
+
+void
+copy_loop_info (struct loop *loop, struct loop *target)
+{
+ gcc_checking_assert (!target->any_upper_bound && !target->any_estimate);
+ target->any_upper_bound = loop->any_upper_bound;
+ target->nb_iterations_upper_bound = loop->nb_iterations_upper_bound;
+ target->any_estimate = loop->any_estimate;
+ target->nb_iterations_estimate = loop->nb_iterations_estimate;
+ target->estimate_state = loop->estimate_state;
+}
+
/* Copies copy of LOOP as subloop of TARGET loop, placing newly
created loop into loops structure. */
struct loop *
@@ -978,6 +992,8 @@ duplicate_loop (struct loop *loop, struct loop *target)
struct loop *cloop;
cloop = alloc_loop ();
place_new_loop (cloop);
+
+ copy_loop_info (loop, cloop);
/* Mark the new loop as copy of LOOP. */
set_loop_copy (loop, cloop);
@@ -1686,6 +1702,8 @@ loop_version (struct loop *loop,
false /* Do not redirect all edges. */,
then_scale, else_scale);
+ copy_loop_info (loop, nloop);
+
/* loopify redirected latch_edge. Update its PENDING_STMTS. */
lv_flush_pending_stmts (latch_edge);