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