On Tue, Feb 25, 2014 at 12:20 PM, bin.cheng <bin.ch...@arm.com> wrote:
> Updated as comments.

Ok.

Thanks,
Richard.

> Thanks,
> bin
>
>> -----Original Message-----
>> From: Richard Biener [mailto:richard.guent...@gmail.com]
>> Sent: Tuesday, February 25, 2014 6:38 PM
>> To: Bin Cheng
>> Cc: GCC Patches
>> Subject: Re: [PATCH GCC]Allow cfgcleanup to remove forwarder loop
>> preheaders and latches
>>
>> On Tue, Feb 25, 2014 at 6:12 AM, bin.cheng <bin.ch...@arm.com> wrote:
>> > Hi,
>> > This patch is to fix regression reported in PR60280 by removing
>> > forward loop headers/latches in cfg cleanup if possible.  Several
>> > tests are broken by this change since cfg cleanup is shared by all
>> > optimizers.  Some tests has already been fixed by recent patches, I went
>> through and fixed the others.
>> > One case needs to be clarified is "gcc.dg/tree-prof/update-loopch.c".
>> > When GCC removing a basic block, it checks profile information by
>> > calling check_bb_profile after redirecting incoming edges of the bb.
>> > This certainly results in warnings about invalid profile information
>> > and causes the case to fail.  I will send a patch to skip checking
>> > profile information for a removing basic block in stage 1 if it sounds
>> > reasonable.  For now I just twisted the case itself.
>> >
>> > Bootstrap and tested on x86_64 and arm_a15.
>> >
>> > Is it OK?
>>
>> Can you document the extra threading we do in pr21559.c?  The comment
>> still talks about two threadings we should perform.
>>
>> Also the ivopt_* adjustmens would be better done by matching
>> "ivtmp.[0-9_]* = PHI" instead of matching ivtmp in one of the PHI
> arguments.
>>
>> @@ -497,6 +507,9 @@ remove_forwarder_block (basic_block bb)
>>        set_immediate_dominator (CDI_DOMINATORS, dest, dom);
>>      }
>>
>> +  if (current_loops && bb->loop_father->latch == bb)
>> +    bb->loop_father->latch = dest;
>> +
>>    /* And kill the forwarder block.  */
>>    delete_basic_block (bb);
>>
>> can you add a comment here?  I had
>>
>> @@ -497,7 +500,12 @@ remove_forwarder_block (basic_block bb)
>>        set_immediate_dominator (CDI_DOMINATORS, dest, dom);
>>      }
>>
>> -  /* And kill the forwarder block.  */
>> +  /* And kill the forwarder block, but first adjust its parent loop
>> +     latch info as otherwise the cfg hook has a hard time not to
>> +     kill the loop.  */
>> +  if (current_loops
>> +      && bb->loop_father->latch == bb)
>> +    bb->loop_father->latch = dest;
>>    delete_basic_block (bb);
>>
>>    return true;
>>
>> in my patch.
>>
>> Thanks,
>> Richard.
>>
>> >
>> > 2014-02-25  Bin Cheng  <bin.ch...@arm.com>
>> >
>> >         PR target/60280
>> >         * tree-cfgcleanup.c (tree_forwarder_block_p): Protect loop
>> >         preheaders and latches only if requested.  Fix latch if it
>> >         is removed.
>> >         * tree-ssa-dom.c (tree_ssa_dominator_optimize): Set
>> >         LOOPS_HAVE_PREHEADERS.
>> >
>> > gcc/testsuite/ChangeLog
>> > 2014-02-25  Bin Cheng  <bin.ch...@arm.com>
>> >
>> >         PR target/60280
>> >         * gnat.dg/renaming5.adb: Change to two expected gotos.
>> >         * gcc.dg/tree-ssa/pr21559.c: Change back to three expected
>> >         jump threads.
>> >         * gcc.dg/tree-prof/update-loopch.c: Check two "Invalid sum"
>> >         messages for removed basic block.
>> >         * gcc.dg/tree-ssa/ivopt_1.c: Fix unreliable scanning string.
>> >         * gcc.dg/tree-ssa/ivopt_2.c: Ditto.
>> >         * gcc.dg/tree-ssa/ivopt_3.c: Ditto.
>> >         * gcc.dg/tree-ssa/ivopt_4.c: Ditto.

Reply via email to