https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83022
--- Comment #9 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (In reply to Andrew Pinski from comment #8) > Created attachment 61040 [details] > Patch which needs some comments but is lightly tested and seems to work > > This also needs testcases but the patch fixes the performance issue here. > Note it is on top of the patch for PR 87900 since that needs the similar > code too. This patch still allows to optimizing this: ``` void *m (int s, bool c, bool *a) { void *r = __builtin_malloc (s); if (r) { __builtin_memset (r, 0, s); *a = 1; } return r; } ``` Which llvm can do too. So it is it is only pattern matching the condition between the 2 BBs. >the move to the strlen pass made that inconvenient I don't see how that was incovenient especially since my patch shows how easy it was it was easy to add that pattern matching back.