annotate gcc/testsuite/gcc.dg/tree-ssa/stdarg-2.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 /* First dg-final line after each function is for architectures that use
kono
parents:
diff changeset
2 a struct {...} va_list[1] with separate GPR and FPR counters in the
kono
parents:
diff changeset
3 structure. Second dg-final line is for architectures that use void *
kono
parents:
diff changeset
4 or char * va_list. */
kono
parents:
diff changeset
5 /* { dg-do compile } */
kono
parents:
diff changeset
6 /* { dg-options "-O2 -fdump-tree-stdarg" } */
kono
parents:
diff changeset
7
kono
parents:
diff changeset
8 #include <stdarg.h>
kono
parents:
diff changeset
9
kono
parents:
diff changeset
10 extern void foo (int, va_list);
kono
parents:
diff changeset
11 extern void bar (int);
kono
parents:
diff changeset
12 long x;
kono
parents:
diff changeset
13 double d;
kono
parents:
diff changeset
14 va_list gap;
kono
parents:
diff changeset
15 va_list *pap;
kono
parents:
diff changeset
16
kono
parents:
diff changeset
17 void
kono
parents:
diff changeset
18 f1 (int i, ...)
kono
parents:
diff changeset
19 {
kono
parents:
diff changeset
20 va_list ap;
kono
parents:
diff changeset
21 va_start (ap, i);
kono
parents:
diff changeset
22 va_end (ap);
kono
parents:
diff changeset
23 }
kono
parents:
diff changeset
24 /* { 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
25 /* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save 0 GPR units and 0 FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */
kono
parents:
diff changeset
26 /* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save 0 GPR units and 0 FPR units" "stdarg" { target alpha*-*-linux* } } } */
kono
parents:
diff changeset
27 /* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save 0 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 0 GPR units and 0 FPR units" "stdarg" { target aarch64*-*-* } } } */
kono
parents:
diff changeset
29 /* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save 0 GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
kono
parents:
diff changeset
30 /* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save 0 GPR units" "stdarg" { target ia64-*-* } } } */
kono
parents:
diff changeset
31 /* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save 0 GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
kono
parents:
diff changeset
32
kono
parents:
diff changeset
33 void
kono
parents:
diff changeset
34 f2 (int i, ...)
kono
parents:
diff changeset
35 {
kono
parents:
diff changeset
36 va_list ap;
kono
parents:
diff changeset
37 va_start (ap, i);
kono
parents:
diff changeset
38 bar (d);
kono
parents:
diff changeset
39 x = va_arg (ap, long);
kono
parents:
diff changeset
40 bar (x);
kono
parents:
diff changeset
41 va_end (ap);
kono
parents:
diff changeset
42 }
kono
parents:
diff changeset
43 /* Assume the counters can be number of registers or bytes on 32-bit
kono
parents:
diff changeset
44 architecture or bytes on 64-bit architecture. */
kono
parents:
diff changeset
45 /* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save \[148\] GPR units and 0 FPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && { ! { ia32 || llp64 } } } } } } */
kono
parents:
diff changeset
46 /* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save \[148\] GPR units and 0 FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */
kono
parents:
diff changeset
47 /* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save 8 GPR units and 1" "stdarg" { target alpha*-*-linux* } } } */
kono
parents:
diff changeset
48 /* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save 1 GPR units and 0 FPR units" "stdarg" { target s390*-*-linux* } } } */
kono
parents:
diff changeset
49 /* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save 8 GPR units and 0 FPR units" "stdarg" { target aarch64*-*-* } } } */
kono
parents:
diff changeset
50 /* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save \[148\] GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
kono
parents:
diff changeset
51 /* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save \[148\] GPR units" "stdarg" { target ia64-*-* } } } */
kono
parents:
diff changeset
52 /* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save \[148\] GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
kono
parents:
diff changeset
53
kono
parents:
diff changeset
54 void
kono
parents:
diff changeset
55 f3 (int i, ...)
kono
parents:
diff changeset
56 {
kono
parents:
diff changeset
57 va_list ap;
kono
parents:
diff changeset
58 va_start (ap, i);
kono
parents:
diff changeset
59 d = va_arg (ap, double);
kono
parents:
diff changeset
60 va_end (ap);
kono
parents:
diff changeset
61 }
kono
parents:
diff changeset
62 /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save 0 GPR units and \[1-9\]\[0-9\]* FPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && { ! { ia32 || llp64 } } } } } } */
kono
parents:
diff changeset
63 /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save 0 GPR units and \[1-9\]\[0-9\]* FPR units" "stdarg" { target { powerpc*-*-linux* && { powerpc_fprs && ilp32 } } } } } */
kono
parents:
diff changeset
64 /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save 0 GPR units and 1 FPR units" "stdarg" { target s390*-*-linux* } } } */
kono
parents:
diff changeset
65 /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save 0 GPR units and 16 FPR units" "stdarg" { target aarch64*-*-* } } } */
kono
parents:
diff changeset
66 /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save 8 GPR units and 2" "stdarg" { target alpha*-*-linux* } } } */
kono
parents:
diff changeset
67 /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save \[1-9\]\[0-9\]* GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
kono
parents:
diff changeset
68 /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save \[1-9\]\[0-9\]* GPR units" "stdarg" { target ia64-*-* } } } */
kono
parents:
diff changeset
69 /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save \[1-9\]\[0-9\]* GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
kono
parents:
diff changeset
70
kono
parents:
diff changeset
71 void
kono
parents:
diff changeset
72 f4 (int i, ...)
kono
parents:
diff changeset
73 {
kono
parents:
diff changeset
74 va_list ap;
kono
parents:
diff changeset
75 va_start (ap, i);
kono
parents:
diff changeset
76 x = va_arg (ap, double);
kono
parents:
diff changeset
77 foo (i, ap);
kono
parents:
diff changeset
78 va_end (ap);
kono
parents:
diff changeset
79 }
kono
parents:
diff changeset
80 /* { dg-final { scan-tree-dump "f4: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && { ! { ia32 || llp64 } } } } } } */
kono
parents:
diff changeset
81 /* { dg-final { scan-tree-dump "f4: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */
kono
parents:
diff changeset
82 /* { dg-final { scan-tree-dump "f4: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target alpha*-*-linux* } } } */
kono
parents:
diff changeset
83 /* { dg-final { scan-tree-dump "f4: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target s390*-*-linux* } } } */
kono
parents:
diff changeset
84 /* { dg-final { scan-tree-dump "f4: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target aarch64*-*-* } } } */
kono
parents:
diff changeset
85 /* { dg-final { scan-tree-dump "f4: va_list escapes 1, needs to save all GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
kono
parents:
diff changeset
86 /* { dg-final { scan-tree-dump "f4: va_list escapes 1, needs to save all GPR units" "stdarg" { target ia64-*-* } } } */
kono
parents:
diff changeset
87 /* { dg-final { scan-tree-dump "f4: va_list escapes 1, needs to save all GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
kono
parents:
diff changeset
88
kono
parents:
diff changeset
89 void
kono
parents:
diff changeset
90 f5 (int i, ...)
kono
parents:
diff changeset
91 {
kono
parents:
diff changeset
92 va_list ap;
kono
parents:
diff changeset
93 va_start (ap, i);
kono
parents:
diff changeset
94 va_copy (gap, ap);
kono
parents:
diff changeset
95 bar (i);
kono
parents:
diff changeset
96 va_end (ap);
kono
parents:
diff changeset
97 va_end (gap);
kono
parents:
diff changeset
98 }
kono
parents:
diff changeset
99 /* { dg-final { scan-tree-dump "f5: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && { ! { ia32 || llp64 } } } } } } */
kono
parents:
diff changeset
100 /* { dg-final { scan-tree-dump "f5: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */
kono
parents:
diff changeset
101 /* { dg-final { scan-tree-dump "f5: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target alpha*-*-linux* } } } */
kono
parents:
diff changeset
102 /* { dg-final { scan-tree-dump "f5: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target s390*-*-linux* } } } */
kono
parents:
diff changeset
103 /* { dg-final { scan-tree-dump "f5: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target aarch64*-*-* } } } */
kono
parents:
diff changeset
104 /* { dg-final { scan-tree-dump "f5: va_list escapes 1, needs to save all GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
kono
parents:
diff changeset
105 /* { dg-final { scan-tree-dump "f5: va_list escapes 1, needs to save all GPR units" "stdarg" { target ia64-*-* } } } */
kono
parents:
diff changeset
106 /* { dg-final { scan-tree-dump "f5: va_list escapes 1, needs to save all GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
kono
parents:
diff changeset
107
kono
parents:
diff changeset
108 void
kono
parents:
diff changeset
109 f6 (int i, ...)
kono
parents:
diff changeset
110 {
kono
parents:
diff changeset
111 va_list ap;
kono
parents:
diff changeset
112 va_start (ap, i);
kono
parents:
diff changeset
113 bar (d);
kono
parents:
diff changeset
114 va_arg (ap, long);
kono
parents:
diff changeset
115 va_arg (ap, long);
kono
parents:
diff changeset
116 x = va_arg (ap, long);
kono
parents:
diff changeset
117 bar (x);
kono
parents:
diff changeset
118 va_end (ap);
kono
parents:
diff changeset
119 }
kono
parents:
diff changeset
120 /* { dg-final { scan-tree-dump "f6: va_list escapes 0, needs to save (3|12|24) GPR units and 0 FPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && { ! { ia32 || llp64 } } } } } } */
kono
parents:
diff changeset
121 /* { dg-final { scan-tree-dump "f6: va_list escapes 0, needs to save (3|12|24) GPR units and 0 FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */
kono
parents:
diff changeset
122 /* { dg-final { scan-tree-dump "f6: va_list escapes 0, needs to save 24 GPR units and 1" "stdarg" { target alpha*-*-linux* } } } */
kono
parents:
diff changeset
123 /* { dg-final { scan-tree-dump "f6: va_list escapes 0, needs to save 3 GPR units and 0 FPR units" "stdarg" { target s390*-*-linux* } } } */
kono
parents:
diff changeset
124 /* { dg-final { scan-tree-dump "f6: va_list escapes 0, needs to save 24 GPR units and 0 FPR units" "stdarg" { target aarch64*-*-* } } } */
kono
parents:
diff changeset
125 /* { dg-final { scan-tree-dump "f6: va_list escapes 0, needs to save (3|12|24) GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
kono
parents:
diff changeset
126 /* { dg-final { scan-tree-dump "f6: va_list escapes 0, needs to save (3|12|24) GPR units" "stdarg" { target ia64-*-* } } } */
kono
parents:
diff changeset
127 /* { dg-final { scan-tree-dump "f6: va_list escapes 0, needs to save (3|12|24) GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
kono
parents:
diff changeset
128
kono
parents:
diff changeset
129 void
kono
parents:
diff changeset
130 f7 (int i, ...)
kono
parents:
diff changeset
131 {
kono
parents:
diff changeset
132 va_list ap;
kono
parents:
diff changeset
133 va_start (ap, i);
kono
parents:
diff changeset
134 pap = &ap;
kono
parents:
diff changeset
135 bar (6);
kono
parents:
diff changeset
136 va_end (ap);
kono
parents:
diff changeset
137 }
kono
parents:
diff changeset
138 /* { dg-final { scan-tree-dump "f7: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && { ! { ia32 || llp64 } } } } } } */
kono
parents:
diff changeset
139 /* { dg-final { scan-tree-dump "f7: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */
kono
parents:
diff changeset
140 /* { dg-final { scan-tree-dump "f7: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target alpha*-*-linux* } } } */
kono
parents:
diff changeset
141 /* { dg-final { scan-tree-dump "f7: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target s390*-*-linux* } } } */
kono
parents:
diff changeset
142 /* { dg-final { scan-tree-dump "f7: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target aarch64*-*-* } } } */
kono
parents:
diff changeset
143 /* { dg-final { scan-tree-dump "f7: va_list escapes 1, needs to save all GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
kono
parents:
diff changeset
144 /* { dg-final { scan-tree-dump "f7: va_list escapes 1, needs to save all GPR units" "stdarg" { target ia64-*-* } } } */
kono
parents:
diff changeset
145 /* { dg-final { scan-tree-dump "f7: va_list escapes 1, needs to save all GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
kono
parents:
diff changeset
146
kono
parents:
diff changeset
147 void
kono
parents:
diff changeset
148 f8 (int i, ...)
kono
parents:
diff changeset
149 {
kono
parents:
diff changeset
150 va_list ap;
kono
parents:
diff changeset
151 va_start (ap, i);
kono
parents:
diff changeset
152 pap = &ap;
kono
parents:
diff changeset
153 bar (d);
kono
parents:
diff changeset
154 x = va_arg (ap, long);
kono
parents:
diff changeset
155 bar (x);
kono
parents:
diff changeset
156 va_end (ap);
kono
parents:
diff changeset
157 }
kono
parents:
diff changeset
158 /* { dg-final { scan-tree-dump "f8: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && { ! { ia32 || llp64 } } } } } } */
kono
parents:
diff changeset
159 /* { dg-final { scan-tree-dump "f8: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */
kono
parents:
diff changeset
160 /* { dg-final { scan-tree-dump "f8: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target alpha*-*-linux* } } } */
kono
parents:
diff changeset
161 /* { dg-final { scan-tree-dump "f8: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target s390*-*-linux* } } } */
kono
parents:
diff changeset
162 /* { dg-final { scan-tree-dump "f8: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target aarch64*-*-* } } } */
kono
parents:
diff changeset
163 /* { dg-final { scan-tree-dump "f8: va_list escapes 1, needs to save all GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
kono
parents:
diff changeset
164 /* { dg-final { scan-tree-dump "f8: va_list escapes 1, needs to save all GPR units" "stdarg" { target ia64-*-* } } } */
kono
parents:
diff changeset
165 /* { dg-final { scan-tree-dump "f8: va_list escapes 1, needs to save all GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
kono
parents:
diff changeset
166
kono
parents:
diff changeset
167 void
kono
parents:
diff changeset
168 f9 (int i, ...)
kono
parents:
diff changeset
169 {
kono
parents:
diff changeset
170 va_list ap;
kono
parents:
diff changeset
171 va_start (ap, i);
kono
parents:
diff changeset
172 __asm __volatile ("" : "=r" (pap) : "0" (&ap));
kono
parents:
diff changeset
173 bar (6);
kono
parents:
diff changeset
174 va_end (ap);
kono
parents:
diff changeset
175 }
kono
parents:
diff changeset
176 /* { dg-final { scan-tree-dump "f9: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && { ! { ia32 || llp64 } } } } } } */
kono
parents:
diff changeset
177 /* { dg-final { scan-tree-dump "f9: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */
kono
parents:
diff changeset
178 /* { dg-final { scan-tree-dump "f9: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target alpha*-*-linux* } } } */
kono
parents:
diff changeset
179 /* { dg-final { scan-tree-dump "f9: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target s390*-*-linux* } } } */
kono
parents:
diff changeset
180 /* { dg-final { scan-tree-dump "f9: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target aarch64*-*-* } } } */
kono
parents:
diff changeset
181 /* { dg-final { scan-tree-dump "f9: va_list escapes 1, needs to save all GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
kono
parents:
diff changeset
182 /* { dg-final { scan-tree-dump "f9: va_list escapes 1, needs to save all GPR units" "stdarg" { target ia64-*-* } } } */
kono
parents:
diff changeset
183 /* { dg-final { scan-tree-dump "f9: va_list escapes 1, needs to save all GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
kono
parents:
diff changeset
184
kono
parents:
diff changeset
185 void
kono
parents:
diff changeset
186 f10 (int i, ...)
kono
parents:
diff changeset
187 {
kono
parents:
diff changeset
188 va_list ap;
kono
parents:
diff changeset
189 va_start (ap, i);
kono
parents:
diff changeset
190 __asm __volatile ("" : "=r" (pap) : "0" (&ap));
kono
parents:
diff changeset
191 bar (d);
kono
parents:
diff changeset
192 x = va_arg (ap, long);
kono
parents:
diff changeset
193 bar (x);
kono
parents:
diff changeset
194 va_end (ap);
kono
parents:
diff changeset
195 }
kono
parents:
diff changeset
196 /* { dg-final { scan-tree-dump "f10: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && { ! { ia32 || llp64 } } } } } } */
kono
parents:
diff changeset
197 /* { dg-final { scan-tree-dump "f10: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */
kono
parents:
diff changeset
198 /* { dg-final { scan-tree-dump "f10: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target alpha*-*-linux* } } } */
kono
parents:
diff changeset
199 /* { dg-final { scan-tree-dump "f10: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target s390*-*-linux* } } } */
kono
parents:
diff changeset
200 /* { dg-final { scan-tree-dump "f10: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target aarch64*-*-* } } } */
kono
parents:
diff changeset
201 /* { dg-final { scan-tree-dump "f10: va_list escapes 1, needs to save all GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
kono
parents:
diff changeset
202 /* { dg-final { scan-tree-dump "f10: va_list escapes 1, needs to save all GPR units" "stdarg" { target ia64-*-* } } } */
kono
parents:
diff changeset
203 /* { dg-final { scan-tree-dump "f10: va_list escapes 1, needs to save all GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
kono
parents:
diff changeset
204
kono
parents:
diff changeset
205 void
kono
parents:
diff changeset
206 f11 (int i, ...)
kono
parents:
diff changeset
207 {
kono
parents:
diff changeset
208 va_list ap;
kono
parents:
diff changeset
209 va_start (ap, i);
kono
parents:
diff changeset
210 bar (d);
kono
parents:
diff changeset
211 x = va_arg (ap, long);
kono
parents:
diff changeset
212 x += va_arg (ap, long);
kono
parents:
diff changeset
213 x += va_arg (ap, long);
kono
parents:
diff changeset
214 bar (x);
kono
parents:
diff changeset
215 va_end (ap);
kono
parents:
diff changeset
216 }
kono
parents:
diff changeset
217 /* { dg-final { scan-tree-dump "f11: va_list escapes 0, needs to save (3|12|24) GPR units and 0 FPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && { ! { ia32 || llp64 } } } } } } */
kono
parents:
diff changeset
218 /* { dg-final { scan-tree-dump "f11: va_list escapes 0, needs to save (3|12|24) GPR units and 0 FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */
kono
parents:
diff changeset
219 /* { dg-final { scan-tree-dump "f11: va_list escapes 0, needs to save 24 GPR units and 1" "stdarg" { target alpha*-*-linux* } } } */
kono
parents:
diff changeset
220 /* { dg-final { scan-tree-dump "f11: va_list escapes 0, needs to save 3 GPR units and 0 FPR units" "stdarg" { target s390*-*-linux* } } } */
kono
parents:
diff changeset
221 /* { dg-final { scan-tree-dump "f11: va_list escapes 0, needs to save 24 GPR units and 0 FPR units" "stdarg" { target aarch64*-*-* } } } */
kono
parents:
diff changeset
222 /* { dg-final { scan-tree-dump "f11: va_list escapes 0, needs to save (3|12|24) GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
kono
parents:
diff changeset
223 /* { dg-final { scan-tree-dump "f11: va_list escapes 0, needs to save (3|12|24) GPR units" "stdarg" { target ia64-*-* } } } */
kono
parents:
diff changeset
224 /* { dg-final { scan-tree-dump "f11: va_list escapes 0, needs to save (3|12|24) GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
kono
parents:
diff changeset
225
kono
parents:
diff changeset
226 void
kono
parents:
diff changeset
227 f12 (int i, ...)
kono
parents:
diff changeset
228 {
kono
parents:
diff changeset
229 va_list ap;
kono
parents:
diff changeset
230 va_start (ap, i);
kono
parents:
diff changeset
231 bar (d);
kono
parents:
diff changeset
232 va_arg (ap, double);
kono
parents:
diff changeset
233 va_arg (ap, double);
kono
parents:
diff changeset
234 x = va_arg (ap, double);
kono
parents:
diff changeset
235 bar (x);
kono
parents:
diff changeset
236 va_end (ap);
kono
parents:
diff changeset
237 }
kono
parents:
diff changeset
238 /* { dg-final { scan-tree-dump "f12: va_list escapes 0, needs to save 0 GPR units and \[1-9\]\[0-9\]* FPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && { ! { ia32 || llp64 } } } } } } */
kono
parents:
diff changeset
239 /* { dg-final { scan-tree-dump "f12: va_list escapes 0, needs to save 0 GPR units and \[1-9\]\[0-9\]* FPR units" "stdarg" { target { powerpc*-*-linux* && { powerpc_fprs && ilp32 } } } } } */
kono
parents:
diff changeset
240 /* { dg-final { scan-tree-dump "f12: va_list escapes 0, needs to save 24 GPR units and 2" "stdarg" { target alpha*-*-linux* } } } */
kono
parents:
diff changeset
241 /* { dg-final { scan-tree-dump "f12: va_list escapes 0, needs to save 0 GPR units and 3 FPR units" "stdarg" { target s390*-*-linux* } } } */
kono
parents:
diff changeset
242 /* { dg-final { scan-tree-dump "f12: va_list escapes 0, needs to save 0 GPR units and 48 FPR units" "stdarg" { target aarch64*-*-* } } } */
kono
parents:
diff changeset
243 /* { dg-final { scan-tree-dump "f12: va_list escapes 0, needs to save \[1-9]\[0-9\]* GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
kono
parents:
diff changeset
244 /* { dg-final { scan-tree-dump "f12: va_list escapes 0, needs to save \[1-9]\[0-9\]* GPR units" "stdarg" { target ia64-*-* } } } */
kono
parents:
diff changeset
245 /* { dg-final { scan-tree-dump "f12: va_list escapes 0, needs to save \[1-9]\[0-9\]* GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
kono
parents:
diff changeset
246
kono
parents:
diff changeset
247 void
kono
parents:
diff changeset
248 f13 (int i, ...)
kono
parents:
diff changeset
249 {
kono
parents:
diff changeset
250 va_list ap;
kono
parents:
diff changeset
251 va_start (ap, i);
kono
parents:
diff changeset
252 bar (d);
kono
parents:
diff changeset
253 x = va_arg (ap, double);
kono
parents:
diff changeset
254 x += va_arg (ap, double);
kono
parents:
diff changeset
255 x += va_arg (ap, double);
kono
parents:
diff changeset
256 bar (x);
kono
parents:
diff changeset
257 va_end (ap);
kono
parents:
diff changeset
258 }
kono
parents:
diff changeset
259 /* { dg-final { scan-tree-dump "f13: va_list escapes 0, needs to save 0 GPR units and \[1-9\]\[0-9\]* FPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && { ! { ia32 || llp64 } } } } } } */
kono
parents:
diff changeset
260 /* { dg-final { scan-tree-dump "f13: va_list escapes 0, needs to save 0 GPR units and \[1-9\]\[0-9\]* FPR units" "stdarg" { target { powerpc*-*-linux* && { powerpc_fprs && ilp32 } } } } } */
kono
parents:
diff changeset
261 /* { dg-final { scan-tree-dump "f13: va_list escapes 0, needs to save 24 GPR units and 2" "stdarg" { target alpha*-*-linux* } } } */
kono
parents:
diff changeset
262 /* { dg-final { scan-tree-dump "f13: va_list escapes 0, needs to save 0 GPR units and 3 FPR units" "stdarg" { target s390*-*-linux* } } } */
kono
parents:
diff changeset
263 /* { dg-final { scan-tree-dump "f13: va_list escapes 0, needs to save 0 GPR units and 48 FPR units" "stdarg" { target aarch64*-*-* } } } */
kono
parents:
diff changeset
264 /* { dg-final { scan-tree-dump "f13: va_list escapes 0, needs to save \[1-9]\[0-9\]* GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
kono
parents:
diff changeset
265 /* { dg-final { scan-tree-dump "f13: va_list escapes 0, needs to save \[1-9]\[0-9\]* GPR units" "stdarg" { target ia64-*-* } } } */
kono
parents:
diff changeset
266 /* { dg-final { scan-tree-dump "f13: va_list escapes 0, needs to save \[1-9]\[0-9\]* GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
kono
parents:
diff changeset
267
kono
parents:
diff changeset
268 void
kono
parents:
diff changeset
269 f14 (int i, ...)
kono
parents:
diff changeset
270 {
kono
parents:
diff changeset
271 va_list ap;
kono
parents:
diff changeset
272 va_start (ap, i);
kono
parents:
diff changeset
273 bar (d);
kono
parents:
diff changeset
274 x = va_arg (ap, double);
kono
parents:
diff changeset
275 x += va_arg (ap, long);
kono
parents:
diff changeset
276 x += va_arg (ap, double);
kono
parents:
diff changeset
277 bar (x);
kono
parents:
diff changeset
278 va_end (ap);
kono
parents:
diff changeset
279 }
kono
parents:
diff changeset
280 /* { dg-final { scan-tree-dump "f14: va_list escapes 0, needs to save \[148\] GPR units and \[1-9\]\[0-9\]* FPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && { ! { ia32 || llp64 } } } } } } */
kono
parents:
diff changeset
281 /* { dg-final { scan-tree-dump "f14: va_list escapes 0, needs to save \[148\] GPR units and \[1-9\]\[0-9\]* FPR units" "stdarg" { target { powerpc*-*-linux* && { powerpc_fprs && ilp32 } } } } } */
kono
parents:
diff changeset
282 /* { dg-final { scan-tree-dump "f14: va_list escapes 0, needs to save 24 GPR units and 3" "stdarg" { target alpha*-*-linux* } } } */
kono
parents:
diff changeset
283 /* { dg-final { scan-tree-dump "f14: va_list escapes 0, needs to save 1 GPR units and 2 FPR units" "stdarg" { target s390*-*-linux* } } } */
kono
parents:
diff changeset
284 /* { dg-final { scan-tree-dump "f14: va_list escapes 0, needs to save 8 GPR units and 32 FPR units" "stdarg" { target aarch64*-*-* } } } */
kono
parents:
diff changeset
285 /* { dg-final { scan-tree-dump "f14: va_list escapes 0, needs to save \[1-9]\[0-9\]* GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
kono
parents:
diff changeset
286 /* { dg-final { scan-tree-dump "f14: va_list escapes 0, needs to save \[1-9]\[0-9\]* GPR units" "stdarg" { target ia64-*-* } } } */
kono
parents:
diff changeset
287 /* { dg-final { scan-tree-dump "f14: va_list escapes 0, needs to save \[1-9]\[0-9\]* GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
kono
parents:
diff changeset
288
kono
parents:
diff changeset
289 inline void __attribute__((always_inline))
kono
parents:
diff changeset
290 f15_1 (va_list ap)
kono
parents:
diff changeset
291 {
kono
parents:
diff changeset
292 x = va_arg (ap, double);
kono
parents:
diff changeset
293 x += va_arg (ap, long);
kono
parents:
diff changeset
294 x += va_arg (ap, double);
kono
parents:
diff changeset
295 }
kono
parents:
diff changeset
296
kono
parents:
diff changeset
297 void
kono
parents:
diff changeset
298 f15 (int i, ...)
kono
parents:
diff changeset
299 {
kono
parents:
diff changeset
300 va_list ap;
kono
parents:
diff changeset
301 va_start (ap, i);
kono
parents:
diff changeset
302 f15_1 (ap);
kono
parents:
diff changeset
303 va_end (ap);
kono
parents:
diff changeset
304 }
kono
parents:
diff changeset
305 /* { dg-final { scan-tree-dump "f15: va_list escapes 0, needs to save \[148\] GPR units and \[1-9\]\[0-9\]* FPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && { ! { ia32 || llp64 } } } } } } */
kono
parents:
diff changeset
306 /* { dg-final { scan-tree-dump "f15: va_list escapes 0, needs to save \[148\] GPR units and \[1-9\]\[0-9\]* FPR units" "stdarg" { target { powerpc*-*-linux* && { powerpc_fprs && ilp32 } } } } } */
kono
parents:
diff changeset
307 /* { dg-final { scan-tree-dump "f15: va_list escapes 0, needs to save 1 GPR units and 2 FPR units" "stdarg" { target s390*-*-linux* } } } */
kono
parents:
diff changeset
308 /* { dg-final { scan-tree-dump "f15: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target aarch64*-*-* } } } */
kono
parents:
diff changeset
309
kono
parents:
diff changeset
310 /* We may be able to improve upon this after fixing PR66010/PR66013. */
kono
parents:
diff changeset
311 /* { dg-final { scan-tree-dump "f15: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target alpha*-*-linux* } } } */
kono
parents:
diff changeset
312
kono
parents:
diff changeset
313 /* { dg-final { scan-tree-dump-not "f15: va_list escapes 0, needs to save 0 GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
kono
parents:
diff changeset
314 /* { dg-final { scan-tree-dump-not "f15: va_list escapes 0, needs to save 0 GPR units" "stdarg" { target ia64-*-* } } } */
kono
parents:
diff changeset
315 /* { dg-final { scan-tree-dump-not "f15: va_list escapes 0, needs to save 0 GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */