1 /* PR 58106 testcase. Verify that rdesc chain creating and lookup works with
2 recursive inlining and master clone creation. */
3 /* { dg-do compile } */
4 /* { dg-options "-O3" } */
5
6 typedef struct rtx_def *rtx;
7 enum rtx_code {
8 LAST_AND_UNUSED_RTX_CODE};
9 extern const char * const rtx_format[((int) LAST_AND_UNUSED_RTX_CODE)];
10 struct rtx_def {
11 enum rtx_code code;
12 };
13 typedef int (*rtx_function) (rtx *, void *);
14 extern int for_each_rtx (rtx *, rtx_function, void *);
15 int
replace_label(rtx * x,void * data)16 replace_label (rtx *x, void *data)
17 {
18 rtx l = *x;
19 if (l == (rtx) 0)
20 {
21 {
22 rtx new_c, new_l;
23 for_each_rtx (&new_c, replace_label, data);
24 }
25 }
26 }
27 static int
for_each_rtx_1(rtx exp,int n,rtx_function f,void * data)28 for_each_rtx_1 (rtx exp, int n, rtx_function f, void *data)
29 {
30 int result, i, j;
31 const char *format = (rtx_format[(int) (((enum rtx_code) (exp)->code))]);
32 rtx *x;
33 for (; format[n] != '\0'; n++)
34 {
35 switch (format[n])
36 {
37 case 'e':
38 result = (*f) (x, data);
39 {
40 result = for_each_rtx_1 (*x, i, f, data);
41 }
42 }
43 }
44 }
45 int
for_each_rtx(rtx * x,rtx_function f,void * data)46 for_each_rtx (rtx *x, rtx_function f, void *data)
47 {
48 int i;
49 return for_each_rtx_1 (*x, i, f, data);
50 }
51