brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.3 KiB · 0305939 Raw
83 lines · plain
1; RUN: llc -o - %s | FileCheck %s2; Check that we reserve an emergency spill slot, even if we added an extra3; CSR spill for the values used by the swiftself parameter.4; CHECK-LABEL: func:5; CHECK: str [[REG:x[0-9]+]], [sp]6; CHECK: add [[REG]], sp, #2487; CHECK: str xzr, [{{\s*}}[[REG]], #32760]8; CHECK: ldr [[REG]], [sp]9target triple = "arm64-apple-ios"10 11@ptr8 = external global ptr12@ptr64 = external global i6413 14define hidden swiftcc void @func(ptr swiftself %arg) #0 {15bb:16  %stack0 = alloca ptr, i32 5000, align 817  %stack1 = alloca ptr, i32 32, align 818 19  %v0  = load volatile i64, ptr @ptr64, align 820  %v1  = load volatile i64, ptr @ptr64, align 821  %v2  = load volatile i64, ptr @ptr64, align 822  %v3  = load volatile i64, ptr @ptr64, align 823  %v4  = load volatile i64, ptr @ptr64, align 824  %v5  = load volatile i64, ptr @ptr64, align 825  %v6  = load volatile i64, ptr @ptr64, align 826  %v7  = load volatile i64, ptr @ptr64, align 827  %v8  = load volatile i64, ptr @ptr64, align 828  %v9  = load volatile i64, ptr @ptr64, align 829  %v10 = load volatile i64, ptr @ptr64, align 830  %v11 = load volatile i64, ptr @ptr64, align 831  %v12 = load volatile i64, ptr @ptr64, align 832  %v13 = load volatile i64, ptr @ptr64, align 833  %v14 = load volatile i64, ptr @ptr64, align 834  %v15 = load volatile i64, ptr @ptr64, align 835  %v16 = load volatile i64, ptr @ptr64, align 836  %v17 = load volatile i64, ptr @ptr64, align 837  %v18 = load volatile i64, ptr @ptr64, align 838  %v19 = load volatile i64, ptr @ptr64, align 839  %v20 = load volatile i64, ptr @ptr64, align 840  %v21 = load volatile i64, ptr @ptr64, align 841  %v22 = load volatile i64, ptr @ptr64, align 842  %v23 = load volatile i64, ptr @ptr64, align 843  %v24 = load volatile i64, ptr @ptr64, align 844  %v25 = load volatile i64, ptr @ptr64, align 845 46  ; this should exceed stack-relative addressing limits and need an emergency47  ; spill slot.48  %s = getelementptr inbounds ptr, ptr %stack0, i64 409249  store volatile ptr null, ptr %s50  store volatile ptr null, ptr %stack151 52  store volatile i64 %v0,  ptr @ptr64, align 853  store volatile i64 %v1,  ptr @ptr64, align 854  store volatile i64 %v2,  ptr @ptr64, align 855  store volatile i64 %v3,  ptr @ptr64, align 856  store volatile i64 %v4,  ptr @ptr64, align 857  store volatile i64 %v5,  ptr @ptr64, align 858  store volatile i64 %v6,  ptr @ptr64, align 859  store volatile i64 %v7,  ptr @ptr64, align 860  store volatile i64 %v8,  ptr @ptr64, align 861  store volatile i64 %v9,  ptr @ptr64, align 862  store volatile i64 %v10, ptr @ptr64, align 863  store volatile i64 %v11, ptr @ptr64, align 864  store volatile i64 %v12, ptr @ptr64, align 865  store volatile i64 %v13, ptr @ptr64, align 866  store volatile i64 %v14, ptr @ptr64, align 867  store volatile i64 %v15, ptr @ptr64, align 868  store volatile i64 %v16, ptr @ptr64, align 869  store volatile i64 %v17, ptr @ptr64, align 870  store volatile i64 %v18, ptr @ptr64, align 871  store volatile i64 %v19, ptr @ptr64, align 872  store volatile i64 %v20, ptr @ptr64, align 873  store volatile i64 %v21, ptr @ptr64, align 874  store volatile i64 %v22, ptr @ptr64, align 875  store volatile i64 %v23, ptr @ptr64, align 876  store volatile i64 %v24, ptr @ptr64, align 877  store volatile i64 %v25, ptr @ptr64, align 878  79  ; use swiftself parameter late so it stays alive throughout the function.80  store volatile ptr %arg, ptr @ptr881  ret void82}83