[clang] [llvm] [AVR] Fix Avr indvar detection and strength reduction (missed optimization) (PR #152028)
Tom Vijlbrief via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 7 09:30:19 PDT 2025
tomtor wrote:
```
000001f6 <avr_modern_demo::serial::Serial::write_int>:
1f6: ef 92 push r14
1f8: 0f 93 push r16
1fa: 1f 93 push r17
1fc: 8a 30 cpi r24, 0x0A ; 10
1fe: 91 05 cpc r25, r1
200: c0 f0 brcs .+48 ; 0x232 <.Lname69+0x8>
202: 2d ec ldi r18, 0xCD ; 205
204: 3c ec ldi r19, 0xCC ; 204
206: 40 e0 ldi r20, 0x00 ; 0
208: 50 e0 ldi r21, 0x00 ; 0
20a: bc 01 movw r22, r24
20c: e8 2e mov r14, r24
20e: ca 01 movw r24, r20
210: 0e 94 cd 02 call 0x59a ; 0x59a <__mulsi3>
214: 8c 01 movw r16, r24
216: 16 95 lsr r17
218: 07 95 ror r16
21a: 16 95 lsr r17
21c: 07 95 ror r16
21e: 16 95 lsr r17
220: 07 95 ror r16
222: c8 01 movw r24, r16
224: 0e 94 fb 00 call 0x1f6 ; 0x1f6 <avr_modern_demo::serial::Serial::write_int>
228: 86 ef ldi r24, 0xF6 ; 246
22a: 08 02 muls r16, r24
22c: 11 24 eor r1, r1
22e: 80 2d mov r24, r0
230: 8e 0d add r24, r14
232: 90 91 04 08 lds r25, 0x0804 ; 0x800804 <anon.0e9a9fafcd14a44665a97d696f684c31.7+0x7f7a23>
236: 90 72 andi r25, 0x20 ; 32
238: 90 30 cpi r25, 0x00 ; 0
23a: d9 f3 breq .-10 ; 0x232 <.Lname69+0x8>
23c: 80 63 ori r24, 0x30 ; 48
23e: 80 93 02 08 sts 0x0802, r24 ; 0x800802 <anon.0e9a9fafcd14a44665a97d696f684c31.7+0x7f7a21>
242: 1f 91 pop r17
244: 0f 91 pop r16
246: ef 90 pop r14
248: 08 95 ret
```
```
000001f8 <avr_modern_demo::serial::Serial::write_int>:
1f8: ef 92 push r14
1fa: ff 92 push r15
1fc: 0f 93 push r16
1fe: 1f 93 push r17
200: 8a 30 cpi r24, 0x0A ; 10
202: 91 05 cpc r25, r1
204: 08 f4 brcc .+2 ; 0x208 <.Lname65+0x7>
206: 2c c0 rjmp .+88 ; 0x260 <.Lname73+0xa>
208: 2d ec ldi r18, 0xCD ; 205
20a: 3c ec ldi r19, 0xCC ; 204
20c: 40 e0 ldi r20, 0x00 ; 0
20e: 50 e0 ldi r21, 0x00 ; 0
210: 7c 01 movw r14, r24
212: bc 01 movw r22, r24
214: ca 01 movw r24, r20
216: 0e 94 e3 02 call 0x5c6 ; 0x5c6 <__mulsi3>
21a: 8c 01 movw r16, r24
21c: 16 95 lsr r17
21e: 07 95 ror r16
220: 16 95 lsr r17
222: 07 95 ror r16
224: 16 95 lsr r17
226: 07 95 ror r16
228: c8 01 movw r24, r16
22a: 0e 94 fc 00 call 0x1f8 ; 0x1f8 <avr_modern_demo::serial::Serial::write_int>
22e: 80 91 04 08 lds r24, 0x0804 ; 0x800804 <anon.b5803c54398eee9364225baa7d2d2398.7+0x7f79f7>
232: 80 72 andi r24, 0x20 ; 32
234: 80 30 cpi r24, 0x00 ; 0
236: d9 f3 breq .-10 ; 0x22e <.Lname69+0x4>
238: 86 ef ldi r24, 0xF6 ; 246
23a: 18 02 muls r17, r24
23c: 90 2d mov r25, r0
23e: 11 24 eor r1, r1
240: 08 9f mul r16, r24
242: 81 2d mov r24, r1
244: 11 24 eor r1, r1
246: 80 1b sub r24, r16
248: 89 0f add r24, r25
24a: 28 2f mov r18, r24
24c: 33 27 eor r19, r19
24e: 32 2f mov r19, r18
250: 22 27 eor r18, r18
252: 80 2d mov r24, r0
254: 99 27 eor r25, r25
256: 82 2b or r24, r18
258: 93 2b or r25, r19
25a: 8e 0d add r24, r14
25c: 9f 1d adc r25, r15
25e: 05 c0 rjmp .+10 ; 0x26a <.Lname74+0x9>
260: 20 91 04 08 lds r18, 0x0804 ; 0x800804 <anon.b5803c54398eee9364225baa7d2d2398.7+0x7f79f7>
264: 20 72 andi r18, 0x20 ; 32
266: 20 30 cpi r18, 0x00 ; 0
268: d9 f3 breq .-10 ; 0x260 <.Lname73+0xa>
26a: 80 63 ori r24, 0x30 ; 48
26c: 80 93 02 08 sts 0x0802, r24 ; 0x800802 <anon.b5803c54398eee9364225baa7d2d2398.7+0x7f79f5>
270: 1f 91 pop r17
272: 0f 91 pop r16
274: ff 90 pop r15
276: ef 90 pop r14
278: 08 95 ret
```
```
pub fn write_int(&self, i: u16) {
if i > 9 {
self.write_int(i / 10);
self.write_int(i % 10);
} else {
self.write_c(b'0' + i as u8);
}
}
```
https://github.com/llvm/llvm-project/pull/152028
More information about the llvm-commits
mailing list