https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120360
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW CC| |rguenth at gcc dot gnu.org Last reconfirmed| |2025-05-20 Ever confirmed|0 |1 --- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- int f1(type *b) { type a = *b; *b = a - 24; if (*b == 1) return g(); return 0; } is similarly "bad". This is about us not realizing it's worth canonicalizing compares to ==/!= 0, aka reduce them to the various CCmode tests. For 'f' it could work to pattern-match SSA == CST in FRE and see whether there's SSA - CST available and then re-write as == 0. Of course folding would immediately undo that unless restricted by single-use (but after CSE it should have multiple uses). I don't think this is a target thing. I'm not sure it's easily possible to handle this on the RTL side (in CSE, again), it might be detrimental before combine.