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

    <tr>
        <th>Summary</th>
        <td>
            [avr] Return values are promoted to (unsigned) int for no reason.
        </td>
    </tr>

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

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

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

<pre>
    Compiler with `--target=avr -mmcu=atmega8 -Os -save-temps` the following code:
```c++
char func (char c)
{
    return c;
}
```
The generated assembly reads:
```none
func:
        mov     r25, r24
        lsl     r25
        sbc     r25, r25
        ret
```
which just wastes 3 cycles and 6 bytes for integer promotion that's not required.

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJxtks2O2yAQx58GX0aObOzE9sGHzUZ7rVT1BfiY2KwwpIAT5e07OEm3amuNzDB_GH7MIL2-j-9-uRiLAW4mzcAOVVkmESZMrDmJa4ByWdSa_bTgJHoov0Uoo7himXC5RNoAaUY4e2v9zbgJlNfImjdWnVj1RvLDFOPHbFtUzSLAeXUKGO-3CcnDc0f3XAT0BUxrcKQ2x5d6-ivxY_qDECZ0GERCDSJGXKS9036h478wzjt8hDLEl14Ni7_SP_A94-8QePtbsNE-hVckSvXn0i-BoP_LeJuNmuFzjQluIiaM0IC6K0uOcBoOIO85ePYBjEs4UU8uwS8-Ge-oxiIx3kVwPtG1fq4moN49Ehc41odDN1T90A2FHhs9NIMokkkWR7Y_UhvZ_gTfH8W8CrvmIwM-01PBks-dWF00k0NNvcgEG4nzuYjRu12xBjvOKV22gvIPsomezCp3yi80sfb6GkpK_ImKgD9MjHQaOfu-77piHrFvVddWslI91gOve92oVjTErrHt5KGwQqKNmZtx7vAGWwry6Q6FGXnFeV1XfU3Oftj1upUSsVbnqh6GvmFthYswdpc5dj5MRRg3JLlOkURrYopfIr2UfOWtTDm_WNPswxgvIbcgRFlsp48b_S8dcfZD">