fn w64 $fallible(w64 %0, w8 %1) {
  @entry0
    br.ne w32 %1 0 @then1 @merge2;
  @then1
    reserve %2 1 1;
    store w8 0 %2 0;
    reserve %3 12 8;
    store w64 1 %3 0;
    store w8 %2 %3 8;
    blit %0 %3 12;
    ret %0;
  @merge2
    reserve %4 12 8;
    store w64 0 %4 0;
    store w32 42 %4 8;
    blit %0 %4 12;
    ret %0;
}

fn w64 $caller(w64 %0, w8 %1) {
  @entry0
    reserve %2 12 8;
    call w64 %3 $fallible(%2, %1);
    load w64 %4 %3 0;
    reserve %5 4 4;
    br.ne w32 %4 0 @err2 @ok1;
  @ok1
    sload w32 %6 %3 8;
    store w32 %6 %5 0;
    jmp @merge3;
  @err2
    reserve %7 12 8;
    store w64 0 %7 0;
    store w32 1 %7 8;
    blit %0 %7 12;
    ret %0;
  @merge3
    sload w32 %8 %5 0;
    add w32 %9 %8 1;
    reserve %10 12 8;
    store w64 0 %10 0;
    store w32 %9 %10 8;
    blit %0 %10 12;
    ret %0;
}
