For gcc.dg/tree-ssa/loadpre6.c we see at FRE time # PT = { HEAP.9 } (glob) # USE = anything # CLB = anything unexpanded_var_list.0_25 = malloc (16); unexpanded_var_list = unexpanded_var_list.0_25; # PT = nonlocal escaped { HEAP.9 HEAP.10 } (glob) unexpanded_var_list.1_27 = unexpanded_var_list; unexpanded_var_list.1_27->list.value = 0B; # PT = nonlocal escaped { HEAP.9 HEAP.10 } (glob) unexpanded_var_list.1_32 = unexpanded_var_list; unexpanded_var_list.1_32->common.chain = 0B; # PT = nonlocal escaped { HEAP.9 HEAP.10 } (glob) last_34 = unexpanded_var_list;
where when looking up the load in the stmt setting last_34 it is not disambiguated against unexpanded_var_list.1_32->common.chain as unexpanded_var_list.1_32 is not value-replaced by unexpanded_var_list.0_25 and thus stays with the weaker points-to information. -- Summary: VN should value-replace operands during alias-oracle walk Product: gcc Version: 4.6.0 Status: UNCONFIRMED Keywords: missed-optimization, alias Severity: enhancement Priority: P3 Component: tree-optimization AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: rguenth at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44656