The following gets rid of ira_loops (ok, without touching all uses yet but with a #define - I'll finish this if you are ok with it in general).
Bootstrap and regtest running on x86_64-unknown-linux-gnu. Ok for trunk for the IRA parts? (well, given I search & replace uses of ira_loops) Thanks, Richard. 2013-02-07 Richard Biener <rguent...@suse.de> * cfgloop.c (verify_loop_structure): Properly handle a loop exiting to another loop header. * ira-int.h (ira_loops): Remove. * ira.c (ira_loops): Remove. (ira): Use loop_optimizer_init and loop_optimizer_finalize. (do_reload): Use loop_optimizer_finalize. Index: gcc/cfgloop.c =================================================================== *** gcc/cfgloop.c (revision 195846) --- gcc/cfgloop.c (working copy) *************** verify_loop_structure (void) *** 1542,1548 **** eloops++; for (loop = bb->loop_father; ! loop != e->dest->loop_father; loop = loop_outer (loop)) { eloops--; --- 1542,1553 ---- eloops++; for (loop = bb->loop_father; ! loop != e->dest->loop_father ! /* When a loop exit is also an entry edge which ! can happen when avoiding CFG manipulations ! then the last loop exited is the outer loop ! of the loop entered. */ ! && loop != loop_outer (e->dest->loop_father); loop = loop_outer (loop)) { eloops--; Index: gcc/ira-int.h =================================================================== *** gcc/ira-int.h (revision 195846) --- gcc/ira-int.h (working copy) *************** along with GCC; see the file COPYING3. *** 48,54 **** ? (freq * REG_FREQ_MAX / BB_FREQ_MAX) : 1) /* All natural loops. */ ! extern struct loops ira_loops; /* A modified value of flag `-fira-verbose' used internally. */ extern int internal_flag_ira_verbose; --- 48,54 ---- ? (freq * REG_FREQ_MAX / BB_FREQ_MAX) : 1) /* All natural loops. */ ! #define ira_loops (*current_loops) /* A modified value of flag `-fira-verbose' used internally. */ extern int internal_flag_ira_verbose; Index: gcc/ira.c =================================================================== *** gcc/ira.c (revision 195846) --- gcc/ira.c (working copy) *************** allocate_initial_values (void) *** 4338,4346 **** function. */ bool ira_use_lra_p; - /* All natural loops. */ - struct loops ira_loops; - /* True if we have allocno conflicts. It is false for non-optimized mode or when the conflict table is too big. */ bool ira_conflicts_p; --- 4338,4343 ---- *************** ira (FILE *f) *** 4464,4474 **** ira_assert (current_loops == NULL); if (flag_ira_region == IRA_REGION_ALL || flag_ira_region == IRA_REGION_MIXED) ! { ! flow_loops_find (&ira_loops); ! current_loops = &ira_loops; ! record_loop_exits (); ! } if (internal_flag_ira_verbose > 0 && ira_dump_file != NULL) fprintf (ira_dump_file, "Building IRA IR\n"); --- 4461,4467 ---- ira_assert (current_loops == NULL); if (flag_ira_region == IRA_REGION_ALL || flag_ira_region == IRA_REGION_MIXED) ! loop_optimizer_init (AVOID_CFG_MODIFICATIONS | LOOPS_HAVE_RECORDED_EXITS); if (internal_flag_ira_verbose > 0 && ira_dump_file != NULL) fprintf (ira_dump_file, "Building IRA IR\n"); *************** ira (FILE *f) *** 4526,4536 **** /* ??? Rebuild the loop tree, but why? Does the loop tree change if new insns were generated? Can that be handled by updating the loop tree incrementally? */ ! release_recorded_exits (); ! flow_loops_free (&ira_loops); ! flow_loops_find (&ira_loops); ! current_loops = &ira_loops; ! record_loop_exits (); if (! ira_use_lra_p) { --- 4519,4527 ---- /* ??? Rebuild the loop tree, but why? Does the loop tree change if new insns were generated? Can that be handled by updating the loop tree incrementally? */ ! loop_optimizer_finalize (); ! loop_optimizer_init (AVOID_CFG_MODIFICATIONS ! | LOOPS_HAVE_RECORDED_EXITS); if (! ira_use_lra_p) { *************** do_reload (void) *** 4607,4614 **** { if (current_loops != NULL) { ! release_recorded_exits (); ! flow_loops_free (&ira_loops); free_dominance_info (CDI_DOMINATORS); } FOR_ALL_BB (bb) --- 4598,4604 ---- { if (current_loops != NULL) { ! loop_optimizer_finalize (); free_dominance_info (CDI_DOMINATORS); } FOR_ALL_BB (bb) *************** do_reload (void) *** 4657,4664 **** ira_destroy (); if (current_loops != NULL) { ! release_recorded_exits (); ! flow_loops_free (&ira_loops); free_dominance_info (CDI_DOMINATORS); } FOR_ALL_BB (bb) --- 4647,4653 ---- ira_destroy (); if (current_loops != NULL) { ! loop_optimizer_finalize (); free_dominance_info (CDI_DOMINATORS); } FOR_ALL_BB (bb)