view gcc/testsuite/gcc.dg/ipa/pr91089.c @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents
children
line wrap: on
line source

/* { dg-do compile } */
/* { dg-options "-O3 -fdump-ipa-cp-details -fdump-ipa-fnsummary-details --param ipa-max-switch-predicate-bounds=10 -fno-inline" } */

int fn ();

int data;

int callee (int i)
{
  switch (i % 128)
    {
      case -126:  return i + 13;
      case -127:  return i + 5;
      case -8:    return i * i;
      case 0:     return i % 9;
      case 5:
      case 7:
      case 6:     return 3;
      default:
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
     }

  return data += i;
}

int fn2 ();

int callee_complex_predicate (int i)
{
  switch (i)
    {
      case 0:
	fn ();
	fn ();
	fn ();
      case 1:
	fn ();
	fn ();
      case -1:
	fn ();
      case -2:
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	fn ();
	data += i;
	break;
    }

  if (i == 1000)
    {
      int j;

      for (j = 0; j < 100; j++)
	fn2 ();
    }
  return i + 3;
}

int caller ()
{
  return callee (-127) +
	 callee (-126) +
	 callee (-8) +
	 callee (0) +
	 callee (5) +
	 callee (6) +
	 callee (7) +
	 callee (100);
}
 
/* { dg-final { scan-ipa-dump-times "Creating a specialized node of callee" 7 "cp" } } */
/* { dg-final { scan-ipa-dump-not "op0,\\(# % 128\\) < -127" "fnsummary" } } */
/* { dg-final { scan-ipa-dump "op0,\\(# % 128\\) > -126" "fnsummary" } } */
/* { dg-final { scan-ipa-dump "op0,\\(# % 128\\) != -8"  "fnsummary" } } */
/* { dg-final { scan-ipa-dump "op0,\\(# % 128\\) != 0"   "fnsummary" } } */
/* { dg-final { scan-ipa-dump "op0,\\(# % 128\\) < 5"    "fnsummary" } } */
/* { dg-final { scan-ipa-dump "op0,\\(# % 128\\) > 7"    "fnsummary" } } */
/* { dg-final { scan-ipa-dump "loop depth: 1 .+ time:\[ \]*\[0-9\]+ predicate: \\(op0 == 1000\\)\[\r\n]+" "fnsummary" } } */