# RUN: llc -o - %s -mtriple=arm-- -run-pass prologepilog | FileCheck %s --- | define swiftcc i8* @need_emergency_slot(i8 *swiftself %v) { ; Just a dummy to add a swiftself bit. The real code is in the MI below. unreachable } ... --- # CHECK-LABEL: name: need_emergency_slot # Make sure we do not just assume an unsaved/restored callee saved register # is free to use. Callee saved parameters may still be used if they were used # to pass arguments (as in swiftself). name: need_emergency_slot tracksRegLiveness: true stack: - { id: 0, type: default, size: 8, alignment: 8 } - { id: 1, type: default, size: 4096, alignment: 8 } body: | bb.0: liveins: $r10 ; swiftself parameter comes in as $r10 ; Bring up register pressure to force emergency spilling, coax scavenging ; to use $r10 as that one is not spilled/restored. $r0 = IMPLICIT_DEF $r1 = IMPLICIT_DEF $r2 = IMPLICIT_DEF $r3 = IMPLICIT_DEF $r4 = IMPLICIT_DEF $r5 = IMPLICIT_DEF $r6 = IMPLICIT_DEF $r7 = IMPLICIT_DEF $r8 = IMPLICIT_DEF $r9 = IMPLICIT_DEF $r11 = IMPLICIT_DEF $r12 = IMPLICIT_DEF $lr = IMPLICIT_DEF ; Computing the large stack offset requires an extra register. We should ; not just use $r10 for that. ; CHECK-NOT: STRi12 %1,{{.*}}$r10 STRi12 $r1, %stack.0, 0, 14, $noreg :: (store (s32)) ; use the swiftself parameter value. KILL $r10 KILL $r0 KILL $r1 KILL $r2 KILL $r3 KILL $r4 KILL $r5 KILL $r6 KILL $r7 KILL $r8 KILL $r9 KILL $r11 KILL $r12 KILL $lr ...