https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114134
--- Comment #8 from Pilar Latiesa <pilarlatiesa at gmail dot com> --- I'm observing a slight improvement with current trunk for the testcase in comment #5: struct T { int i, j, k, w; }; T f(int x) { return {x, 0, x, 0}; } With 14.3 I get: movabsq $-4294967296, %r8 xorl %eax, %eax xorl %edx, %edx movl %edi, %esi movq %rax, %rcx movq %rdx, %rdi andq %r8, %rcx andq %r8, %rdi orq %rsi, %rcx orq %rsi, %rdi movl %ecx, %ecx movq %rcx, %rax movl %edi, %ecx movq %rcx, %rdx ret With trunk: movl %edi, %ecx xorl %edx, %edx movl %ecx, %esi movq %rdx, %rdi movq %rsi, %rax movabsq $-4294967296, %rsi andq %rsi, %rdi orq %rcx, %rdi movl %edi, %ecx movq %rcx, %rdx ret With 13.3: movl %edi, %eax movl %edi, %edx ret