cfgloop.h (DLTHE_RECORD_COPY_NUMBER): New flag.
authorJan Hubicka <jh@suse.cz>
Sun, 19 Jun 2005 22:40:34 +0000 (00:40 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Sun, 19 Jun 2005 22:40:34 +0000 (22:40 +0000)
* cfgloop.h (DLTHE_RECORD_COPY_NUMBER): New flag.
* cfgloopmanip.c (duplicate_loop_to_header_edge): Set aux flags only
when asked for.
* loop-unroll.c (peel_loop_completely, unroll_loop_constant_iterations,
unroll_loop_runtime_iterations, peel_loop_simple, unroll_loop_stupid):
Update call of duplicate_loop_to_header_edge.
(apply_opt_in_copies): Clear out aux pointers.

From-SVN: r101193

gcc/ChangeLog
gcc/cfgloop.h
gcc/cfgloopmanip.c
gcc/loop-unroll.c

index ab9dcd3..e473165 100644 (file)
@@ -1,3 +1,13 @@
+2005-06-20  Jan Hubicka  <jh@suse.cz>
+
+       * cfgloop.h (DLTHE_RECORD_COPY_NUMBER): New flag.
+       * cfgloopmanip.c (duplicate_loop_to_header_edge): Set aux flags only
+       when asked for.
+       * loop-unroll.c (peel_loop_completely, unroll_loop_constant_iterations,
+       unroll_loop_runtime_iterations, peel_loop_simple, unroll_loop_stupid):
+       Update call of duplicate_loop_to_header_edge.
+       (apply_opt_in_copies): Clear out aux pointers.
+
 2005-06-19  Joseph S. Myers  <joseph@codesourcery.com>
 
        * config/i386/i386.c (TARGET_MANGLE_FUNDAMENTAL_TYPE): Define.
index 048802b..bfcb0b9 100644 (file)
@@ -296,6 +296,8 @@ extern bool can_duplicate_loop_p (struct loop *loop);
 
 #define DLTHE_FLAG_UPDATE_FREQ 1       /* Update frequencies in
                                           duplicate_loop_to_header_edge.  */
+#define DLTHE_RECORD_COPY_NUMBER 2     /* Record copy number in the aux
+                                          field of newly create BB.  */
 
 extern struct loop * duplicate_loop (struct loops *, struct loop *,
                                     struct loop *);
index 9972378..d75c7d4 100644 (file)
@@ -982,11 +982,12 @@ duplicate_loop_to_header_edge (struct loop *loop, edge e, struct loops *loops,
       /* Copy bbs.  */
       copy_bbs (bbs, n, new_bbs, spec_edges, 2, new_spec_edges, loop);
 
-      for (i = 0; i < n; i++)
-       {
-         gcc_assert (!new_bbs[i]->aux);
-         new_bbs[i]->aux = (void *)(size_t)(j + 1);
-       }
+      if (flags & DLTHE_RECORD_COPY_NUMBER)
+       for (i = 0; i < n; i++)
+         {
+           gcc_assert (!new_bbs[i]->aux);
+           new_bbs[i]->aux = (void *)(size_t)(j + 1);
+         }
 
       /* Note whether the blocks and edges belong to an irreducible loop.  */
       if (add_irreducible_flag)
index 72fda46..fd1821c 100644 (file)
@@ -519,7 +519,9 @@ peel_loop_completely (struct loops *loops, struct loop *loop)
                                          loops, npeel,
                                          wont_exit, desc->out_edge,
                                          remove_edges, &n_remove_edges,
-                                         DLTHE_FLAG_UPDATE_FREQ);
+                                         DLTHE_FLAG_UPDATE_FREQ
+                                         | (opt_info
+                                            ? DLTHE_RECORD_COPY_NUMBER : 0));
       gcc_assert (ok);
 
       free (wont_exit);
