https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94122
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Last reconfirmed| |2020-03-10 Status|UNCONFIRMED |NEW Ever confirmed|0 |1 --- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- This works for me with GCC 9. On trunk this is wrong FRE: Value numbering stmt = _3 = MEM[(unsigned char *)&x]; Setting value number of _3 to 127 (changed) Value numbering stmt = _4 = _3 + 1; Match-and-simplified _3 + 1 to 128 RHS _3 + 1 simplified to 128 Setting value number of _4 to 128 (changed) Value numbering stmt = MEM[(unsigned char *)&x] = _4; No store match Value numbering store MEM[(unsigned char *)&x] to 128 Setting value number of .MEM_12 to .MEM_12 (changed) Value numbering stmt = x.2_5 = x; Successfully combined 2 partial definitions Setting value number of x.2_5 to 0 (changed) Value numbering stmt = _13 = MEM <unsigned int> [(char * {ref-all})&x]; Setting value number of _13 to 847249408 (changed) possibly caused by real_{to,from}_target doing normalization during encoding/decoding? (that would IMHO be wrong?)