function: fact (entry: bb_0x34)

[fact_0x34] 0x34-0x42  (entry)
source: recursion_extern.c:18:21;
  push {r7, lr}
  sub sp, #8
  add r7, sp, #0
  str r0, [r7, #4]
  ldr r3, [r7, #4]
  cmp r3, #1
  bhi #0x46
  -> bb_0x42 (ls=fallthrough), bb_0x46 (hi=taken)

[fact_0x42] 0x42-0x46
source: recursion_extern.c:21:21;
  movs r3, #1
  b #0x56
  -> bb_0x56

[fact_0x46] 0x46-0x4c
source: recursion_extern.c:19:23;
  ldr r3, [r7, #4]
  subs r3, #1
  movs r0, r3
  -> bb_0x4c

[fact_0x4c] 0x4c-0x50  (external-call fact)
source: recursion_extern.c:23:23;
  bl #0x4c
  -> bb_0x50

[fact_0x50] 0x50-0x56
source: recursion_extern.c:24:24;
  movs r2, r0
  ldr r3, [r7, #4]
  muls r3, r2, r3
  -> bb_0x56

[fact_0x56] 0x56-0x5e  (exit)
source: recursion_extern.c:25:27;
  movs r0, r3
  mov sp, r7
  add sp, #8
  pop {r7, pc}

------------------------------------------------------------

function: irreducible (entry: bb_0x5e)

cycles: 1 backward edge(s) that are not natural loops — bb_0x7e -> bb_0x70. Multi-entry/irreducible: no trip count is derivable, and blocks on them can run more often than iters says.

[irreducible_0x5e] 0x5e-0x70  (entry)
source: recursion_extern.c:27:31;
  push {r7, lr}
  sub sp, #8
  add r7, sp, #0
  movs r3, #0
  str r3, [r7, #4]
  ldr r3, [pc, #0x28]
  ldr r3, [r3]
  cmp r3, #0
  bne #0x7c
  -> bb_0x70 (eq=fallthrough), bb_0x7c (ne=taken)

[irreducible_0x70] 0x70-0x7c
source: recursion_extern.c:31:33;
  ldr r3, [pc, #0x20]
  ldr r3, [r3]
  adds r2, r3, #1
  ldr r3, [pc, #0x1c]
  str r2, [r3]
  b #0x7e
  -> bb_0x7e

[irreducible_0x7c] 0x7c-0x7e
source: recursion_extern.c:33:33;
  mov r8, r8
  -> bb_0x7e

[irreducible_0x7e] 0x7e-0x8a
source: recursion_extern.c:33:33;
  ldr r3, [r7, #4]
  adds r3, #1
  str r3, [r7, #4]
  ldr r3, [r7, #4]
  cmp r3, #3
  ble #0x70
  -> bb_0x70 (le=taken, backward-edge, irreducible), bb_0x8a (gt=fallthrough)

[irreducible_0x8a] 0x8a-0x94  (exit)
source: recursion_extern.c:34:34;
  mov r8, r8
  mov r8, r8
  mov sp, r7
  add sp, #8
  pop {r7, pc}

------------------------------------------------------------

function: kernel_main (entry: bb_0x98)

[kernel_main_0x98] 0x98-0x9e  (entry)
  push {r7, lr}
  add r7, sp, #0
  movs r0, #5
  -> bb_0x9e

[kernel_main_0x9e] 0x9e-0xa2  (external-call fact)
  bl #0x9e
  -> bb_0xa2

[kernel_main_0xa2] 0xa2-0xa8
  movs r2, r0
  ldr r3, [pc, #0x1c]
  str r2, [r3]
  -> bb_0xa8

[kernel_main_0xa8] 0xa8-0xac  (external-call irreducible)
  bl #0xa8
  -> bb_0xac

[kernel_main_0xac] 0xac-0xae
  movs r0, #3
  -> bb_0xae

[kernel_main_0xae] 0xae-0xb2  (external-call external_thing)
  bl #0xae
  -> bb_0xb2

[kernel_main_0xb2] 0xb2-0xc4  (exit)
  movs r2, r0
  ldr r3, [pc, #0xc]
  ldr r3, [r3]
  adds r2, r2, r3
  ldr r3, [pc, #8]
  str r2, [r3]
  mov r8, r8
  mov sp, r7
  pop {r7, pc}
