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: Fix PR 83962


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.

> Best,
> Andrey
> 
> 2018-04-03  Andrey Belevantsev  <abel@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);
> +}
> 


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