| ; RUN: llc -O0 -fast-isel -mtriple=aarch64-apple-ios -o - %s | FileCheck %s | 
 | ; RUN: not --crash llc -O0 -mtriple=aarch64-apple-ios -o /dev/null -fast-isel -fast-isel-abort=3 %s 2> %t | 
 | ; RUN: FileCheck %s --check-prefix=CHECK-ERRORS < %t | 
 |  | 
 | ; The issue here is that FastISel cannot emit an ADDrr where one of the inputs | 
 | ; is SP. This only ever crops up with function calls, and then only if the | 
 | ; argument is at an offset > 2^12 * size from SP. | 
 |  | 
 | ; If FastISel ever starts coping with this and emits an "add xD, sp, xM" it's | 
 | ; critical to check the encoding as well as the textual assembly. An ADDXrs with | 
 | ; SP as an operand will still print with SP, but will actually mean XZR. | 
 |  | 
 | ; CHECK-ERRORS: LLVM ERROR: FastISel missed call | 
 |  | 
 | ; CHECK-LABEL: foo: | 
 | ; CHECK: sub | 
 | ; CHECK-DAG: mov x[[SP:[0-9]+]], sp | 
 | ; CHECK-DAG: mov [[TMP:w[0-9]+]], #4104 | 
 | ; CHECK: mov w[[OFFSET:[0-9]+]], [[TMP]] | 
 | ; CHECK: strb w0, [x[[SP]], x[[OFFSET]]] | 
 |  | 
 | define void @foo(i8 %in) { | 
 |   call void @bar(i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, ; All regs gone. | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, ; sp + 32 | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, ; sp + 64 | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, ; sp + 128 | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, ; sp + 256 | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, ; sp + 512 | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, ; sp + 1024 | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, ; sp + 2048 | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, | 
 |                  i64 undef, i64 undef, i64 undef, i64 undef, ; sp + 4096 | 
 |                  i64 undef, ; sp + 4104 (i.e. not uimm12 or uimm12 << 12). | 
 |                  i8 %in) | 
 |   ret void | 
 | } | 
 |  | 
 | declare void @bar(i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, ; All regs gone. | 
 |                   i64, i64, i64, i64, ; sp + 32 | 
 |                   i64, i64, i64, i64, ; sp + 64 | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, ; sp + 128 | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, ; sp + 256 | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, ; sp + 512 | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, ; sp + 1024 | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, ; sp + 2048 | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, | 
 |                   i64, i64, i64, i64, ; sp + 4096 | 
 |                   i64, | 
 |                   i8) |