1/* PR middle-end/44071 */
2/* { dg-do run } */
3/* { dg-options "-O2" } */
4
5static inline int
6f1 (void)
7{
8  asm goto ("jmp %l[l1]" : : : : l1, l2);
9  __builtin_unreachable ();
10 l1:
11  return 1;
12 l2:
13  return 0;
14}
15
16__attribute__((noinline)) int
17b1 (int x)
18{
19  if (f1 () || x == 6)
20    x = 1;
21  else
22    x = 2;
23  return x;
24}
25
26static inline int
27f2 (void)
28{
29  asm goto ("jmp %l[l2]" : : : : l1, l2);
30  __builtin_unreachable ();
31 l1:
32  return 1;
33 l2:
34  return 0;
35}
36
37__attribute__((noinline)) int
38b2 (int x)
39{
40  if (f2 () || x == 6)
41    x = 1;
42  else
43    x = 2;
44  return x;
45}
46
47static inline int
48f3 (void)
49{
50  asm goto ("jmp %l[l1]" : : : : l1, l2);
51 l1:
52  return 1;
53 l2:
54  return 0;
55}
56
57__attribute__((noinline)) int
58b3 (int x)
59{
60  if (f3 () || x == 6)
61    x = 1;
62  else
63    x = 2;
64  return x;
65}
66
67static inline int
68f4 (void)
69{
70  asm goto ("jmp %l[l2]" : : : : l1, l2);
71 l1:
72  return 1;
73 l2:
74  return 0;
75}
76
77__attribute__((noinline)) int
78b4 (int x)
79{
80  if (f4 () || x == 6)
81    x = 1;
82  else
83    x = 2;
84  return x;
85}
86
87extern void abort (void);
88
89int
90main (void)
91{
92  int x;
93  asm ("" : "=r" (x) : "0" (0));
94  if (b1 (x) != 1 || b1 (x + 6) != 1)
95    abort ();
96  if (b2 (x) != 2 || b2 (x + 6) != 1)
97    abort ();
98  if (b3 (x) != 1 || b3 (x + 6) != 1)
99    abort ();
100  if (b4 (x) != 2 || b4 (x + 6) != 1)
101    abort ();
102  return 0;
103}
104