1 /* { dg-do compile } */ 2 /* { dg-options "-O2 -fdump-tree-dce2 -w" } */ 3 4 /* The arithmetic using usecount should be gone. */ 5 /* { dg-final { scan-tree-dump-times "usecount_\[0-9\]+ = usecount_\[0-9\]+ . 1;" 0 "dce2"} } */ 6 7 typedef union tree_node *tree; 8 typedef union gimple_statement_d *gimple; 9 extern const int tree_code_type[]; 10 union tree_node 11 { 12 int code:16; 13 }; 14 typedef struct immediate_use_iterator_d 15 { 16 } 17 imm_use_iterator; 18 void insert_debug_temp_for_var_def(gimple stmt)19insert_debug_temp_for_var_def (gimple stmt) 20 { 21 gimple def_stmt = ((void *) 0); 22 int usecount = 0; 23 tree value = ((void *) 0); 24 for (; arf ();) 25 { 26 if (!gimple_debug_bind_p (stmt)) 27 continue; 28 if (usecount++) 29 break; 30 unsigned char no_value = 0; 31 if (!gimple_bb (def_stmt)) 32 no_value = 1; 33 if (!no_value) 34 value = gimple_assign_rhs_to_tree (); 35 } 36 if (value) 37 { 38 if ((tree_code_type[(int) (((value)->code))] == 42) 39 || (usecount == 1 && (is_gimple_min_invariant (value)))) 40 value = unshare_expr (value); 41 } 42 } 43 44 45