https://gcc.gnu.org/bugzilla/show_bug.cgi?id=126415
--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> ---
p1.0_1 = (unsigned char) p1_5(D);
_2 = p1.0_1 + 159;
_3 = (char) _2;
- _7 = (unsigned int) _3;
- _10 = _7 + 97;
+ _10 = (unsigned int) p1_5(D);
I'll note that this must be an error in the pattern conditions, that it
"misfires" outside of VN isn't the issue.
This is because even "inside VN" (op! @0 { inner_cst; }) isn't just
a hashtable lookup for the expression itself. Even the hand-coded
variant with vn_nary_build_or_lookup will simplify.