/* { dg-do compile } */
/* { dg-options "-Os -fipa-cp -fdump-ipa-cp -fno-early-inlining -fdump-tree-optimized -fno-ipa-icf"  } */

int array[100];

int t(int);

static int 
i_can_be_propagated_fully (int *a)
{
  int i;
  for (i=0;i<50;i++)
  {
    t(a[i]);
    t(a[i+1]);
    t(a[i+2]);
    t(a[i+3]);
  }
}
static int 
i_can_be_propagated_fully2 (int *a)
{
  i_can_be_propagated_fully (a);
  i_can_be_propagated_fully (a);
  i_can_be_propagated_fully (a);
}
static int 
i_can_not_be_propagated_fully (int *a)
{
  int i;
  for (i=0;i<50;i++)
  {
    t(a[i]);
    t(a[i+1]);
    t(a[i+2]);
    t(a[i+3]);
  }
}
int 
i_can_not_be_propagated_fully2 (int *a)
{
  i_can_not_be_propagated_fully (a);
  i_can_not_be_propagated_fully (a);
  i_can_not_be_propagated_fully (a);
}
int
main()
{
  i_can_be_propagated_fully2 (array);
  i_can_be_propagated_fully2 (array);
  i_can_not_be_propagated_fully2 (array);
  i_can_not_be_propagated_fully2 (array);
}

/* { dg-final { scan-ipa-dump-times "Creating a specialized node of i_can_be_propagated_fully2" 1 "cp"  } } */
/* { dg-final { scan-ipa-dump-times "Creating a specialized node of i_can_be_propagated_fully/" 1 "cp"  } } */
/* { dg-final { scan-ipa-dump-not "Creating a specialized node of i_can_not_be_propagated_fully2" "cp"  } } */
/* { dg-final { scan-ipa-dump-not "Creating a specialized node of i_can_not_be_propagated_fully/" "cp"  } } */
/* { dg-final { scan-tree-dump-not "i_can_be_propagated_fully " "optimized"  } } */
/* { dg-final { scan-tree-dump-not "i_can_be_propagated_fully2 " "optimized"  } } */
