brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.8 KiB · e260286 Raw
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