FRE doesn't optimize MEM[(struct Vec *)&D.195309] ={v} {CLOBBER}; MEM[(struct Vec *)&D.195309].val = 128; MEM[(struct Vec *)&D.195309 + 2B] ={v} {CLOBBER}; MEM[(struct Vec *)&D.195309 + 2B].val = 128; ... MEM[(struct Vec *)&D.195309 + 28B].val = 128; MEM[(struct Vec *)&D.195309 + 30B] ={v} {CLOBBER}; MEM[(struct Vec *)&D.195309 + 30B].val = 128; _127 = MEM <vector(16) short unsigned int> [(char * {ref-all})&D.195309]; to a vector constant because it's confused by the CLOBBERs.
Mine.
Author: rguenth Date: Tue Dec 3 10:46:52 2019 New Revision: 278931 URL: https://gcc.gnu.org/viewcvs?rev=278931&root=gcc&view=rev Log: 2019-12-03 Richard Biener <rguenther@suse.de> PR tree-optimization/92751 * tree-ssa-sccvn.c (vn_walk_cb_data::push_partial_def): Fail when a clobber ends up in the partial-def vector. (vn_reference_lookup_3): Let clobbers be handled by the assignment from CTOR handling. * g++.dg/tree-ssa/pr92751.C: New testcase. Added: trunk/gcc/testsuite/g++.dg/tree-ssa/pr92751.C Modified: trunk/gcc/ChangeLog trunk/gcc/testsuite/ChangeLog trunk/gcc/tree-ssa-sccvn.c
Fixed.