blob: 9bd16b0c1cb631897582304bf008a0a721541f12 [file] [log] [blame]
/* { dg-do compile } */
/* { dg-options "-O2 -fdump-ipa-icf-optimized-all-all" } */
#include <stdlib.h>
#include <stdio.h>
int gcd(int x, int y) __attribute__ ((pure));
__attribute__ ((noinline))
int gcd(int x, int y)
{
int swap;
if(x <= 0 || y <= 0)
return 0;
if(x < y)
{
swap = x;
x = y;
y = swap;
}
while(x != y)
{
x = x - y;
if(y > x)
{
swap = x;
x = y;
y = swap;
}
}
return x;
}
int nsd(int x, int y) __attribute__ ((pure));
__attribute__ ((noinline))
int nsd(int x, int y)
{
int swap;
if(x <= 0 || y <= 0)
return 0;
if(x < y)
{
swap = x;
x = y;
y = swap;
}
while(x != y)
{
x = x - y;
if(y > x)
{
swap = x;
x = y;
y = swap;
}
}
return x;
}
int nsd_different_result(int x, int y) __attribute__ ((pure));
__attribute__ ((noinline))
int nsd_different_result(int x, int y)
{
int pes;
if(x <= 0 || y <= 0)
return 1;
if(x < 10)
y = 12;
else if(x == 44)
y = 124;
else
y = 1111;
if(x < y)
{
pes = x;
x = y;
y = pes;
}
while(x != y)
{
x = x - y;
if(y > x)
{
pes = x;
x = y;
y = pes;
}
}
return x;
}
int nsd_different_result2(int x, int y) __attribute__ ((pure));
__attribute__ ((noinline))
int nsd_different_result2(int x, int y)
{
int pes;
if(x <= 0 || y <= 0)
return 1;
if(x < 10)
y = 12;
else if(x == 44)
y = 124;
else
y = 1111;
if(x < y)
{
pes = x;
x = y;
y = pes;
}
while(x != y)
{
x = x - y;
if(y > x)
{
pes = x;
x = y;
y = pes;
}
}
return x;
}
__attribute__ ((noinline))
int s1(int x)
{
switch (x)
{
case 10:
case 11:
return 2;
case 12:
return 123;
default:
return x + 2;
}
}
__attribute__ ((noinline))
int s2(int x)
{
switch (x)
{
case 10:
case 11:
return 2;
case 12:
return 123;
default:
return x + 2;
}
}
int main(int argc, char **argv)
{
if(argc < 3)
return 1;
int a = atoi(argv[1]);
int b = atoi(argv[2]);
printf("Test1: %d, %d, gdc: %d\n", a, b, gcd(a, b));
printf("Test2: %d, %d, gdc: %d\n", a, b, nsd(a, b));
}
/* { dg-final { scan-ipa-dump "Semantic equality hit:s1/\[0-9+\]+->s2/\[0-9+\]+" "icf" } } */
/* { dg-final { scan-ipa-dump "Semantic equality hit:nsd_different_result/\[0-9+\]+->nsd_different_result2/\[0-9+\]+" "icf" } } */
/* { dg-final { scan-ipa-dump "Semantic equality hit:gcd/\[0-9+\]+->nsd/\[0-9+\]+" "icf" } } */
/* { dg-final { scan-ipa-dump "Equal symbols: 3" "icf" } } */