# 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 4) ; 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 ...