view gcc/testsuite/gcc.dg/tree-ssa/pr66752-3.c @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children
line wrap: on
line source

/* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-thread1-details -fdump-tree-dce2" } */

extern int status, pt;
extern int count;
void
foo (int N, int c, int b, int *a)
{
  int i, flag;
  i = b -1;
  flag = 1;
  if (status && i < N && a[i] == b) {
    N--;
    flag = 0;
   if (pt)
     count++;
  }
  else    
    for (i = -1, flag = 1; ++i < N && flag;)
      if (a[i] == b)
        {
          --N;
          flag = 0;
          if (i < N)
            a[i] = a[N];
           else
            a[i] = 0;
          if (pt)
            count++;
        }
 if(status && flag)
   pt--;
}

/* There are 4 FSM jump threading opportunities, all of which will be
   realized, which will eliminate testing of FLAG, completely.  */
/* { dg-final { scan-tree-dump-times "Registering FSM" 4 "thread1"} } */

/* There should be no assignments or references to FLAG, verify they're
   eliminated as early as possible.  */
/* { dg-final { scan-tree-dump-not "if .flag" "dce2"} } */