@@ -717,7 +719,10 @@ unroll_loop_constant_iterations (struct loops *loops, struct loop *loop)
                                              loops, exit_mod,
                                              wont_exit, desc->out_edge,
                                              remove_edges, &n_remove_edges,
-                                             DLTHE_FLAG_UPDATE_FREQ);
+                                             DLTHE_FLAG_UPDATE_FREQ
+                                             | (opt_info && exit_mod > 1
+                                                ? DLTHE_RECORD_COPY_NUMBER
+                                                  : 0));
          gcc_assert (ok);
 
           if (opt_info && exit_mod > 1)
@@ -753,7 +758,10 @@ unroll_loop_constant_iterations (struct loops *loops, struct loop *loop)
                                              loops, exit_mod + 1,
                                              wont_exit, desc->out_edge,
                                              remove_edges, &n_remove_edges,
-                                             DLTHE_FLAG_UPDATE_FREQ);
+                                             DLTHE_FLAG_UPDATE_FREQ
+                                             | (opt_info && exit_mod > 0
+                                                ? DLTHE_RECORD_COPY_NUMBER
+                                                  : 0));
          gcc_assert (ok);
  
           if (opt_info && exit_mod > 0)
@@ -777,7 +785,10 @@ unroll_loop_constant_iterations (struct loops *loops, struct loop *loop)
                                      loops, max_unroll,
                                      wont_exit, desc->out_edge,
                                      remove_edges, &n_remove_edges,
-                                     DLTHE_FLAG_UPDATE_FREQ);
+                                     DLTHE_FLAG_UPDATE_FREQ
+                                     | (opt_info
+                                        ? DLTHE_RECORD_COPY_NUMBER
+                                          : 0));
   gcc_assert (ok);
 
   if (opt_info)
@@ -1097,7 +1108,10 @@ unroll_loop_runtime_iterations (struct loops *loops, struct loop *loop)
                                      loops, max_unroll,
                                      wont_exit, desc->out_edge,
                                      remove_edges, &n_remove_edges,
-                                     DLTHE_FLAG_UPDATE_FREQ);
+                                     DLTHE_FLAG_UPDATE_FREQ
+                                     | (opt_info
+                                        ? DLTHE_RECORD_COPY_NUMBER
+                                          : 0));
   gcc_assert (ok);
   
   if (opt_info)
@@ -1274,7 +1288,10 @@ peel_loop_simple (struct loops *loops, struct loop *loop)
   ok = duplicate_loop_to_header_edge (loop, loop_preheader_edge (loop),
                                      loops, npeel, wont_exit,
                                      NULL, NULL,
-                                     NULL, DLTHE_FLAG_UPDATE_FREQ);
+                                     NULL, DLTHE_FLAG_UPDATE_FREQ
+                                     | (opt_info
+                                        ? DLTHE_RECORD_COPY_NUMBER
+                                          : 0));
   gcc_assert (ok);
 
   free (wont_exit);
@@ -1422,7 +1439,10 @@ unroll_loop_stupid (struct loops *loops, struct loop *loop)
   ok = duplicate_loop_to_header_edge (loop, loop_latch_edge (loop),
                                      loops, nunroll, wont_exit,
                                      NULL, NULL, NULL,
-                                     DLTHE_FLAG_UPDATE_FREQ);
+                                     DLTHE_FLAG_UPDATE_FREQ
+                                     | (opt_info
+                                        ? DLTHE_RECORD_COPY_NUMBER
+                                          : 0));
   gcc_assert (ok);
   
   if (opt_info)
@@ -2064,6 +2084,7 @@ apply_opt_in_copies (struct opt_info *opt_info,
         duplicate_loop_to_header_edge.  */
       delta = determine_split_iv_delta ((size_t)bb->aux, n_copies,
                                        unrolling);
+      bb->aux = 0;
       orig_insn = BB_HEAD (orig_bb);
       for (insn = BB_HEAD (bb); insn != NEXT_INSN (BB_END (bb)); insn = next)
         {