https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83022
Bug ID: 83022 Summary: malloc & memset -> calloc is not always an optimization Product: gcc Version: 8.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: middle-end Assignee: unassigned at gcc dot gnu.org Reporter: nathan at gcc dot gnu.org Target Milestone: --- Created attachment 42623 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=42623&action=edit exemplar We like to optimize malloc followed by memset into a calloc call. Even when the memset is conditional. That's well formed, but pessimizes, and noticeable when the size is large and we do unnecessary clearing. The attached example, compiled on x86_64 with -O results in: _Z1mmb: movl $1, %esi jmp calloc But, it causes a noticeable performance regression, as 'c' is false sufficiently often and 's' is large sufficiently often.