; ModuleID = 'defer.go'
source_filename = "defer.go"
target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"
target triple = "thumbv7m-unknown-unknown-eabi"

%runtime.deferFrame = type { ptr, ptr, [0 x ptr], ptr, i8, %runtime._interface, ptr }
%runtime._interface = type { ptr, ptr }

; Function Attrs: nounwind
define hidden void @main.init(ptr %context) unnamed_addr #0 {
entry:
  ret void
}

declare void @main.external(ptr) #1

; Function Attrs: nounwind
define hidden void @main.deferSimple(ptr %context) unnamed_addr #0 {
entry:
  %defer.alloca = alloca { i32, ptr }, align 4
  %deferframe.buf = alloca %runtime.deferFrame, align 4
  %deferPtr = getelementptr inbounds nuw i8, ptr %deferframe.buf, i32 24
  %0 = call ptr @llvm.stacksave.p0()
  call void @runtime.setupDeferFrame(ptr nonnull %deferframe.buf, ptr %0, ptr undef) #4
  %defer.next = load ptr, ptr %deferPtr, align 4
  store i32 0, ptr %defer.alloca, align 4
  %defer.alloca.repack15 = getelementptr inbounds nuw i8, ptr %defer.alloca, i32 4
  store ptr %defer.next, ptr %defer.alloca.repack15, align 4
  store ptr %defer.alloca, ptr %deferPtr, align 4
  %setjmp = call i32 asm "\0Amovs r0, #0\0Amov r2, pc\0Astr r2, [r1, #4]", "={r0},{r1},~{r1},~{r2},~{r3},~{r4},~{r5},~{r6},~{r7},~{r8},~{r9},~{r10},~{r11},~{r12},~{lr},~{q0},~{q1},~{q2},~{q3},~{q4},~{q5},~{q6},~{q7},~{q8},~{q9},~{q10},~{q11},~{q12},~{q13},~{q14},~{q15},~{cpsr},~{memory}"(ptr nonnull %deferframe.buf) #5
  %setjmp.result = icmp eq i32 %setjmp, 0
  br i1 %setjmp.result, label %1, label %lpad

1:                                                ; preds = %entry
  call void @main.external(ptr undef) #4
  br label %rundefers.block

rundefers.after:                                  ; preds = %rundefers.end
  call void @runtime.destroyDeferFrame(ptr nonnull %deferframe.buf, ptr undef) #4
  ret void

rundefers.block:                                  ; preds = %1
  br label %rundefers.loophead

rundefers.loophead:                               ; preds = %3, %rundefers.block
  %2 = load ptr, ptr %deferPtr, align 4
  %stackIsNil = icmp eq ptr %2, null
  br i1 %stackIsNil, label %rundefers.end, label %rundefers.loop

rundefers.loop:                                   ; preds = %rundefers.loophead
  %stack.next.gep = getelementptr inbounds nuw i8, ptr %2, i32 4
  %stack.next = load ptr, ptr %stack.next.gep, align 4
  store ptr %stack.next, ptr %deferPtr, align 4
  %callback = load i32, ptr %2, align 4
  switch i32 %callback, label %rundefers.default [
    i32 0, label %rundefers.callback0
  ]

rundefers.callback0:                              ; preds = %rundefers.loop
  %setjmp1 = call i32 asm "\0Amovs r0, #0\0Amov r2, pc\0Astr r2, [r1, #4]", "={r0},{r1},~{r1},~{r2},~{r3},~{r4},~{r5},~{r6},~{r7},~{r8},~{r9},~{r10},~{r11},~{r12},~{lr},~{q0},~{q1},~{q2},~{q3},~{q4},~{q5},~{q6},~{q7},~{q8},~{q9},~{q10},~{q11},~{q12},~{q13},~{q14},~{q15},~{cpsr},~{memory}"(ptr nonnull %deferframe.buf) #5
  %setjmp.result2 = icmp eq i32 %setjmp1, 0
  br i1 %setjmp.result2, label %3, label %lpad

3:                                                ; preds = %rundefers.callback0
  call void @"main.deferSimple$1"(ptr undef)
  br label %rundefers.loophead

rundefers.default:                                ; preds = %rundefers.loop
  unreachable

