Comments 12
Хотелось бы добавить, что в статье перечислена только малая часть оптимизаций. В LLVM также есть оптимизации, которые могут целый цикл в формулу развернуть или преобразовать сложный набор инструкций в одну машинную, вроде bswap или popcnt.
0
GCC для cortex-m7 — по прежнему две инструкции чтения в цикле.
godbolt.org/z/GAGNMX
godbolt.org/z/GAGNMX
0
В gcc 9.2 похоже уже норм:
Тык
is_sorted:
@ args = 0, pretend = 0, frame = 0
@ frame_needed = 0, uses_anonymous_args = 0
@ link register save eliminated.
cmp r1, #1
ble .L4
movs r2, #0
push {r4}
subs r4, r1, #1
ldr r3, [r0]
b .L3
.L13:
cmp r2, r4
beq .L12
.L3:
mov r1, r3
ldr r3, [r0, #4]!
adds r2, r2, #1
cmp r3, r1
bge .L13
movs r0, #0
ldr r4, [sp], #4
bx lr
.L12:
movs r0, #1
ldr r4, [sp], #4
bx lr
.L4:
movs r0, #1
bx lr
+1
А есть ли похожие обзоры по GCC?
0
Sign up to leave a comment.
Как LLVM оптимизирует функцию