1 /* { dg-do compile } */
2 /* { dg-options "-O2 -flto -fdump-tree-evrp" } */
3 typedef struct rtx_def *rtx;
4 typedef struct cselib_val_struct
5 {
6 union
7 {
8 } u;
9 struct elt_loc_list *locs;
10 }
11 cselib_val;
12 struct elt_loc_list
13 {
14 struct elt_loc_list *next;
15 rtx loc;
16 };
17 static int n_useless_values;
18 unchain_one_elt_loc_list (pl)
19 struct elt_loc_list **pl;
20 {
21 struct elt_loc_list *l = *pl;
22 *pl = l->next;
23 }
24
25 discard_useless_locs (x, info)
26 void **x;
27 {
28 cselib_val *v = (cselib_val *) * x;
29 struct elt_loc_list **p = &v->locs;
30 int had_locs = v->locs != 0;
31 while (*p)
32 {
33 unchain_one_elt_loc_list (p);
34 p = &(*p)->next;
35 }
36 if (had_locs && v->locs == 0)
37 {
38 n_useless_values++;
39 }
40 }
41 /* { dg-final { scan-tree-dump-times "n_useless_values" 2 "evrp" } } */