https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64453
Bug ID: 64453
Summary: Live high register not saved in function prolog on ARM
with -Os
Product: gcc
Version: 5.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: thopre01 at gcc dot gnu.org
When compiling for size, live high registers are not saved in function prolog
for ARM target. The following testcase can reproduce the problem:
void save_regs () {
__asm volatile ("" ::: "r7", "r8");
}
Compiling with arm-none-eabi-gcc -c -Os -mcpu=cortex-m0 -mthumb will only save
r7 on the stack. Using -fcall-saved-r8 does not help.
The problem comes from arm_conditional_register_usage setting call_used_regs
for all high register to avoid them being allocated. However, this cause prolog
to not save these register even if they are used.