https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93265
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2020-01-14 Component|c |tree-optimization Ever confirmed|0 |1 --- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- So I see it already resolved to a direct compare during GENERIC folding which is probably confused by the COMPOUND_LITERAL_EXPR: return memcmp ((const void *) &X, (const void *) &<<< Unknown tree: compound_literal_expr const struct a_tp D.2112 = {.x=42}; >>>, 4) == 0; I think tree-ssa-strlen.c has code to change memcmp to memcmp_eq which can be more optimally expanded. It also has code to directly emit more optimal GIMPLE. Not sure why that doesn't fire here. Confirmed.