This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Don't reset cselib hash table during vt_initialize after every bb, only after every ebb


On Sat, Feb 27, 2010 at 2:02 PM, Jakub Jelinek <jakub@redhat.com> wrote:
> @@ -7393,55 +7393,73 @@ vt_initialize (void)
> ? ? ? ? ? ? ? ? ? ? cselib_get_next_uid ());
> ? ? ? ?}
>
> + ? ? ?first_bb = bb;
> + ? ? ?for (;;)
> + ? ? ? {
> + ? ? ? ? edge e;
> + ? ? ? ? edge_iterator ei;
> + ? ? ? ? if (bb->next_bb == EXIT_BLOCK_PTR
> + ? ? ? ? ? ? || LABEL_P (BB_HEAD (bb->next_bb)))
> + ? ? ? ? ? break;
> + ? ? ? ? FOR_EACH_EDGE (e, ei, bb->succs)
> + ? ? ? ? ? if ((e->flags & EDGE_FALLTHRU) != 0)
> + ? ? ? ? ? ? break;
> + ? ? ? ? if (! e || e->dest != bb->next_bb)
> + ? ? ? ? ? break;
> + ? ? ? ? bb = bb->next_bb;
> + ? ? ? }
> + ? ? ?last_bb = bb;
> +

Looks to me like you should be using things like "find_edge (bb,
bb->next_bb)" and "single_pred_p (bb->next_bb)" instead. Something
like,

+      first_bb = bb;
+      for (;;)
+       {
+         edge e;
+         if (bb->next_bb == EXIT_BLOCK_PTR
+            || ! single_pred_p (bb->next_bb))
+           break;
+         e = find_edge (bb, bb->next_bb);
+         if (! e || (e->flags & EDGE_FALLTHRU) != 0)
+           break;
+         bb = bb->next_bb;
+       }
+      last_bb = bb;
+

(Or at least something along these lines...)

Ciao!
Steven


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]