annotate gcc/testsuite/gcc.dg/tree-ssa/stdarg-5.c @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* This test has architecture specific function passing details. */
kono
parents:
diff changeset
2 /* { dg-do compile } */
kono
parents:
diff changeset
3 /* { dg-options "-O2 -fdump-tree-stdarg" } */
kono
parents:
diff changeset
4
kono
parents:
diff changeset
5 #include <stdarg.h>
kono
parents:
diff changeset
6
kono
parents:
diff changeset
7 extern void foo (int, va_list);
kono
parents:
diff changeset
8 extern void bar (int);
kono
parents:
diff changeset
9 struct S1 { int i; double d; int j; double e; } s1;
kono
parents:
diff changeset
10 struct S2 { double d; long i; } s2;
kono
parents:
diff changeset
11 int y;
kono
parents:
diff changeset
12 _Complex int ci;
kono
parents:
diff changeset
13 _Complex double cd;
kono
parents:
diff changeset
14
kono
parents:
diff changeset
15 /* Here va_arg can be executed more than once for one va_start. */
kono
parents:
diff changeset
16 void
kono
parents:
diff changeset
17 f1 (int i, ...)
kono
parents:
diff changeset
18 {
kono
parents:
diff changeset
19 va_list ap;
kono
parents:
diff changeset
20 va_start (ap, i);
kono
parents:
diff changeset
21 while (i-- > 0)
kono
parents:
diff changeset
22 s1 = va_arg (ap, struct S1);
kono
parents:
diff changeset
23 va_end (ap);
kono
parents:
diff changeset
24 }
kono
parents:
diff changeset
25 /* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save 0 GPR units and 0 FPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && { ! { ia32 || llp64 } } } } } } */
kono
parents:
diff changeset
26 /* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save all GPR units and 1" "stdarg" { target alpha*-*-linux* } } } */
kono
parents:
diff changeset
27 /* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save all GPR units and 0 FPR units" "stdarg" { target s390*-*-linux* } } } */
kono
parents:
diff changeset
28 /* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save all GPR units and 0 FPR units" "stdarg" { target aarch64*-*-* } } } */
kono
parents:
diff changeset
29
kono
parents:
diff changeset
30 void
kono
parents:
diff changeset
31 f2 (int i, ...)
kono
parents:
diff changeset
32 {
kono
parents:
diff changeset
33 va_list ap;
kono
parents:
diff changeset
34 va_start (ap, i);
kono
parents:
diff changeset
35 while (i-- > 0)
kono
parents:
diff changeset
36 s2 = va_arg (ap, struct S2);
kono
parents:
diff changeset
37 va_end (ap);
kono
parents:
diff changeset
38 }
kono
parents:
diff changeset
39 /* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save all GPR units and all FPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && { ! { ia32 || llp64 } } } } } } */
kono
parents:
diff changeset
40 /* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save all GPR units and 1" "stdarg" { target alpha*-*-linux* } } } */
kono
parents:
diff changeset
41 /* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save all GPR units and 0 FPR units" "stdarg" { target s390*-*-linux* } } } */
kono
parents:
diff changeset
42 /* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save all GPR units and 0 FPR units" "stdarg" { target aarch64*-*-* } } } */
kono
parents:
diff changeset
43
kono
parents:
diff changeset
44 /* Here va_arg can be executed at most as many times as va_start. */
kono
parents:
diff changeset
45 void
kono
parents:
diff changeset
46 f3 (int i, ...)
kono
parents:
diff changeset
47 {
kono
parents:
diff changeset
48 va_list ap;
kono
parents:
diff changeset
49 int j = i;
kono
parents:
diff changeset
50 while (j-- > 0)
kono
parents:
diff changeset
51 {
kono
parents:
diff changeset
52 va_start (ap, i);
kono
parents:
diff changeset
53 s1 = va_arg (ap, struct S1);
kono
parents:
diff changeset
54 va_end (ap);
kono
parents:
diff changeset
55 bar (s1.i);
kono
parents:
diff changeset
56 }
kono
parents:
diff changeset
57 }
kono
parents:
diff changeset
58 /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save 0 GPR units and 0 FPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && { ! { ia32 || llp64 } } } } } } */
kono
parents:
diff changeset
59 /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save 32 GPR units and 1" "stdarg" { target alpha*-*-linux* } } } */
kono
parents:
diff changeset
60 /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save 1 GPR units and 0 FPR units" "stdarg" { target s390*-*-linux* } } } */
kono
parents:
diff changeset
61 /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save 8 GPR units and 0 FPR units" "stdarg" { target aarch64*-*-* } } } */
kono
parents:
diff changeset
62
kono
parents:
diff changeset
63 void
kono
parents:
diff changeset
64 f4 (int i, ...)
kono
parents:
diff changeset
65 {
kono
parents:
diff changeset
66 va_list ap;
kono
parents:
diff changeset
67 int j = i;
kono
parents:
diff changeset
68 while (j-- > 0)
kono
parents:
diff changeset
69 {
kono
parents:
diff changeset
70 va_start (ap, i);
kono
parents:
diff changeset
71 s2 = va_arg (ap, struct S2);
kono
parents:
diff changeset
72 y = va_arg (ap, int);
kono
parents:
diff changeset
73 va_end (ap);
kono
parents:
diff changeset
74 bar (s2.i);
kono
parents:
diff changeset
75 }
kono
parents:
diff changeset
76 }
kono
parents:
diff changeset
77 /* { dg-final { scan-tree-dump "f4: va_list escapes 0, needs to save 16 GPR units and 16 FPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && { ! { ia32 || llp64 } } } } } } */
kono
parents:
diff changeset
78 /* { dg-final { scan-tree-dump "f4: va_list escapes 0, needs to save 24 GPR units and 1" "stdarg" { target alpha*-*-linux* } } } */
kono
parents:
diff changeset
79 /* { dg-final { scan-tree-dump "f4: va_list escapes 0, needs to save 2 GPR units and 0 FPR units" "stdarg" { target s390*-*-linux* } } } */
kono
parents:
diff changeset
80 /* { dg-final { scan-tree-dump "f4: va_list escapes 0, needs to save 24 GPR units and 0 FPR units" "stdarg" { target aarch64*-*-* } } } */
kono
parents:
diff changeset
81
kono
parents:
diff changeset
82 void
kono
parents:
diff changeset
83 f5 (int i, ...)
kono
parents:
diff changeset
84 {
kono
parents:
diff changeset
85 va_list ap;
kono
parents:
diff changeset
86 va_start (ap, i);
kono
parents:
diff changeset
87 ci = va_arg (ap, _Complex int);
kono
parents:
diff changeset
88 ci += va_arg (ap, _Complex int);
kono
parents:
diff changeset
89 va_end (ap);
kono
parents:
diff changeset
90 bar (__real__ ci + __imag__ ci);
kono
parents:
diff changeset
91 }
kono
parents:
diff changeset
92 /* { dg-final { scan-tree-dump "f5: va_list escapes 0, needs to save 16 GPR units and 0 FPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && { ! { ia32 || llp64 } } } } } } */
kono
parents:
diff changeset
93 /* { dg-final { scan-tree-dump "f5: va_list escapes 0, needs to save 32 GPR units and 1" "stdarg" { target alpha*-*-linux* } } } */
kono
parents:
diff changeset
94 /* { dg-final { scan-tree-dump "f5: va_list escapes 0, needs to save (4|2) GPR units and 0 FPR units" "stdarg" { target s390*-*-linux* } } } */
kono
parents:
diff changeset
95 /* { dg-final { scan-tree-dump "f5: va_list escapes 0, needs to save 16 GPR units and 0 FPR units" "stdarg" { target aarch64*-*-* } } } */
kono
parents:
diff changeset
96
kono
parents:
diff changeset
97 void
kono
parents:
diff changeset
98 f6 (int i, ...)
kono
parents:
diff changeset
99 {
kono
parents:
diff changeset
100 va_list ap;
kono
parents:
diff changeset
101 va_start (ap, i);
kono
parents:
diff changeset
102 ci = va_arg (ap, _Complex int);
kono
parents:
diff changeset
103 cd = va_arg (ap, _Complex double);
kono
parents:
diff changeset
104 va_end (ap);
kono
parents:
diff changeset
105 bar (__real__ ci + __imag__ cd);
kono
parents:
diff changeset
106 }
kono
parents:
diff changeset
107 /* { dg-final { scan-tree-dump "f6: va_list escapes 0, needs to save 8 GPR units and 32 FPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && { ! { ia32 || llp64 } } } } } } */
kono
parents:
diff changeset
108 /* { dg-final { scan-tree-dump "f6: va_list escapes 0, needs to save 32 GPR units and 3" "stdarg" { target alpha*-*-linux* } } } */
kono
parents:
diff changeset
109 /* { dg-final { scan-tree-dump "f6: va_list escapes 0, needs to save (3|2) GPR units and 0 FPR units" "stdarg" { target s390*-*-linux* } } } */
kono
parents:
diff changeset
110 /* { dg-final { scan-tree-dump "f6: va_list escapes 0, needs to save 8 GPR units and 32 FPR units" "stdarg" { target aarch64*-*-* } } } */
kono
parents:
diff changeset
111
kono
parents:
diff changeset
112 void
kono
parents:
diff changeset
113 f7 (int i, ...)
kono
parents:
diff changeset
114 {
kono
parents:
diff changeset
115 va_list ap;
kono
parents:
diff changeset
116 va_start (ap, i);
kono
parents:
diff changeset
117 cd = va_arg (ap, _Complex double);
kono
parents:
diff changeset
118 cd += va_arg (ap, _Complex double);
kono
parents:
diff changeset
119 va_end (ap);
kono
parents:
diff changeset
120 bar (__real__ cd + __imag__ cd);
kono
parents:
diff changeset
121 }
kono
parents:
diff changeset
122 /* { dg-final { scan-tree-dump "f7: va_list escapes 0, needs to save 0 GPR units and 64 FPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && { ! { ia32 || llp64 } } } } } } */
kono
parents:
diff changeset
123 /* { dg-final { scan-tree-dump "f7: va_list escapes 0, needs to save 32 GPR units and 2" "stdarg" { target alpha*-*-linux* } } } */
kono
parents:
diff changeset
124 /* { dg-final { scan-tree-dump "f7: va_list escapes 0, needs to save 2 GPR units and 0 FPR units" "stdarg" { target s390*-*-linux* } } } */
kono
parents:
diff changeset
125 /* { dg-final { scan-tree-dump "f7: va_list escapes 0, needs to save 0 GPR units and 64 FPR units" "stdarg" { target aarch64*-*-* } } } */