rundefers.end:                                    ; preds = %rundefers.loophead
  br label %rundefers.after

recover:                                          ; preds = %rundefers.end3
  call void @runtime.destroyDeferFrame(ptr nonnull %deferframe.buf, ptr undef) #4
  ret void

lpad:                                             ; preds = %rundefers.callback012, %rundefers.callback0, %entry
  br label %rundefers.loophead6

rundefers.loophead6:                              ; preds = %5, %lpad
  %4 = load ptr, ptr %deferPtr, align 4
  %stackIsNil7 = icmp eq ptr %4, null
  br i1 %stackIsNil7, label %rundefers.end3, label %rundefers.loop5

rundefers.loop5:                                  ; preds = %rundefers.loophead6
  %stack.next.gep8 = getelementptr inbounds nuw i8, ptr %4, i32 4
  %stack.next9 = load ptr, ptr %stack.next.gep8, align 4
  store ptr %stack.next9, ptr %deferPtr, align 4
  %callback11 = load i32, ptr %4, align 4
  switch i32 %callback11, label %rundefers.default4 [
    i32 0, label %rundefers.callback012
  ]

rundefers.callback012:                            ; preds = %rundefers.loop5
  %setjmp13 = call i32 asm "\0Amovs r0, #0\0Amov r2, pc\0Astr r2, [r1, #4]", "={r0},{r1},~{r1},~{r2},~{r3},~{r4},~{r5},~{r6},~{r7},~{r8},~{r9},~{r10},~{r11},~{r12},~{lr},~{q0},~{q1},~{q2},~{q3},~{q4},~{q5},~{q6},~{q7},~{q8},~{q9},~{q10},~{q11},~{q12},~{q13},~{q14},~{q15},~{cpsr},~{memory}"(ptr nonnull %deferframe.buf) #5
  %setjmp.result14 = icmp eq i32 %setjmp13, 0
  br i1 %setjmp.result14, label %5, label %lpad

5:                                                ; preds = %rundefers.callback012
  call void @"main.deferSimple$1"(ptr undef)
  br label %rundefers.loophead6

rundefers.default4:                               ; preds = %rundefers.loop5
  unreachable

rundefers.end3:                                   ; preds = %rundefers.loophead6
  br label %recover
}

; Function Attrs: nocallback nofree nosync nounwind willreturn
declare ptr @llvm.stacksave.p0() #2

declare void @runtime.setupDeferFrame(ptr dereferenceable_or_null(28), ptr, ptr) #1

declare void @runtime.destroyDeferFrame(ptr dereferenceable_or_null(28), ptr) #1

; Function Attrs: nounwind
define internal void @"main.deferSimple$1"(ptr %context) unnamed_addr #0 {
entry:
  call void @runtime.printlock(ptr undef) #4
  call void @runtime.printint32(i32 3, ptr undef) #4
  call void @runtime.printunlock(ptr undef) #4
  ret void
}

declare void @runtime.printlock(ptr) #1

declare void @runtime.printint32(i32, ptr) #1

declare void @runtime.printunlock(ptr) #1

; Function Attrs: nounwind
define hidden void @main.deferMultiple(ptr %context) unnamed_addr #0 {
entry:
  %defer.alloca2 = alloca { i32, ptr }, align 4
  %defer.alloca = alloca { i32, ptr }, align 4
  %deferframe.buf = alloca %runtime.deferFrame, align 4
  %deferPtr = getelementptr inbounds nuw i8, ptr %deferframe.buf, i32 24
  %0 = call ptr @llvm.stacksave.p0()
  call void @runtime.setupDeferFrame(ptr nonnull %deferframe.buf, ptr %0, ptr undef) #4
  %defer.next = load ptr, ptr %deferPtr, align 4
  store i32 0, ptr %defer.alloca, align 4
  %defer.alloca.repack22 = getelementptr inbounds nuw i8, ptr %defer.alloca, i32 4
  store ptr %defer.next, ptr %defer.alloca.repack22, align 4
  store ptr %defer.alloca, ptr %deferPtr, align 4
  store i32 1, ptr %defer.alloca2, align 4
  %defer.alloca2.repack24 = getelementptr inbounds nuw i8, ptr %defer.alloca2, i32 4
  store ptr %defer.alloca, ptr %defer.alloca2.repack24, align 4
  store ptr %defer.alloca2, ptr %deferPtr, align 4
  %setjmp = call i32 asm "\0Amovs r0, #0\0Amov r2, pc\0Astr r2, [r1, #4]", "={r0},{r1},~{r1},~{r2},~{r3},~{r4},~{r5},~{r6},~{r7},~{r8},~{r9},~{r10},~{r11},~{r12},~{lr},~{q0},~{q1},~{q2},~{q3},~{q4},~{q5},~{q6},~{q7},~{q8},~{q9},~{q10},~{q11},~{q12},~{q13},~{q14},~{q15},~{cpsr},~{memory}"(ptr nonnull %deferframe.buf) #5
  %setjmp.result = icmp eq i32 %setjmp, 0
  br i1 %setjmp.result, label %1, label %lpad

