This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH, PR81192] Don't tail-merge blocks from different loops


On Mon, 3 Jul 2017, Tom de Vries wrote:

> [ was: Re: [PATCH, PR81192] Fix sigsegv in find_same_succ_bb ]
> 
> On 07/03/2017 12:26 AM, Tom de Vries wrote:
> > [ Trying again with before.svg instead of before.pdf ]
> > 
> > Hi,
> > 
> > consider this test-case:
> > ...
> > unsigned a;
> > int b, c;
> > 
> > static int
> > fn1 (int p1, int p2)
> > {
> >    return p1 > 2147483647 - p2 ? p1 : p1 + p2;
> > }
> > 
> > void
> > fn2 (void)
> > {
> >    int j;
> >    a = 30;
> >    for (; a;)
> >      for (; c; b = fn1 (j, 1))
> >        ;
> > }
> > ...
> > 
> > When compiling the test-case with -Os, just before tail-merge it looks as in
> > before.svg.
> > 
> > During tail-merge, it runs into a sigsegv.
> > 
> > What happens is the following:
> > - tail-merge decides to merge blocks 4 and 6, and removes block 6.
> 
> As pointed out in the PR, blocks 4 and 6 belong to different loops, and
> shouldn't be merged.
> 
> There is a test 'bb->loop_father->latch == bb' in find_same_succ_bb that is
> supposed to keep the two blocks from merging, but the test is not working for
> this example because the latch field is not defined (because the loop has in
> fact two latches).
> 
> This patch prevents blocks from different loops to be merged by testing for
> bb->loop_father->num equivalence in tail-merge.

You can compare bb->loop_father directly.

> It also removes the unreliable test for 'bb->loop_father->latch == bb' in
> find_same_succ_bb.
> 
> Bootstrapped and reg-tested on x86_64.
> 
> OK for trunk and gcc-[567]-branch?

Ok for trunk with the above change, as we do not have any wrong-code/ICE
testcase that fails on branches I'd not backport this.  Maybe to the
GCC 7 branch but certainly not farther.

Thanks,
Richard.

> Thanks,
> - Tom
> 
> 

-- 
Richard Biener <rguenther@suse.de>
SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nuernberg)


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]