https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107250
Bug ID: 107250 Summary: Load unnecessarily happens before malloc Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: jmuizelaar at mozilla dot com Target Milestone: --- The following code will be compiled with the load of next happening before the call to malloc. This generates worse code than if the load is delayed until after the call to malloc. struct Foo { Foo* next; }; void ctx_push(Foo* f) { Foo tmp = { f->next }; Foo *n = (Foo*)malloc(sizeof(Foo)); *n = tmp; f->next = n; } Manually moving the load in this example improves the generated code: struct Foo { Foo* next; }; void ctx_push(Foo* f) { Foo *n = (Foo*)malloc(sizeof(Foo)); Foo tmp = { f->next }; *n = tmp; f->next = n; } https://gcc.godbolt.org/z/TnMj1c636