1:                                                ; preds = %entry
  call void @main.external(ptr undef) #4
  br label %rundefers.block

rundefers.after:                                  ; preds = %rundefers.end
  call void @runtime.destroyDeferFrame(ptr nonnull %deferframe.buf, ptr undef) #4
  ret void

rundefers.block:                                  ; preds = %1
  br label %rundefers.loophead

rundefers.loophead:                               ; preds = %4, %3, %rundefers.block
  %2 = load ptr, ptr %deferPtr, align 4
  %stackIsNil = icmp eq ptr %2, null
  br i1 %stackIsNil, label %rundefers.end, label %rundefers.loop

rundefers.loop:                                   ; preds = %rundefers.loophead
  %stack.next.gep = getelementptr inbounds nuw i8, ptr %2, i32 4
  %stack.next = load ptr, ptr %stack.next.gep, align 4
  store ptr %stack.next, ptr %deferPtr, align 4
  %callback = load i32, ptr %2, align 4
  switch i32 %callback, label %rundefers.default [
    i32 0, label %rundefers.callback0
    i32 1, label %rundefers.callback1
  ]

rundefers.callback0:                              ; preds = %rundefers.loop
  %setjmp3 = call i32 asm "\0Amovs r0, #0\0Amov r2, pc\0Astr r2, [r1, #4]", "={r0},{r1},~{r1},~{r2},~{r3},~{r4},~{r5},~{r6},~{r7},~{r8},~{r9},~{r10},~{r11},~{r12},~{lr},~{q0},~{q1},~{q2},~{q3},~{q4},~{q5},~{q6},~{q7},~{q8},~{q9},~{q10},~{q11},~{q12},~{q13},~{q14},~{q15},~{cpsr},~{memory}"(ptr nonnull %deferframe.buf) #5
  %setjmp.result4 = icmp eq i32 %setjmp3, 0
  br i1 %setjmp.result4, label %3, label %lpad

3:                                                ; preds = %rundefers.callback0
  call void @"main.deferMultiple$1"(ptr undef)
  br label %rundefers.loophead

rundefers.callback1:                              ; preds = %rundefers.loop
  %setjmp5 = call i32 asm "\0Amovs r0, #0\0Amov r2, pc\0Astr r2, [r1, #4]", "={r0},{r1},~{r1},~{r2},~{r3},~{r4},~{r5},~{r6},~{r7},~{r8},~{r9},~{r10},~{r11},~{r12},~{lr},~{q0},~{q1},~{q2},~{q3},~{q4},~{q5},~{q6},~{q7},~{q8},~{q9},~{q10},~{q11},~{q12},~{q13},~{q14},~{q15},~{cpsr},~{memory}"(ptr nonnull %deferframe.buf) #5
  %setjmp.result6 = icmp eq i32 %setjmp5, 0
  br i1 %setjmp.result6, label %4, label %lpad

4:                                                ; preds = %rundefers.callback1
  call void @"main.deferMultiple$2"(ptr undef)
  br label %rundefers.loophead

rundefers.default:                                ; preds = %rundefers.loop
  unreachable

rundefers.end:                                    ; preds = %rundefers.loophead
  br label %rundefers.after

recover:                                          ; preds = %rundefers.end7
  call void @runtime.destroyDeferFrame(ptr nonnull %deferframe.buf, ptr undef) #4
  ret void

