r1 is a reserved register, but LLVM gives the APIs to know when it is used or not. So this patch uses these APIs to only save/clear/restore r1 in interrupts when necessary.
The main issue here was getting inline assembly to work. One could argue that this is the job of Clang, but for consistency I've made sure that r1 is always usable in inline assembly even if that means clearing it when it might not be needed.
Information on inline assembly in AVR can be found here:
https://www.nongnu.org/avr-libc/user-manual/inline_asm.html#asm_code
Essentially, this seems to suggest that r1 can be freely used in avr-gcc inline assembly, even without specifying it as an input operand.
This patch depends on D117425.
This was a bug.