<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/63100>63100</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[AVR] Optimize 8-bit rotation
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
benshi001
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
benshi001
</td>
</tr>
</table>
<pre>
For the following `a.ll`,
```
define i8 @test(i8 %0) {
start:
%1 = call i8 @llvm.fshr.i8(i8 %0, i8 %0, i8 4)
ret i8 %1
}
declare i8 @llvm.fshr.i8(i8, i8, i8)
```
Build it with `llc a.ll -march=avr -mcpu=atmega328`, the following assembly is generated,
```
.type test,@function
test: ; @test
; %bb.0: ; %start
bst r24, 0
ror r24
bld r24, 7
bst r24, 0
ror r24
bld r24, 7
bst r24, 0
ror r24
bld r24, 7
bst r24, 0
ror r24
bld r24, 7
ret
```
which could be optimized to a single `swap r24`.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkVMuunDwMfpqwsQYFQxhYsDgzo9n-0r_oPgEPpApklJgzOn36isu5qlW7L0K52flsf3asY7T9RNQIdRKIhqY4WCkzgSjUJdEzDz40b8eJ8d1Lc_UBeCC4eef8w049iFLq1DlRSoFnIS9CPu1jKfd_3XZ0sxOBrUAUkimywGrZoJICaxDH06YXWQcW-Q4Ci0IGIr9Aq53brzv3PKa3OITUVh9hzvB5WQisX3EC8S7Ndv-Ol4_udtQ6Heh3FjbE17H-ZYjbeJqt68AyPCwPCz3OtQALR3AYdWgHkV_0c4DD2N7nZc0j9TrHaqPwC706RhqNewEboaeJgmbq3pn-7ACk_HInANj4PYtC3uapZeunTWE9z5_gz5_IT2-J2kwtB6iMSeVfIOzaWzL3DGyfiQwBiyVS-VkSfNhmLL5ccd2bAM9w_OcBA_GX_MPHCnwMth2g9bPrwBD4O9vR_qAO2IOGaKfe0VKY8aHvq4VSpknX5F2d1zqhJisrVRXHIlfJ0OiuRimxVoWqtDJH1VaqLLFs69wolCqxDUrMZSkLieqYqTSXNaJRShupCuoyUUgatXXp-qh86BMb40xNmWdSJk4bcnFvQhM9YBXuTSg0y52Dmfu4PEobOb6jsGW3dq-nb_8LdYH_9jihOhjLEDzrpfKTObhmYL7HpavgVeC1tzzMJm39KPC64O3T4R78d2pZ4HX1Igq8rl7-DAAA__8udlpT">