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 discard_useless_locs(x,info)25discard_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" } } */ 42