<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/106213>106213</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [M68k] function epilogue pops stack too far
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          TechnoElf
      </td>
    </tr>
</table>

<pre>
    The generated epilogue for functions that return structs adds 4 to the stack pointer despite there being no corresponding subtraction in the prologue.

A minimal example for this issue would be

```
define internal void @test(ptr sret([10 x i8]) align 2 %_0) unnamed_addr #1 {
start:
  ret void
}
```

which produces the following code (using `llc -O0 -march=m68k`):

```
        .p2align        1 ; -- Begin function test
        .type   test,@function
test: ; @test
        .cfi_startproc
; %bb.0: ; %start
        move.l  (4,%sp), %d0
 move.l  (%sp), %a1
        adda.l  #4, %sp
        move.l  %a1, (%sp)
        rts
.Lfunc_end2:
        .size   test, .Lfunc_end2-test
        .cfi_endproc
 ; -- End function
        .section ".note.GNU-stack","",@progbits
```

The same issue occurs with longer functions that do actually use the stack.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJx0VE2TozgM_TXmogoFAgI5cOhMJnvZj8vsucvYCnjH2JRtOtP767cMpJPs9FApAuZJ7-nZEvde9YaoZdWRVaeEz2Gwrv1GYjD2q74knZXv7beBoCdDjgeSQJPStp8JLtbBZTYiKGs8hIEHcBRmZ8AHN4vggUvpoYRgIQwEPnDxHSarTCAHkvykAsUvjqAjZXowFoR1jvxkjYwLfu6C4wsDKLNkmZxd6FOWnVj2st5fYFRGjVwD_eDjpFdxYVAelPczwdXOWkJHj0Fsn22_5VXSRRmCRZ3hGt6sksDKLJAPDJspOPCO4iOrjnkGP0A1rDoxPADXqjeAwLB6zeLCbAwfSb5yKR0wLHJg9XGl8YG7wIpNA0TLFqpNU336VNx6vw5KDNEBOQvyix0Xq7W9Rq-ElQQMm9nHN7bPtBaw-yuD3cidGFhxGvfN95gRDx_8n5LBdqUTrpVtVw6sOMJuB0fqlfnYe1gceo4M7xMBrF_wCyuzG3jFLevFy5LvZvFzAnFRr4tVk7NiUxnBWHVdmn3EYrX6-RQ82jdKNUQzysiOlZ9i0fglBshblQ-w_0F4_pyQS8lXZFFuED_9ijNGL5h71iekC35dSH-PprySkfhwHrb6vfr3wUB4wO5-4RYZeffqtlNfjYRn6-8MtO4eQ0yNDZT-9uffu6VHGeJiG24PZTY523fqJvzTsxmHhOcjbQ1nhZidh6sKA2hrevppVkgLXISZa_0Os6f7iEgT2RbyUBx4Qm1eY1nv86w-JEOLTVeXB9qXAlFcmj2v6q7JO6wbXuzrTiSqxQzLrME6x7yuDmlRNBw7UdSZ5HWDNSszGrnSqdZvY2pdnyxy2zzbY14kmnek_TINEQ1d12KiDdUpcW0M2nVz71mZaeWDv6cJKuhljP4Rm6w63bvjY15OdvLbEAzWwoW7ZHa6HUKYfDwAeGZ47lUY5i4VdmR4jtm3v93k7D8kAsPzoskzPG-i31r8LwAA___6o7SL">