lpad:                                             ; preds = %rundefers.callback119, %rundefers.callback016, %rundefers.callback1, %rundefers.callback0, %entry
  br label %rundefers.loophead10

rundefers.loophead10:                             ; preds = %7, %6, %lpad
  %5 = load ptr, ptr %deferPtr, align 4
  %stackIsNil11 = icmp eq ptr %5, null
  br i1 %stackIsNil11, label %rundefers.end7, label %rundefers.loop9

rundefers.loop9:                                  ; preds = %rundefers.loophead10
  %stack.next.gep12 = getelementptr inbounds nuw i8, ptr %5, i32 4
  %stack.next13 = load ptr, ptr %stack.next.gep12, align 4
  store ptr %stack.next13, ptr %deferPtr, align 4
  %callback15 = load i32, ptr %5, align 4
  switch i32 %callback15, label %rundefers.default8 [
    i32 0, label %rundefers.callback016
    i32 1, label %rundefers.callback119
  ]

rundefers.callback016:                            ; preds = %rundefers.loop9
  %setjmp17 = call i32 asm "\0Amovs r0, #0\0Amov r2, pc\0Astr r2, [r1, #4]", "={r0},{r1},~{r1},~{r2},~{r3},~{r4},~{r5},~{r6},~{r7},~{r8},~{r9},~{r10},~{r11},~{r12},~{lr},~{q0},~{q1},~{q2},~{q3},~{q4},~{q5},~{q6},~{q7},~{q8},~{q9},~{q10},~{q11},~{q12},~{q13},~{q14},~{q15},~{cpsr},~{memory}"(ptr nonnull %deferframe.buf) #5
  %setjmp.result18 = icmp eq i32 %setjmp17, 0
  br i1 %setjmp.result18, label %6, label %lpad

6:                                                ; preds = %rundefers.callback016
  call void @"main.deferMultiple$1"(ptr undef)
  br label %rundefers.loophead10

rundefers.callback119:                            ; preds = %rundefers.loop9
  %setjmp20 = call i32 asm "\0Amovs r0, #0\0Amov r2, pc\0Astr r2, [r1, #4]", "={r0},{r1},~{r1},~{r2},~{r3},~{r4},~{r5},~{r6},~{r7},~{r8},~{r9},~{r10},~{r11},~{r12},~{lr},~{q0},~{q1},~{q2},~{q3},~{q4},~{q5},~{q6},~{q7},~{q8},~{q9},~{q10},~{q11},~{q12},~{q13},~{q14},~{q15},~{cpsr},~{memory}"(ptr nonnull %deferframe.buf) #5
  %setjmp.result21 = icmp eq i32 %setjmp20, 0
  br i1 %setjmp.result21, label %7, label %lpad

7:                                                ; preds = %rundefers.callback119
  call void @"main.deferMultiple$2"(ptr undef)
  br label %rundefers.loophead10

rundefers.default8:                               ; preds = %rundefers.loop9
  unreachable

rundefers.end7:                                   ; preds = %rundefers.loophead10
  br label %recover
}

; Function Attrs: nounwind
define internal void @"main.deferMultiple$1"(ptr %context) unnamed_addr #0 {
entry:
  call void @runtime.printlock(ptr undef) #4
  call void @runtime.printint32(i32 3, ptr undef) #4
  call void @runtime.printunlock(ptr undef) #4
  ret void
}

; Function Attrs: nounwind
define internal void @"main.deferMultiple$2"(ptr %context) unnamed_addr #0 {
entry:
  call void @runtime.printlock(ptr undef) #4
  call void @runtime.printint32(i32 5, ptr undef) #4
  call void @runtime.printunlock(ptr undef) #4
  ret void
}

; Function Attrs: nounwind
define hidden void @main.deferInfiniteLoop(ptr %context) unnamed_addr #0 {
entry:
  %deferframe.buf = alloca %runtime.deferFrame, align 4
  %deferPtr = getelementptr inbounds nuw i8, ptr %deferframe.buf, i32 24
  %0 = call ptr @llvm.stacksave.p0()
  call void @runtime.setupDeferFrame(ptr nonnull %deferframe.buf, ptr %0, ptr undef) #4
  br label %for.body

