1/* { dg-do compile } */
2/* { dg-options "-O2 -fdump-ipa-icf"  } */
3
4#include <stdlib.h>
5#include <stdio.h>
6
7int gcd(int x, int y) __attribute__ ((pure));
8
9__attribute__ ((noinline))
10int gcd(int x, int y)
11{
12  int swap;
13
14  if(x <= 0 || y <= 0)
15    return 0;
16
17  if(x < y)
18    {
19      swap = x;
20      x = y;
21      y = swap;
22    }
23
24  while(x != y)
25    {
26      x = x - y;
27
28      if(y > x)
29	{
30	  swap = x;
31	  x = y;
32	  y = swap;
33	}
34    }
35
36  return x;
37}
38
39int nsd(int x, int y) __attribute__ ((pure));
40
41__attribute__ ((noinline))
42int nsd(int x, int y)
43{
44  int swap;
45
46  if(x <= 0 || y <= 0)
47    return 0;
48
49  if(x < y)
50    {
51      swap = x;
52      x = y;
53      y = swap;
54    }
55
56  while(x != y)
57    {
58      x = x - y;
59
60      if(y > x)
61	{
62	  swap = x;
63	  x = y;
64	  y = swap;
65	}
66    }
67
68  return x;
69}
70
71int main(int argc, char **argv)
72{
73  return 0;
74}
75
76/* { dg-final { scan-ipa-dump "Semantic equality hit:nsd->gcd" "icf"  } } */
77/* { dg-final { scan-ipa-dump "Equal symbols: 1" "icf"  } } */
78/* { dg-final { cleanup-ipa-dump "icf" } } */
79