1/* Check that indirect sibcalls understand regparm.  */
2/* { dg-do run } */
3/* { dg-require-effective-target ilp32 } */
4/* { dg-options "-O2" } */
5
6extern void abort (void);
7
8int (*f)(int, int) __attribute__((regparm(2)));
9int (*g)(int, int, int) __attribute__((regparm(3)));
10
11int __attribute__((noinline))
12foo(void)
13{
14  return f(1, 2);
15}
16
17int __attribute__((noinline))
18bar(void)
19{
20  return g(1, 2, 3);
21}
22
23int __attribute__((regparm(2)))
24f1(int x, int y)
25{
26  return x*3 + y;
27}
28
29int __attribute__((regparm(3)))
30g1(int x, int y, int z)
31{
32  return x*9 + y*3 + z;
33}
34
35int main()
36{
37  f = f1;
38  g = g1;
39  if (foo() != 1*3 + 2)
40    abort ();
41  if (bar() != 1*9 + 2*3 + 3)
42    abort ();
43  return 0;
44}
45