for.body:                                         ; preds = %for.body, %entry
  %defer.next = load ptr, ptr %deferPtr, align 4
  %defer.alloc.call = call align 4 dereferenceable(12) ptr @runtime.alloc(i32 12, ptr nonnull inttoptr (i32 135 to ptr), ptr undef) #4
  store i32 0, ptr %defer.alloc.call, align 4
  %defer.alloc.call.repack1 = getelementptr inbounds nuw i8, ptr %defer.alloc.call, i32 4
  store ptr %defer.next, ptr %defer.alloc.call.repack1, align 4
  %defer.alloc.call.repack3 = getelementptr inbounds nuw i8, ptr %defer.alloc.call, i32 8
  store i32 8, ptr %defer.alloc.call.repack3, align 4
  store ptr %defer.alloc.call, ptr %deferPtr, align 4
  br label %for.body

recover:                                          ; preds = %rundefers.end
  ret void

lpad:                                             ; No predecessors!
  br label %rundefers.loophead

rundefers.loophead:                               ; preds = %rundefers.callback0, %lpad
  br i1 poison, label %rundefers.end, label %rundefers.loop

rundefers.loop:                                   ; preds = %rundefers.loophead
  switch i32 poison, label %rundefers.default [
    i32 0, label %rundefers.callback0
  ]

rundefers.callback0:                              ; preds = %rundefers.loop
  br label %rundefers.loophead

rundefers.default:                                ; preds = %rundefers.loop
  unreachable

rundefers.end:                                    ; preds = %rundefers.loophead
  br label %recover
}

; Function Attrs: allockind("alloc,zeroed") allocsize(0)
declare noalias nonnull ptr @runtime.alloc(i32, ptr, ptr) #3

; Function Attrs: nounwind
define hidden void @main.deferLoop(ptr %context) unnamed_addr #0 {
entry:
  %deferframe.buf = alloca %runtime.deferFrame, align 4
  %deferPtr = getelementptr inbounds nuw i8, ptr %deferframe.buf, i32 24
  %0 = call ptr @llvm.stacksave.p0()
  call void @runtime.setupDeferFrame(ptr nonnull %deferframe.buf, ptr %0, ptr undef) #4
  br label %for.loop

for.loop:                                         ; preds = %for.body, %entry
  %1 = phi i32 [ 0, %entry ], [ %3, %for.body ]
  %2 = icmp slt i32 %1, 10
  br i1 %2, label %for.body, label %for.done

for.body:                                         ; preds = %for.loop
  %defer.next = load ptr, ptr %deferPtr, align 4
  %defer.alloc.call = call align 4 dereferenceable(12) ptr @runtime.alloc(i32 12, ptr nonnull inttoptr (i32 135 to ptr), ptr undef) #4
  store i32 0, ptr %defer.alloc.call, align 4
  %defer.alloc.call.repack13 = getelementptr inbounds nuw i8, ptr %defer.alloc.call, i32 4
  store ptr %defer.next, ptr %defer.alloc.call.repack13, align 4
  %defer.alloc.call.repack15 = getelementptr inbounds nuw i8, ptr %defer.alloc.call, i32 8
  store i32 %1, ptr %defer.alloc.call.repack15, align 4
  store ptr %defer.alloc.call, ptr %deferPtr, align 4
  %3 = add i32 %1, 1
  br label %for.loop

for.done:                                         ; preds = %for.loop
  br label %rundefers.block

rundefers.after:                                  ; preds = %rundefers.end
  call void @runtime.destroyDeferFrame(ptr nonnull %deferframe.buf, ptr undef) #4
  ret void

rundefers.block:                                  ; preds = %for.done
  br label %rundefers.loophead

rundefers.loophead:                               ; preds = %rundefers.callback0, %rundefers.block
  %4 = load ptr, ptr %deferPtr, align 4
  %stackIsNil = icmp eq ptr %4, null
  br i1 %stackIsNil, label %rundefers.end, label %rundefers.loop

rundefers.loop:                                   ; preds = %rundefers.loophead
  %stack.next.gep = getelementptr inbounds nuw i8, ptr %4, i32 4
  %stack.next = load ptr, ptr %stack.next.gep, align 4
  store ptr %stack.next, ptr %deferPtr, align 4
  %callback = load i32, ptr %4, align 4
  switch i32 %callback, label %rundefers.default [
    i32 0, label %rundefers.callback0
  ]

