This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: PR target/52555: attribute optimize is overriding command line options
- From: Jakub Jelinek <jakub at redhat dot com>
- To: Steve Ellcey <Steve dot Ellcey at imgtec dot com>, Aldy Hernandez <aldyh at redhat dot com>
- Cc: gcc-patches <gcc-patches at gcc dot gnu dot org>, "rdsandiford at googlemail dot com" <rdsandiford at googlemail dot com>
- Date: Fri, 22 Feb 2013 11:03:12 +0100
- Subject: Re: PR target/52555: attribute optimize is overriding command line options
- References: <20130218230522.GB1215@tucnak.zalov.cz> <1C0E790D7E4C75418622FD04CC2A1172015D5C06@bamail02.ba.imgtec.org>
- Reply-to: Jakub Jelinek <jakub at redhat dot com>
On Thu, Feb 21, 2013 at 11:02:56PM +0000, Steve Ellcey wrote:
> Have you gotten any reports of problems with this patch? It seems to be sending cc1 into an infinite
> loop during the GCC testsuite for me. I am testing the mips-mti-linux-gnu target and tests like
> gcc.target/mips/call-saved-1.c are causing cc1 to suck up all my memory and swap space before the
> test times out.
>
> I will keep digging and see if I can figure out what is going on but I wanted to see if anyone else has
> reported this problem.
I think this should fix this (but totally untested except for
call-saved-1.c, and it doesn't make any sense to test on non-mips).
The problem I believe is that Aldy has changed init_optabs and insn-opinit.c
to use this_fn_optabs instead of this_target_optabs, but it is only set in
invoke_set_current_function_hook. During save_target_globals we want to
init this_target_optabs, so we need to temporarily switch this_fn_optabs to
make that happen.
2013-02-22 Jakub Jelinek <jakub@redhat.com>
PR target/52555
* target-globals.c (save_target_globals): For init_reg_sets and
target_reinit remporarily set this_fn_optabs to this_target_optabs.
--- gcc/target-globals.c.jj 2013-02-19 07:40:03.000000000 +0100
+++ gcc/target-globals.c 2013-02-22 10:55:36.725435859 +0100
@@ -67,6 +67,7 @@ struct target_globals *
save_target_globals (void)
{
struct target_globals *g;
+ struct target_optabs *saved_this_fn_optabs = this_fn_optabs;
g = ggc_alloc_target_globals ();
g->flag_state = XCNEW (struct target_flag_state);
@@ -86,8 +87,10 @@ save_target_globals (void)
g->bb_reorder = XCNEW (struct target_bb_reorder);
g->lower_subreg = XCNEW (struct target_lower_subreg);
restore_target_globals (g);
+ this_fn_optabs = this_target_optabs;
init_reg_sets ();
target_reinit ();
+ this_fn_optabs = saved_this_fn_optabs;
return g;
}
Jakub