126 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc %s -o - | FileCheck %s3target triple = "thumbv7-apple-ios"4 5declare i32 @llvm.eh.sjlj.setjmp(ptr)6declare void @llvm.eh.sjlj.longjmp(ptr)7declare ptr @llvm.frameaddress(i32)8declare ptr @llvm.stacksave()9@g = external global i3210 11define void @double_foobar() {12; CHECK-LABEL: double_foobar:13; CHECK: @ %bb.0: @ %entry14; CHECK-NEXT: push.w {r4, r5, r6, r7, r8, r10, r11, lr}15; CHECK-NEXT: add r7, sp, #2416; CHECK-NEXT: sub sp, #2417; CHECK-NEXT: movs r1, #018; CHECK-NEXT: add r0, sp, #419; CHECK-NEXT: str r7, [sp, #4]20; CHECK-NEXT: str.w sp, [sp, #12]21; CHECK-NEXT: mov r1, pc @ eh_setjmp begin22; CHECK-NEXT: adds r1, r1, #723; CHECK-NEXT: str r1, [r0, #4]24; CHECK-NEXT: movs r0, #025; CHECK-NEXT: b LSJLJEH026; CHECK-NEXT: movs r0, #1 @ eh_setjmp end27; CHECK-NEXT: LSJLJEH0:28; CHECK-NEXT: cbz r0, LBB0_329; CHECK-NEXT: @ %bb.1: @ %if.then30; CHECK-NEXT: movw r0, :lower16:(L_g$non_lazy_ptr-(LPC0_0+4))31; CHECK-NEXT: movt r0, :upper16:(L_g$non_lazy_ptr-(LPC0_0+4))32; CHECK-NEXT: LPC0_0:33; CHECK-NEXT: add r0, pc34; CHECK-NEXT: ldr r1, [r0]35; CHECK-NEXT: movs r0, #136; CHECK-NEXT: str r1, [sp] @ 4-byte Spill37; CHECK-NEXT: str r0, [r1]38; CHECK-NEXT: add r0, sp, #439; CHECK-NEXT: movs r1, #040; CHECK-NEXT: str r7, [sp, #4]41; CHECK-NEXT: str.w sp, [sp, #12]42; CHECK-NEXT: mov r1, pc @ eh_setjmp begin43; CHECK-NEXT: adds r1, r1, #744; CHECK-NEXT: str r1, [r0, #4]45; CHECK-NEXT: movs r0, #046; CHECK-NEXT: b LSJLJEH147; CHECK-NEXT: movs r0, #1 @ eh_setjmp end48; CHECK-NEXT: LSJLJEH1:49; CHECK-NEXT: cmp r0, #050; CHECK-NEXT: itttt ne51; CHECK-NEXT: movne r0, #352; CHECK-NEXT: ldrne r1, [sp] @ 4-byte Reload53; CHECK-NEXT: strne r0, [r1]54; CHECK-NEXT: addne sp, #2455; CHECK-NEXT: it ne56; CHECK-NEXT: popne.w {r4, r5, r6, r7, r8, r10, r11, pc}57; CHECK-NEXT: LBB0_2: @ %if2.else58; CHECK-NEXT: ldr r1, [sp] @ 4-byte Reload59; CHECK-NEXT: movs r0, #260; CHECK-NEXT: str r0, [r1]61; CHECK-NEXT: movs r0, #062; CHECK-NEXT: add r1, sp, #463; CHECK-NEXT: ldr r0, [r1, #8]64; CHECK-NEXT: mov sp, r065; CHECK-NEXT: ldr r0, [r1, #4]66; CHECK-NEXT: ldr r7, [r1]67; CHECK-NEXT: bx r068; CHECK-NEXT: LBB0_3: @ %if.else69; CHECK-NEXT: movw r0, :lower16:(L_g$non_lazy_ptr-(LPC0_1+4))70; CHECK-NEXT: movs r1, #071; CHECK-NEXT: movt r0, :upper16:(L_g$non_lazy_ptr-(LPC0_1+4))72; CHECK-NEXT: LPC0_1:73; CHECK-NEXT: add r0, pc74; CHECK-NEXT: ldr r0, [r0]75; CHECK-NEXT: str r1, [r0]76; CHECK-NEXT: add r0, sp, #477; CHECK-NEXT: ldr r1, [r0, #8]78; CHECK-NEXT: mov sp, r179; CHECK-NEXT: ldr r1, [r0, #4]80; CHECK-NEXT: ldr r7, [r0]81; CHECK-NEXT: bx r182entry:83 %buf = alloca [5 x ptr], align 484 85 %fa = tail call ptr @llvm.frameaddress(i32 0)86 store ptr %fa, ptr %buf, align 487 %ss = tail call ptr @llvm.stacksave()88 %ssgep = getelementptr [5 x ptr], ptr %buf, i32 0, i32 289 store ptr %ss, ptr %ssgep, align 490 91 %setjmpres = call i32 @llvm.eh.sjlj.setjmp(ptr %buf)92 %tobool = icmp ne i32 %setjmpres, 093 br i1 %tobool, label %if.then, label %if.else94 95if.then:96 store volatile i32 1, ptr @g, align 497 br label %if.end98 99if.else:100 store volatile i32 0, ptr @g, align 4101 call void @llvm.eh.sjlj.longjmp(ptr %buf)102 unreachable103 104if.end:105 %fa2 = tail call ptr @llvm.frameaddress(i32 0)106 store ptr %fa2, ptr %buf, align 4107 %ss2 = tail call ptr @llvm.stacksave()108 store ptr %ss2, ptr %ssgep, align 4109 110 %setjmpres2 = call i32 @llvm.eh.sjlj.setjmp(ptr %buf)111 %tobool2 = icmp ne i32 %setjmpres2, 0112 br i1 %tobool2, label %if2.then, label %if2.else113 114if2.then:115 store volatile i32 3, ptr @g, align 4116 br label %if2.end117 118if2.else:119 store volatile i32 2, ptr @g, align 4120 call void @llvm.eh.sjlj.longjmp(ptr %buf)121 unreachable122 123if2.end:124 ret void125}126