rundefers.callback0:                              ; preds = %rundefers.loop
  %gep = getelementptr inbounds nuw i8, ptr %4, i32 8
  %param = load i32, ptr %gep, align 4
  call void @runtime.printlock(ptr undef) #4
  call void @runtime.printint32(i32 %param, ptr undef) #4
  call void @runtime.printunlock(ptr undef) #4
  br label %rundefers.loophead

rundefers.default:                                ; preds = %rundefers.loop
  unreachable

rundefers.end:                                    ; preds = %rundefers.loophead
  br label %rundefers.after

recover:                                          ; preds = %rundefers.end1
  ret void

lpad:                                             ; No predecessors!
  br label %rundefers.loophead4

rundefers.loophead4:                              ; preds = %rundefers.callback010, %lpad
  br i1 poison, label %rundefers.end1, label %rundefers.loop3

rundefers.loop3:                                  ; preds = %rundefers.loophead4
  switch i32 poison, label %rundefers.default2 [
    i32 0, label %rundefers.callback010
  ]

rundefers.callback010:                            ; preds = %rundefers.loop3
  br label %rundefers.loophead4

rundefers.default2:                               ; preds = %rundefers.loop3
  unreachable

rundefers.end1:                                   ; preds = %rundefers.loophead4
  br label %recover
}

; Function Attrs: nounwind
define hidden void @main.deferBetweenLoops(ptr %context) unnamed_addr #0 {
entry:
  %defer.alloca = alloca { i32, ptr, i32 }, align 4
  %deferframe.buf = alloca %runtime.deferFrame, align 4
  %deferPtr = getelementptr inbounds nuw i8, ptr %deferframe.buf, i32 24
  %0 = call ptr @llvm.stacksave.p0()
  call void @runtime.setupDeferFrame(ptr nonnull %deferframe.buf, ptr %0, ptr undef) #4
  br label %for.loop

for.loop:                                         ; preds = %for.body, %entry
  %1 = phi i32 [ 0, %entry ], [ %3, %for.body ]
  %2 = icmp slt i32 %1, 10
  br i1 %2, label %for.body, label %for.done

for.body:                                         ; preds = %for.loop
  %3 = add i32 %1, 1
  br label %for.loop

for.done:                                         ; preds = %for.loop
  %defer.next = load ptr, ptr %deferPtr, align 4
  store i32 0, ptr %defer.alloca, align 4
  %defer.alloca.repack16 = getelementptr inbounds nuw i8, ptr %defer.alloca, i32 4
  store ptr %defer.next, ptr %defer.alloca.repack16, align 4
  %defer.alloca.repack18 = getelementptr inbounds nuw i8, ptr %defer.alloca, i32 8
  store i32 1, ptr %defer.alloca.repack18, align 4
  store ptr %defer.alloca, ptr %deferPtr, align 4
  br label %for.loop1

for.loop1:                                        ; preds = %for.body2, %for.done
  %4 = phi i32 [ 0, %for.done ], [ %6, %for.body2 ]
  %5 = icmp slt i32 %4, 10
  br i1 %5, label %for.body2, label %for.done3

for.body2:                                        ; preds = %for.loop1
  %6 = add i32 %4, 1
  br label %for.loop1

for.done3:                                        ; preds = %for.loop1
  br label %rundefers.block

rundefers.after:                                  ; preds = %rundefers.end
  call void @runtime.destroyDeferFrame(ptr nonnull %deferframe.buf, ptr undef) #4
  ret void

rundefers.block:                                  ; preds = %for.done3
  br label %rundefers.loophead

rundefers.loophead:                               ; preds = %rundefers.callback0, %rundefers.block
  %7 = load ptr, ptr %deferPtr, align 4
  %stackIsNil = icmp eq ptr %7, null
  br i1 %stackIsNil, label %rundefers.end, label %rundefers.loop

rundefers.loop:                                   ; preds = %rundefers.loophead
  %stack.next.gep = getelementptr inbounds nuw i8, ptr %7, i32 4
  %stack.next = load ptr, ptr %stack.next.gep, align 4
  store ptr %stack.next, ptr %deferPtr, align 4
  %callback = load i32, ptr %7, align 4
  switch i32 %callback, label %rundefers.default [
    i32 0, label %rundefers.callback0
  ]

