Revision 126060 fails: AIL: gfortran.dg/auto_array_1.f90 -O3 -fomit-frame-pointer -funroll-loops execution test FAIL: gfortran.dg/auto_array_1.f90 -O3 -fomit-frame-pointer -funroll-all-loops -finline-functions execution test and revision 126007 works.
There has not been any patch to the Fortran front-end during that time, making it plausible that it's a middle-end or target bug.
revision 126030 works.
revision 126045 works.
revision 126056 is bad.
revision 126050 works.
revision 126054 is bad.
This patch http://gcc.gnu.org/ml/gcc-patches/2007-06/msg01977.html is the cause. Richard, can you look into it? Thanks.
Sure, though I doubt this patch changed anything. I won't get to it until after the summit though.
I bet that if you back up until before Author: rguenth Date: Sat Jun 23 18:17:57 2007 New Revision: 125974 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=125974 Log: 2007-06-23 Richard Guenther <rguenther@suse.de> PR tree-optimization/16876 PR middle-end/29478 * tree.h (CALL_CANNOT_INLINE_P): New macro to access static_flag for CALL_EXPRs. the testcase will fail as well. The effect of the patch you pointed at is just to make inlining possible again. I'll defer this for someone else to check what goes wrong with this testcase.
Revision 125888 works: http://gcc.gnu.org/ml/gcc-testresults/2007-06/msg00941.html Revision 125925 is bad: http://gcc.gnu.org/ml/gcc-testresults/2007-06/msg01013.html
That makes me comfortable ;)
revision 125905 works.
revision 125920 works.
(In reply to comment #13) > revision 125920 works. > Revision 125925 is bad: 17:06 r125925 - in /trunk/gcc: ChangeLog testsuite/gc... spop 16:25 r125924 - in /trunk/gcc: ChangeLog df-problems.c zadeck 15:47 r125923 - in /branches/gcc-4_2-branch/gcc: Chan... hjl 14:54 r125922 - in /trunk/gcc: ChangeLog testsuite/Ch... rguenth 13:18 r125921 - in /branches/gcc-4_2-branch/gcc/tests... hjl 12:31 r125920 - in /trunk/gcc: ChangeLog config/i386/... hjl Could we place our bets now? ;)
revision 125924 is bad. I am testing revision 125923 now.
revision 125923 works. Kenny, it looks like your patch http://gcc.gnu.org/ml/gcc-patches/2007-06/msg01557.html causes this regression. Can you look into it? Thanks.
Subject: Re: [4.3 regression]: gfortran.dg/auto_array_1.f90 hjl at lucon dot org wrote: > ------- Comment #16 from hjl at lucon dot org 2007-07-16 19:27 ------- > revision 125923 works. Kenny, it looks like your patch > > http://gcc.gnu.org/ml/gcc-patches/2007-06/msg01557.html > > causes this regression. Can you look into it? Thanks. > > > I will look into this as soon as the bootstrap starts working again on the ia-64. Kenny
i am testing a patch.
Subject: Re: [4.3 regression]: gfortran.dg/auto_array_1.f90 This patch extends the fix in http://gcc.gnu.org/ml/gcc-patches/2007-06/msg01557.html to handle the case of clobbers inside conditional calls. This problem caused the regression of gfortran.dg/matmul_3.f90 on the ia-64 in addition to the regression cited in this pr. Tested on ppc-32, ia-64 and x86-64. 2007-07-26 Kenneth Zadeck <zadeck@naturalbridge.com> PR middle-end/32749 * df-problems.c (df_note_bb_compute): Handle case of clobber inside conditional call. ok to commit? kenny Index: df-problems.c =================================================================== --- df-problems.c (revision 126918) +++ df-problems.c (working copy) @@ -3989,7 +3989,7 @@ df_note_bb_compute (unsigned int bb_inde /* However a may or must clobber still needs to kill the reg so that REG_DEAD notes are later placed appropriately. */ - else + else if (!(DF_REF_FLAGS (def) & (DF_REF_PARTIAL | DF_REF_CONDITIONAL))) bitmap_clear_bit (live, DF_REF_REGNO (def)); } }
Subject: Re: [4.3 regression]: gfortran.dg/auto_array_1.f90 On 7/26/07, Kenneth Zadeck <zadeck@naturalbridge.com> wrote: > This patch extends the fix in > http://gcc.gnu.org/ml/gcc-patches/2007-06/msg01557.html > to handle the case of clobbers inside conditional calls. > > This problem caused the regression of gfortran.dg/matmul_3.f90 on the > ia-64 in addition to the regression cited in this pr. > > Tested on ppc-32, ia-64 and x86-64. > > 2007-07-26 Kenneth Zadeck <zadeck@naturalbridge.com> > > PR middle-end/32749 > > * df-problems.c (df_note_bb_compute): Handle case of clobber > inside conditional call. > > ok to commit? This change is OK. Though I wonder if we need to do similar checking for the regular insn case below.
Subject: Re: [4.3 regression]: gfortran.dg/auto_array_1.f90 Seongbae Park (???, ???) wrote: > On 7/26/07, Kenneth Zadeck <zadeck@naturalbridge.com> wrote: >> This patch extends the fix in >> http://gcc.gnu.org/ml/gcc-patches/2007-06/msg01557.html >> to handle the case of clobbers inside conditional calls. >> >> This problem caused the regression of gfortran.dg/matmul_3.f90 on the >> ia-64 in addition to the regression cited in this pr. >> >> Tested on ppc-32, ia-64 and x86-64. >> >> 2007-07-26 Kenneth Zadeck <zadeck@naturalbridge.com> >> >> PR middle-end/32749 >> >> * df-problems.c (df_note_bb_compute): Handle case of clobber >> inside conditional call. >> >> ok to commit? > > This change is OK. > Though I wonder if we need to do similar checking > for the regular insn case below. No the checking is done in df_create_unused_note. The only reason you have to do it here is that you are not calling that. thanks kenny
Subject: Re: [4.3 regression]: gfortran.dg/auto_array_1.f90 On 7/26/07, Kenneth Zadeck <zadeck@naturalbridge.com> wrote: > Seongbae Park (???, ???) wrote: > > On 7/26/07, Kenneth Zadeck <zadeck@naturalbridge.com> wrote: > >> This patch extends the fix in > >> http://gcc.gnu.org/ml/gcc-patches/2007-06/msg01557.html > >> to handle the case of clobbers inside conditional calls. > >> > >> This problem caused the regression of gfortran.dg/matmul_3.f90 on the > >> ia-64 in addition to the regression cited in this pr. > >> > >> Tested on ppc-32, ia-64 and x86-64. > >> > >> 2007-07-26 Kenneth Zadeck <zadeck@naturalbridge.com> > >> > >> PR middle-end/32749 > >> > >> * df-problems.c (df_note_bb_compute): Handle case of clobber > >> inside conditional call. > >> > >> ok to commit? > > > > This change is OK. > > Though I wonder if we need to do similar checking > > for the regular insn case below. > No the checking is done in df_create_unused_note. The only reason you > have to do it here is that you are not calling that. > > thanks Now that I look at df_create_unused_note, this patch smells a bit - because the condition inside the for loop looks identical to df_create_unused_node. I think it would be cleaner if we split the live vector update into a separate function. i.e. attached patch (untested).
Created attachment 13986 [details] pr32749.patch
Subject: Bug 32749 Author: zadeck Date: Fri Jul 27 17:22:14 2007 New Revision: 126987 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=126987 Log: 2007-07-26 Kenneth Zadeck <zadeck@naturalbridge.com> PR middle-end/32749 * df-problems.c (df_create_unused_note): Removed do_not_gen parm and the updating of the live and do_not_gen sets. (df_note_bb_compute): Added updating of live and do_not_gen sets for regular defs so that the case of clobber inside conditional call is processed correctly. Modified: trunk/gcc/ChangeLog trunk/gcc/df-problems.c
Subject: Re: [4.3 regression]: gfortran.dg/auto_array_1.f90 This patch rearranges the updating of the local dataflow info when building reg_dead notes. The need for this was that processing was not correctly handled for clobbers that occurred within conditional call insns. A rare case but one that at least happens on the ia-64. This patch not only fixes the regressions listed in pr32749, but also fixes the gfortran.dg/matmul_3.f90 on the ia-64 regressions. This patch was bootstrapped and regression tested yesterday on x86-64 and ia-64 and was again bootstrapped this morning on x86-64 (just to make sure there were no interactions with richard sandiford's fixes to closely related code that was just committed.) Committed as revision 126987. Kenny 2007-07-26 Kenneth Zadeck <zadeck@naturalbridge.com> PR middle-end/32749 * df-problems.c (df_create_unused_note): Removed do_not_gen parm and the updating of the live and do_not_gen sets. (df_note_bb_compute): Added updating of live and do_not_gen sets for regular defs so that the case of clobber inside conditional call is processed correctly. Index: df-problems.c =================================================================== --- df-problems.c (revision 126979) +++ df-problems.c (working copy) @@ -3868,13 +3868,12 @@ df_set_dead_notes_for_mw (rtx insn, rtx } -/* Create a REG_UNUSED note if necessary for DEF in INSN updating LIVE - and DO_NOT_GEN. Do not generate notes for registers in artificial - uses. */ +/* Create a REG_UNUSED note if necessary for DEF in INSN updating + LIVE. Do not generate notes for registers in ARTIFICIAL_USES. */ static rtx df_create_unused_note (rtx insn, rtx old, struct df_ref *def, - bitmap live, bitmap do_not_gen, bitmap artificial_uses) + bitmap live, bitmap artificial_uses) { unsigned int dregno = DF_REF_REGNO (def); @@ -3899,12 +3898,6 @@ df_create_unused_note (rtx insn, rtx old #endif } - if (!(DF_REF_FLAGS (def) & (DF_REF_MUST_CLOBBER + DF_REF_MAY_CLOBBER))) - bitmap_set_bit (do_not_gen, dregno); - - /* Kill this register if it is not a subreg store or conditional store. */ - if (!(DF_REF_FLAGS (def) & (DF_REF_PARTIAL | DF_REF_CONDITIONAL))) - bitmap_clear_bit (live, dregno); return old; } @@ -3915,7 +3908,7 @@ df_create_unused_note (rtx insn, rtx old static void df_note_bb_compute (unsigned int bb_index, - bitmap live, bitmap do_not_gen, bitmap artificial_uses) + bitmap live, bitmap do_not_gen, bitmap artificial_uses) { basic_block bb = BASIC_BLOCK (bb_index); rtx insn; @@ -4012,17 +4005,17 @@ df_note_bb_compute (unsigned int bb_inde for (def_rec = DF_INSN_UID_DEFS (uid); *def_rec; def_rec++) { struct df_ref *def = *def_rec; - if (!(DF_REF_FLAGS (def) & (DF_REF_MUST_CLOBBER | DF_REF_MAY_CLOBBER))) - old_unused_notes - = df_create_unused_note (insn, old_unused_notes, - def, live, do_not_gen, - artificial_uses); - - /* However a may or must clobber still needs to kill the - reg so that REG_DEAD notes are later placed - appropriately. */ - else - bitmap_clear_bit (live, DF_REF_REGNO (def)); + unsigned int dregno = DF_REF_REGNO (def); + if (!DF_REF_FLAGS_IS_SET (def, DF_REF_MUST_CLOBBER | DF_REF_MAY_CLOBBER)) + { + old_unused_notes + = df_create_unused_note (insn, old_unused_notes, + def, live, artificial_uses); + bitmap_set_bit (do_not_gen, dregno); + } + + if (!DF_REF_FLAGS_IS_SET (def, DF_REF_PARTIAL | DF_REF_CONDITIONAL)) + bitmap_clear_bit (live, dregno); } } else @@ -4043,10 +4036,16 @@ df_note_bb_compute (unsigned int bb_inde for (def_rec = DF_INSN_UID_DEFS (uid); *def_rec; def_rec++) { struct df_ref *def = *def_rec; + unsigned int dregno = DF_REF_REGNO (def); old_unused_notes = df_create_unused_note (insn, old_unused_notes, - def, live, do_not_gen, - artificial_uses); + def, live, artificial_uses); + + if (!DF_REF_FLAGS_IS_SET (def, DF_REF_MUST_CLOBBER | DF_REF_MAY_CLOBBER)) + bitmap_set_bit (do_not_gen, dregno); + + if (!DF_REF_FLAGS_IS_SET (def, DF_REF_PARTIAL | DF_REF_CONDITIONAL)) + bitmap_clear_bit (live, dregno); } }
revision 126987