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 7 %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 %4 %7 0;
    add w64 %8 %3 8;
    add w64 %9 %7 8;
    blit %9 %8 1;
    blit %0 %7 12;
    ret %0;
  @merge3
    sload w32 %10 %5 0;
    add w32 %11 %10 1;
    reserve %12 12 8;
    store w64 0 %12 0;
    store w32 %11 %12 8;
    blit %0 %12 12;
    ret %0;
}