rundefers.callback0:                              ; preds = %rundefers.loop
  %gep = getelementptr inbounds nuw i8, ptr %7, i32 8
  %param = load i32, ptr %gep, align 4
  call void @runtime.printlock(ptr undef) #4
  call void @runtime.printint32(i32 %param, ptr undef) #4
  call void @runtime.printunlock(ptr undef) #4
  br label %rundefers.loophead

rundefers.default:                                ; preds = %rundefers.loop
  unreachable

rundefers.end:                                    ; preds = %rundefers.loophead
  br label %rundefers.after

recover:                                          ; preds = %rundefers.end4
  ret void

lpad:                                             ; No predecessors!
  br label %rundefers.loophead7

rundefers.loophead7:                              ; preds = %rundefers.callback013, %lpad
  br i1 poison, label %rundefers.end4, label %rundefers.loop6

rundefers.loop6:                                  ; preds = %rundefers.loophead7
  switch i32 poison, label %rundefers.default5 [
    i32 0, label %rundefers.callback013
  ]

rundefers.callback013:                            ; preds = %rundefers.loop6
  br label %rundefers.loophead7

rundefers.default5:                               ; preds = %rundefers.loop6
  unreachable

rundefers.end4:                                   ; preds = %rundefers.loophead7
  br label %recover
}

attributes #0 = { nounwind "target-features"="+armv7-m,+hwdiv,+soft-float,+thumb-mode,-aes,-bf16,-cdecp0,-cdecp1,-cdecp2,-cdecp3,-cdecp4,-cdecp5,-cdecp6,-cdecp7,-crc,-crypto,-d32,-dotprod,-dsp,-fp-armv8,-fp-armv8d16,-fp-armv8d16sp,-fp-armv8sp,-fp16,-fp16fml,-fp64,-fpregs,-fullfp16,-hwdiv-arm,-i8mm,-lob,-mve,-mve.fp,-neon,-pacbti,-ras,-sb,-sha2,-vfp2,-vfp2sp,-vfp3,-vfp3d16,-vfp3d16sp,-vfp3sp,-vfp4,-vfp4d16,-vfp4d16sp,-vfp4sp" }
attributes #1 = { "target-features"="+armv7-m,+hwdiv,+soft-float,+thumb-mode,-aes,-bf16,-cdecp0,-cdecp1,-cdecp2,-cdecp3,-cdecp4,-cdecp5,-cdecp6,-cdecp7,-crc,-crypto,-d32,-dotprod,-dsp,-fp-armv8,-fp-armv8d16,-fp-armv8d16sp,-fp-armv8sp,-fp16,-fp16fml,-fp64,-fpregs,-fullfp16,-hwdiv-arm,-i8mm,-lob,-mve,-mve.fp,-neon,-pacbti,-ras,-sb,-sha2,-vfp2,-vfp2sp,-vfp3,-vfp3d16,-vfp3d16sp,-vfp3sp,-vfp4,-vfp4d16,-vfp4d16sp,-vfp4sp" }
attributes #2 = { nocallback nofree nosync nounwind willreturn }
attributes #3 = { allockind("alloc,zeroed") allocsize(0) "alloc-family"="runtime.alloc" "target-features"="+armv7-m,+hwdiv,+soft-float,+thumb-mode,-aes,-bf16,-cdecp0,-cdecp1,-cdecp2,-cdecp3,-cdecp4,-cdecp5,-cdecp6,-cdecp7,-crc,-crypto,-d32,-dotprod,-dsp,-fp-armv8,-fp-armv8d16,-fp-armv8d16sp,-fp-armv8sp,-fp16,-fp16fml,-fp64,-fpregs,-fullfp16,-hwdiv-arm,-i8mm,-lob,-mve,-mve.fp,-neon,-pacbti,-ras,-sb,-sha2,-vfp2,-vfp2sp,-vfp3,-vfp3d16,-vfp3d16sp,-vfp3sp,-vfp4,-vfp4d16,-vfp4d16sp,-vfp4sp" }
attributes #4 = { nounwind }
attributes #5 = { nounwind returns_twice }
