annotate gcc/testsuite/gcc.dg/tree-ssa/stdarg-4.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
kono
parents:
diff changeset
15 /* Here va_arg can be executed more than once for one va_start. All GPR
kono
parents:
diff changeset
16 registers needs to be saved. */
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 while (i-- > 0)
kono
parents:
diff changeset
23 x = va_arg (ap, long);
kono
parents:
diff changeset
24 va_end (ap);
kono
parents:
diff changeset
25 }
kono
parents:
diff changeset
26 /* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save all GPR units and 0 FPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && { x32 || { ! { ia32 || llp64 } } } } } } } */
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 { powerpc*-*-linux* && ilp32 } } } } */
kono
parents:
diff changeset
28 /* { 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
29 /* { 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
30 /* { 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
31 /* { dg-final { scan-tree-dump "f1: va_list escapes \[01\], needs to save all GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
kono
parents:
diff changeset
32 /* { dg-final { scan-tree-dump "f1: va_list escapes \[01\], needs to save all GPR units" "stdarg" { target ia64-*-* } } } */
kono
parents:
diff changeset
33 /* { dg-final { scan-tree-dump "f1: va_list escapes \[01\], needs to save all GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
kono
parents:
diff changeset
34
kono
parents:
diff changeset
35 void
kono
parents:
diff changeset
36 f2 (int i, ...)
kono
parents:
diff changeset
37 {
kono
parents:
diff changeset
38 va_list ap;
kono
parents:
diff changeset
39 va_start (ap, i);
kono
parents:
diff changeset
40 while (i-- > 0)
kono
parents:
diff changeset
41 d = va_arg (ap, double);
kono
parents:
diff changeset
42 va_end (ap);
kono
parents:
diff changeset
43 }
kono
parents:
diff changeset
44 /* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save 0 GPR units and all FPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && { x32 || { ! { ia32 || llp64 } } } } } } } */
kono
parents:
diff changeset
45 /* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save 0 GPR units and all FPR units" "stdarg" { target { powerpc*-*-linux* && { powerpc_fprs && ilp32 } } } } } */
kono
parents:
diff changeset
46 /* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save all GPR units and 2" "stdarg" { target alpha*-*-linux* } } } */
kono
parents:
diff changeset
47 /* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save 0 GPR units and all FPR units" "stdarg" { target s390*-*-linux* } } } */
kono
parents:
diff changeset
48 /* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save 0 GPR units and all FPR units" "stdarg" { target aarch64*-*-* } } } */
kono
parents:
diff changeset
49 /* { dg-final { scan-tree-dump "f2: va_list escapes \[01\], needs to save all GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
kono
parents:
diff changeset
50 /* { dg-final { scan-tree-dump "f2: va_list escapes \[01\], needs to save all GPR units" "stdarg" { target ia64-*-* } } } */
kono
parents:
diff changeset
51 /* { dg-final { scan-tree-dump "f2: va_list escapes \[01\], needs to save all GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
kono
parents:
diff changeset
52
kono
parents:
diff changeset
53 /* Here va_arg can be executed at most as many times as va_start.
kono
parents:
diff changeset
54 Only one GPR needs to be saved. */
kono
parents:
diff changeset
55 void
kono
parents:
diff changeset
56 f3 (int i, ...)
kono
parents:
diff changeset
57 {
kono
parents:
diff changeset
58 va_list ap;
kono
parents:
diff changeset
59 int j = i;
kono
parents:
diff changeset
60 while (j-- > 0)
kono
parents:
diff changeset
61 {
kono
parents:
diff changeset
62 va_start (ap, i);
kono
parents:
diff changeset
63 x = va_arg (ap, long);
kono
parents:
diff changeset
64 va_end (ap);
kono
parents:
diff changeset
65 bar (x);
kono
parents:
diff changeset
66 }
kono
parents:
diff changeset
67 }
kono
parents:
diff changeset
68 /* { dg-final { scan-tree-dump "f3: 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
69 /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save \[148\] GPR units and 0 FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */
kono
parents:
diff changeset
70 /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save 8 GPR units and 1" "stdarg" { target alpha*-*-linux* } } } */
kono
parents:
diff changeset
71 /* { 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
72 /* { 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
73 /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save \[148\] GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
kono
parents:
diff changeset
74 /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save \[148\] GPR units" "stdarg" { target ia64-*-* } } } */
kono
parents:
diff changeset
75 /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save \[148\] GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */
kono
parents:
diff changeset
76
kono
parents:
diff changeset
77 void
kono
parents:
diff changeset
78 f4 (int i, ...)
kono
parents:
diff changeset
79 {
kono
parents:
diff changeset
80 va_list ap;
kono
parents:
diff changeset
81 int j = i;
kono
parents:
diff changeset
82 while (j-- > 0)
kono
parents:
diff changeset
83 {
kono
parents:
diff changeset
84 va_start (ap, i);
kono
parents:
diff changeset
85 d = va_arg (ap, double);
kono
parents:
diff changeset
86 va_end (ap);
kono
parents:
diff changeset
87 bar (d + 2.5);
kono
parents:
diff changeset
88 }
kono
parents:
diff changeset
89 }
kono
parents:
diff changeset
90 /* { dg-final { scan-tree-dump "f4: 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
91 /* { dg-final { scan-tree-dump "f4: 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
92 /* { dg-final { scan-tree-dump "f4: va_list escapes 0, needs to save 8 GPR units and 2" "stdarg" { target alpha*-*-linux* } } } */
kono
parents:
diff changeset
93 /* { dg-final { scan-tree-dump "f4: va_list escapes 0, needs to save 0 GPR units and 1 FPR units" "stdarg" { target s390*-*-linux* } } } */
kono
parents:
diff changeset
94 /* { dg-final { scan-tree-dump "f4: va_list escapes 0, needs to save 0 GPR units and 16 FPR units" "stdarg" { target aarch64*-*-* } } } */
kono
parents:
diff changeset
95 /* { dg-final { scan-tree-dump "f4: va_list escapes 0, needs to save \[148\] GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */
kono
parents:
diff changeset
96 /* { dg-final { scan-tree-dump "f4: va_list escapes 0, needs to save \[148\] GPR units" "stdarg" { target ia64-*-* } } } */
kono
parents:
diff changeset
97 /* { dg-final { scan-tree-dump "f4: va_list escapes 0, needs to save \[148\] GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */