Re: [PATCH] Remove unnecessary jump threading restriction
On 08/06/2016 05:34 AM, Richard Biener wrote: On Fri, Aug 5, 2016 at 10:43 PM, Jeff Lawwrote On 08/05/2016 01:45 AM, Richard Biener wrote: There is no need to avoid threading to a loop header, the threading code can cope with this just fine. Noticed when working on PR72772. Bootstrapped and tested on x86_64-unknown-linux-gnu, applied to trunk. Richard. 2016-08-05 Richard Biener * tree-ssa-threadupdate.c (thread_block_1): Remove unnecessary restriction on threading to a loop header. This restriction exists to help prevent threading through a loop header into the loop which can easily create an irreducible region. In fact what you've done is revert the fix for 58343. Now there is of course a test for 58343 in the regression suite. It's entirely possible that 58343 is just latent now or other changes in tree-ssa-threadupdate.c prevent the problems that we saw with 58343. Well, I removed the restriction that the forward threading path ends in a loop header. I did this to restore threadings we've done when there was a forwarder before the loop header we threaded to -- a forwarder with a degenerate PHI that was later removed and merged with the header anyway. So I basically changed nothing here. I also don't see how forward threading to a loop header (not across it) can cause an irreducible region to appear - the other part of the condition which I retained certainly guards the case of crossing a loop header. But maybe I am missing something. I think we can thread to the loop header, but into the loop. Jeff
Re: [PATCH] Remove unnecessary jump threading restriction
On Fri, Aug 5, 2016 at 10:43 PM, Jeff Lawwrote > On 08/05/2016 01:45 AM, Richard Biener wrote: >> >> >> There is no need to avoid threading to a loop header, the threading >> code can cope with this just fine. Noticed when working on PR72772. >> >> Bootstrapped and tested on x86_64-unknown-linux-gnu, applied to trunk. >> >> Richard. >> >> 2016-08-05 Richard Biener >> >> * tree-ssa-threadupdate.c (thread_block_1): Remove unnecessary >> restriction on threading to a loop header. > > This restriction exists to help prevent threading through a loop header into > the loop which can easily create an irreducible region. > > In fact what you've done is revert the fix for 58343. Now there is of > course a test for 58343 in the regression suite. > > It's entirely possible that 58343 is just latent now or other changes in > tree-ssa-threadupdate.c prevent the problems that we saw with 58343. Well, I removed the restriction that the forward threading path ends in a loop header. I did this to restore threadings we've done when there was a forwarder before the loop header we threaded to -- a forwarder with a degenerate PHI that was later removed and merged with the header anyway. So I basically changed nothing here. I also don't see how forward threading to a loop header (not across it) can cause an irreducible region to appear - the other part of the condition which I retained certainly guards the case of crossing a loop header. But maybe I am missing something. Richard. > Jeff >
Re: [PATCH] Remove unnecessary jump threading restriction
On 08/05/2016 01:45 AM, Richard Biener wrote: There is no need to avoid threading to a loop header, the threading code can cope with this just fine. Noticed when working on PR72772. Bootstrapped and tested on x86_64-unknown-linux-gnu, applied to trunk. Richard. 2016-08-05 Richard Biener* tree-ssa-threadupdate.c (thread_block_1): Remove unnecessary restriction on threading to a loop header. This restriction exists to help prevent threading through a loop header into the loop which can easily create an irreducible region. In fact what you've done is revert the fix for 58343. Now there is of course a test for 58343 in the regression suite. It's entirely possible that 58343 is just latent now or other changes in tree-ssa-threadupdate.c prevent the problems that we saw with 58343. Jeff
[PATCH] Remove unnecessary jump threading restriction
There is no need to avoid threading to a loop header, the threading code can cope with this just fine. Noticed when working on PR72772. Bootstrapped and tested on x86_64-unknown-linux-gnu, applied to trunk. Richard. 2016-08-05 Richard Biener* tree-ssa-threadupdate.c (thread_block_1): Remove unnecessary restriction on threading to a loop header. Index: gcc/tree-ssa-threadupdate.c === --- gcc/tree-ssa-threadupdate.c (revision 239117) +++ gcc/tree-ssa-threadupdate.c (working copy) @@ -1531,10 +1531,8 @@ thread_block_1 (basic_block bb, bool nol threading path that crosses loop boundaries. We do not try and thread this elsewhere, so just cancel the jump threading request by clearing the AUX field now. */ - if ((bb->loop_father != e2->src->loop_father - && !loop_exit_edge_p (e2->src->loop_father, e2)) - || (e2->src->loop_father != e2->dest->loop_father - && !loop_exit_edge_p (e2->src->loop_father, e2))) + if (bb->loop_father != e2->src->loop_father + && !loop_exit_edge_p (e2->src->loop_father, e2)) { /* Since this case is not handled by our special code to thread through a loop header, we must explicitly