1668bb963SMartin Storsjö; RUN: llc -mtriple=thumbv7-windows-msvc -frame-pointer=all %s -o - | FileCheck %s 2668bb963SMartin Storsjö; RUN: llc -mtriple=thumbv7-windows-msvc -fast-isel -frame-pointer=all %s -o - | FileCheck %s 3668bb963SMartin Storsjö; RUN: llc -mtriple=thumbv7-windows-msvc %s -o - | FileCheck %s --check-prefix=NOFP 4668bb963SMartin Storsjö; RUN: llc -mtriple=thumbv7-windows-msvc -fast-isel %s -o - | FileCheck %s --check-prefix=NOFP 5668bb963SMartin Storsjö 6*bed1c7f0SNikita Popov@env2 = common dso_local global ptr null, align 8 7668bb963SMartin Storsjö 8668bb963SMartin Storsjödefine dso_local void @bar() { 9*bed1c7f0SNikita Popov %1 = call ptr @llvm.sponentry() 10*bed1c7f0SNikita Popov %2 = load ptr, ptr @env2, align 8 11*bed1c7f0SNikita Popov %3 = call i32 @_setjmpex(ptr %2, ptr %1) #2 12668bb963SMartin Storsjö ret void 13668bb963SMartin Storsjö} 14668bb963SMartin Storsjö 15668bb963SMartin Storsjö; CHECK: bar: 16668bb963SMartin Storsjö; CHECK: push.w {r11, lr} 17668bb963SMartin Storsjö; CHECK: mov r11, sp 18668bb963SMartin Storsjö; CHECK: add.w r1, r11, #8 19668bb963SMartin Storsjö; CHECK: bl _setjmpex 20668bb963SMartin Storsjö 21668bb963SMartin Storsjö; NOFP: bar: 22668bb963SMartin Storsjö; NOFP: push.w {r11, lr} 23668bb963SMartin Storsjö; NOFP: add r1, sp, #8 24668bb963SMartin Storsjö; NOFP: bl _setjmpex 25668bb963SMartin Storsjö 26*bed1c7f0SNikita Popovdefine dso_local void @foo(ptr) { 27*bed1c7f0SNikita Popov %2 = alloca ptr, align 8 28668bb963SMartin Storsjö %3 = alloca i32, align 4 29668bb963SMartin Storsjö %4 = alloca [100 x i32], align 4 30*bed1c7f0SNikita Popov store ptr %0, ptr %2, align 8 31*bed1c7f0SNikita Popov %5 = call ptr @llvm.sponentry() 32*bed1c7f0SNikita Popov %6 = load ptr, ptr %2, align 8 33*bed1c7f0SNikita Popov %7 = call i32 @_setjmpex(ptr %6, ptr %5) 34*bed1c7f0SNikita Popov store i32 %7, ptr %3, align 4 35668bb963SMartin Storsjö ret void 36668bb963SMartin Storsjö} 37668bb963SMartin Storsjö 38668bb963SMartin Storsjö; CHECK: foo: 39668bb963SMartin Storsjö; CHECK: push.w {r11, lr} 40668bb963SMartin Storsjö; CHECK: mov r11, sp 41668bb963SMartin Storsjö; CHECK: sub sp, #416 42668bb963SMartin Storsjö; CHECK: add.w r1, r11, #8 43668bb963SMartin Storsjö; CHECK: bl _setjmpex 44668bb963SMartin Storsjö 45668bb963SMartin Storsjö; NOFP: foo: 46668bb963SMartin Storsjö; NOFP: push.w {r11, lr} 47668bb963SMartin Storsjö; NOFP: sub sp, #416 48668bb963SMartin Storsjö; NOFP: add r1, sp, #424 49668bb963SMartin Storsjö; NOFP: bl _setjmpex 50668bb963SMartin Storsjö 51*bed1c7f0SNikita Popovdefine dso_local void @var_args(ptr, ...) { 52*bed1c7f0SNikita Popov %2 = alloca ptr, align 8 53*bed1c7f0SNikita Popov %3 = alloca ptr, align 8 54*bed1c7f0SNikita Popov store ptr %0, ptr %2, align 8 55*bed1c7f0SNikita Popov call void @llvm.va_start(ptr %3) 56*bed1c7f0SNikita Popov %4 = load ptr, ptr %3, align 8 57*bed1c7f0SNikita Popov %5 = getelementptr inbounds i8, ptr %4, i64 8 58*bed1c7f0SNikita Popov store ptr %5, ptr %3, align 8 59*bed1c7f0SNikita Popov %6 = load i32, ptr %4, align 8 60*bed1c7f0SNikita Popov call void @llvm.va_end(ptr %3) 61*bed1c7f0SNikita Popov %7 = call ptr @llvm.sponentry() 62*bed1c7f0SNikita Popov %8 = load ptr, ptr @env2, align 8 63*bed1c7f0SNikita Popov %9 = call i32 @_setjmpex(ptr %8, ptr %7) #3 64668bb963SMartin Storsjö ret void 65668bb963SMartin Storsjö} 66668bb963SMartin Storsjö 67668bb963SMartin Storsjö; CHECK: var_args: 68668bb963SMartin Storsjö; CHECK: sub sp, #12 69668bb963SMartin Storsjö; CHECK: push.w {r11, lr} 70668bb963SMartin Storsjö; CHECK: mov r11, sp 71668bb963SMartin Storsjö; CHECK: add.w r1, r11, #20 72668bb963SMartin Storsjö; CHECK: bl _setjmpex 73668bb963SMartin Storsjö 74668bb963SMartin Storsjö; NOFP: var_args: 75668bb963SMartin Storsjö; NOFP: sub sp, #12 76668bb963SMartin Storsjö; NOFP: push.w {r11, lr} 77668bb963SMartin Storsjö; NOFP: sub sp, #12 78668bb963SMartin Storsjö; NOFP: add r1, sp, #32 79668bb963SMartin Storsjö; NOFP: bl _setjmpex 80668bb963SMartin Storsjö 81668bb963SMartin Storsjödefine dso_local void @manyargs(i64 %x1, i64 %x2, i64 %x3, i64 %x4, i64 %x5, i64 %x6, i64 %x7, i64 %x8, i64 %x9, i64 %x10) { 82*bed1c7f0SNikita Popov %1 = call ptr @llvm.sponentry() 83*bed1c7f0SNikita Popov %2 = load ptr, ptr @env2, align 8 84*bed1c7f0SNikita Popov %3 = call i32 @_setjmpex(ptr %2, ptr %1) #2 85668bb963SMartin Storsjö ret void 86668bb963SMartin Storsjö} 87668bb963SMartin Storsjö 88668bb963SMartin Storsjö; CHECK: manyargs: 89668bb963SMartin Storsjö; CHECK: push.w {r11, lr} 90668bb963SMartin Storsjö; CHECK: mov r11, sp 91668bb963SMartin Storsjö; CHECK: add.w r1, r11, #8 92668bb963SMartin Storsjö; CHECK: bl _setjmpex 93668bb963SMartin Storsjö 94668bb963SMartin Storsjö; NOFP: manyargs: 95668bb963SMartin Storsjö; NOFP: push.w {r11, lr} 96668bb963SMartin Storsjö; NOFP: add r1, sp, #8 97668bb963SMartin Storsjö; NOFP: bl _setjmpex 98668bb963SMartin Storsjö 99668bb963SMartin Storsjö; Function Attrs: nounwind readnone 100*bed1c7f0SNikita Popovdeclare ptr @llvm.sponentry() 101668bb963SMartin Storsjö 102668bb963SMartin Storsjö; Function Attrs: returns_twice 103*bed1c7f0SNikita Popovdeclare dso_local i32 @_setjmpex(ptr, ptr) 104668bb963SMartin Storsjö 105668bb963SMartin Storsjö; Function Attrs: nounwind 106*bed1c7f0SNikita Popovdeclare void @llvm.va_start(ptr) #1 107668bb963SMartin Storsjö 108668bb963SMartin Storsjö; Function Attrs: nounwind 109*bed1c7f0SNikita Popovdeclare void @llvm.va_end(ptr) #1 110