<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">