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