PR ipa/61602
[official-gcc.git] / gcc / testsuite / gcc.dg / torture / stackalign / regparm-1.c
blobb9acacf9ed592efffd381b568c49401fa8df6272
1 /* { dg-do run { target { { i?86-*-* x86_64-*-* } && ia32 } } } */
3 #include "check.h"
5 #ifndef ALIGNMENT
6 #define ALIGNMENT 64
7 #endif
9 typedef int aligned __attribute__((aligned(ALIGNMENT)));
11 int test_nested (int i)
13 aligned y;
15 int __attribute__ ((__noinline__, __regparm__(2))) foo (int j, int k, int l)
17 aligned x;
19 if (check_int (&x, __alignof__(x)) != x)
20 abort ();
22 if (x != 20)
23 abort ();
25 return i + j + k + l;
28 if (check_int (&y, __alignof__(y)) != y)
29 abort ();
31 if (y != 20)
32 abort ();
34 return foo(i, i+1, i+2) * i;
37 int __attribute__ ((__noinline__, __regparm__(3), __force_align_arg_pointer__))
38 test_realigned (int j, int k, int l)
40 aligned y;
42 if (check_int (&y, __alignof__(y)) != y)
43 abort ();
45 if (y != 20)
46 abort ();
48 return j + k + l;
51 int main ()
53 if (test_nested(10) != 430)
54 abort ();
56 if (test_realigned(10, 11, 12) != 33)
57 abort ();
59 return 0;