------- Comment #5 from pinskia at gcc dot gnu dot org 2007-01-04 22:21 ------- I think this was exposed/caused by the mem-ssa and the specific DSE optimization for aggregate DSE: 2006-12-11 Aldy Hernandez <[EMAIL PROTECTED]>
* tree-ssa-dse.c (aggregate_vardecl_d): New. (dse_global_data): Add aggregate_vardecl field. (dse_possible_dead_store_p): New. Add prev_defvar variable. Allow immediate uses and previous immediate uses to differ if they are setting different parts of the whole. (get_aggregate_vardecl): New. (dse_record_partial_aggregate_store): New. (dse_whole_aggregate_clobbered_p): New. (dse_partial_kill_p): New. (dse_optimize_stmt): Abstract code checking a possible dead store into new function dse_possible_dead_store_p(). Call dse_maybe_record_aggregate_store(). When checking whether a STMT and its USE_STMT refer to the same memory address, check also for partial kills that clobber the whole. Move some variable definitions to the block where they are used. (aggregate_vardecl_hash): New. (aggregate_vardecl_eq): New. (aggregate_vardecl_free): New. (aggregate_whole_store_p): New. (tree_ssa_dse): Initialize and free aggregate_vardecl. Mark which aggregate stores we care about. I think we have: info_1 = V_DEF<info_0(D)> info = {}; ... info_2 = V_DEF<info_1(D)> winetest_set_location (&"encode.c"[0], 2886); Which thinks info is fully clobbered by winetest_set_location which is not true. -- pinskia at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |aldyh at gcc dot gnu dot | |org, dnovillo at gcc dot gnu | |dot org Component|c |tree-optimization GCC build triplet|i686-pc-linux-gnu | GCC host triplet|i686-pc-linux-gnu | GCC target triplet|i686-pc-linux-gnu | Keywords| |wrong-code Summary|tree-ssa-dse incorrectly |[4.3 Regression] tree-ssa- |removes struct |dse incorrectly removes |initialization |struct initialization Target Milestone|--- |4.3.0 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30375