This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] Don't reset cselib hash table during vt_initialize after every bb, only after every ebb
- From: Steven Bosscher <stevenb dot gcc at gmail dot com>
- To: Jakub Jelinek <jakub at redhat dot com>
- Cc: Alexandre Oliva <aoliva at redhat dot com>, gcc-patches at gcc dot gnu dot org
- Date: Sat, 27 Feb 2010 14:15:32 +0100
- Subject: Re: [PATCH] Don't reset cselib hash table during vt_initialize after every bb, only after every ebb
- References: <20100227130200.GA2817@tyan-ft48-01.lab.bos.redhat.com>
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