On 06.04.2018 18:59, Alexander Monakov wrote:
> On Tue, 3 Apr 2018, Andrey Belevantsev wrote:
> 
>> Hello,
>>
>> This issues is about the correct order in which we need to call the
>> routines that fix up the control flow for us.
> 
> OK with formatting both in the new comment and the Changelog fixed.

Thanks, fixed that in rev. 259229.

Andrey

> 
>> Best,
>> Andrey
>>
>> 2018-04-03  Andrey Belevantsev  <a...@ispras.ru>
>>
>>      PR rtl-optimization/83962
>>
>>      * sel-sched-ir.c (tidy_control_flow): Correct the order in which we call
>> tidy_fallthru_edge
>>      and tidy_control_flow.
>>
>>      * gcc.dg/pr83962.c: New test.
>>
>> diff --git a/gcc/sel-sched-ir.c b/gcc/sel-sched-ir.c
>> index a965d2ec42f..f6de96a7f3d 100644
>> --- a/gcc/sel-sched-ir.c
>> +++ b/gcc/sel-sched-ir.c
>> @@ -3839,9 +3839,13 @@ tidy_control_flow (basic_block xbb, bool full_tidying)
>>        && INSN_SCHED_TIMES (BB_END (xbb)) == 0
>>        && !IN_CURRENT_FENCE_P (BB_END (xbb)))
>>      {
>> -      if (sel_remove_insn (BB_END (xbb), false, false))
>> -        return true;
>> +      /* We used to call sel_remove_insn here that can trigger
>> tidy_control_flow
>> +         before we fix up the fallthru edge.  Correct that ordering by
>> +        explicitly doing the latter before the former.  */
>> +      clear_expr (INSN_EXPR (BB_END (xbb)));
>>        tidy_fallthru_edge (EDGE_SUCC (xbb, 0));
>> +      if (tidy_control_flow (xbb, false))
>> +       return true;
>>      }
>>
>>    first = sel_bb_head (xbb);
>> diff --git a/gcc/testsuite/gcc.dg/pr83962.c b/gcc/testsuite/gcc.dg/pr83962.c
>> new file mode 100644
>> index 00000000000..0547e218715
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.dg/pr83962.c
>> @@ -0,0 +1,10 @@
>> +/* { dg-do compile { target powerpc*-*-* ia64-*-* i?86-*-* x86_64-*-* } } */
>> +/* { dg-options "-std=gnu99 -O1 -fselective-scheduling2 -fschedule-insns2
>> -fcse-follow-jumps -fno-ssa-phiopt -fno-guess-branch-probability" } */
>> +unsigned int ca;
>> +
>> +void
>> +v6 (long long unsigned int as, int p9)
>> +{
>> +  while (p9 < 1)
>> +    as = (as != ca) || (as > 1);
>> +}
>>

Reply via email to