Message ID | 2856601.ZucKZt0EVz@polaris |
---|---|
State | New |
Headers | show |
On 10/24/13 15:10, Eric Botcazou wrote: > As discovered by Richard B. under PR rtl-optimization/58831, the peephole2 > pass has been context-sensitive for a long time when scratch registers are > needed, in the sense that the behaviour of the pass for a given function is > dependent on what happened for the previously optimized function. > > Obvious patch attached, tested on x86_64-suse-linux. Do we want to apply it > on mainline only or on all the active branches? > > > 2013-10-24 Eric Botcazou <ebotcazou@adacore.com> > > * recog.c (search_ofs): New static variable moved from... > (peep2_find_free_register): ...here. > (peephole2_optimize): Initialize it. OK for trunk. Release branch owners have the final call for their branches. Thanks for taking the time to track this down. jeff
On Thu, Oct 24, 2013 at 11:14:42PM -0600, Jeff Law wrote: > On 10/24/13 15:10, Eric Botcazou wrote: > >As discovered by Richard B. under PR rtl-optimization/58831, the peephole2 > >pass has been context-sensitive for a long time when scratch registers are > >needed, in the sense that the behaviour of the pass for a given function is > >dependent on what happened for the previously optimized function. > > > >Obvious patch attached, tested on x86_64-suse-linux. Do we want to apply it > >on mainline only or on all the active branches? > > > > > >2013-10-24 Eric Botcazou <ebotcazou@adacore.com> > > > > * recog.c (search_ofs): New static variable moved from... > > (peep2_find_free_register): ...here. > > (peephole2_optimize): Initialize it. > OK for trunk. Release branch owners have the final call for their branches. This is ok for the release branches too. Jakub
Index: recog.c =================================================================== --- recog.c (revision 203876) +++ recog.c (working copy) @@ -3068,6 +3068,9 @@ peep2_reg_dead_p (int ofs, rtx reg) return 1; } +/* Regno offset to be used in the register search. */ +static int search_ofs; + /* Try to find a hard register of mode MODE, matching the register class in CLASS_STR, which is available at the beginning of insn CURRENT_INSN and remains available until the end of LAST_INSN. LAST_INSN may be NULL_RTX, @@ -3083,7 +3086,6 @@ rtx peep2_find_free_register (int from, int to, const char *class_str, enum machine_mode mode, HARD_REG_SET *reg_set) { - static int search_ofs; enum reg_class cl; HARD_REG_SET live; df_ref *def_rec; @@ -3548,6 +3550,7 @@ peephole2_optimize (void) /* Initialize the regsets we're going to use. */ for (i = 0; i < MAX_INSNS_PER_PEEP2 + 1; ++i) peep2_insn_data[i].live_before = BITMAP_ALLOC (®_obstack); + search_ofs = 0; live = BITMAP_ALLOC (®_obstack); FOR_EACH_BB_REVERSE (bb)