#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ printf(char *, ...);
void drawbox(int b[][8 + 2], char hint[], int opt) {
  int x, y;
  printf("\n   ");
  for (x = 1; x <= 8; x++)
    printf(" %c", (opt < 2) ? '0' + ((4 * 8 - x + 1) / 10) : " 123"[(x / 10)]);
  printf("\n   ");
  for (x = 1; x <= 8; x++)
    printf(" %c", '0' + ((opt < 2) ? ((4 * 8 - x + 1) % 10) : (x % 10)));
  printf("\n   ");
  for (x = 1; x <= 8; x++)
    printf(" %c", hint[4 * 8 - x]);
  for (y = 1; y <= 8; y++) {
    printf("\n%2d%c", y, hint[y - 1]);
    for (x = 1; x <= 8; x++)
      printf(" %c", (opt < 3) ? '+' : (b[x][y]) ? 'O' : '+');
    if (opt < 2)
      printf(" %c%-2d", hint[3 * 8 - y], 3 * 8 - y + 1);
    else
      printf(" %c", hint[3 * 8 - y]);
  }
  printf("\n   ");
  for (x = 1; x <= 8; x++)
    printf(" %c", hint[8 + x - 1]);
  if (opt < 2) {
    printf("\n   ");
    for (x = 1; x <= 8; x++)
      printf(" %c", " 1234"[(8 + x) / 10]);
    printf("\n   ");
    for (x = 1; x <= 8; x++)
      printf(" %c", '0' + ((8 + x) % 10));
  }
  printf("\n\n");
}


x86 assembly (clang, -O0):
<drawbox>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
lea    0xed6(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x18(%rbp)
cmpl   $0x8,-0x18(%rbp)
jg     11a5 <drawbox+0x95>
cmpl   $0x2,-0x14(%rbp)
jge    116a <drawbox+0x5a>
mov    $0x20,%eax
sub    -0x18(%rbp),%eax
add    $0x1,%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
add    $0x30,%eax
mov    %eax,-0x20(%rbp)
jmp    1186 <drawbox+0x76>
mov    -0x18(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
movslq %eax,%rcx
lea    0xe8a(%rip),%rax
movsbl (%rax,%rcx,1),%eax
mov    %eax,-0x20(%rbp)
mov    -0x20(%rbp),%esi
lea    0xe75(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1138 <drawbox+0x28>
lea    0xe54(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x18(%rbp)
cmpl   $0x8,-0x18(%rbp)
jg     1219 <drawbox+0x109>
cmpl   $0x2,-0x14(%rbp)
jge    11e9 <drawbox+0xd9>
mov    $0x20,%eax
sub    -0x18(%rbp),%eax
add    $0x1,%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %edx,-0x24(%rbp)
jmp    11f7 <drawbox+0xe7>
mov    -0x18(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %edx,-0x24(%rbp)
mov    -0x24(%rbp),%esi
add    $0x30,%esi
lea    0xe01(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    11ba <drawbox+0xaa>
lea    0xde0(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x18(%rbp)
cmpl   $0x8,-0x18(%rbp)
jg     1267 <drawbox+0x157>
mov    -0x10(%rbp),%rax
mov    $0x20,%ecx
sub    -0x18(%rbp),%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%esi
lea    0xdb3(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    122e <drawbox+0x11e>
movl   $0x1,-0x1c(%rbp)
cmpl   $0x8,-0x1c(%rbp)
jg     1379 <drawbox+0x269>
mov    -0x1c(%rbp),%esi
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%edx
lea    0xd7b(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x18(%rbp)
cmpl   $0x8,-0x18(%rbp)
jg     130a <drawbox+0x1fa>
cmpl   $0x3,-0x14(%rbp)
jge    12c2 <drawbox+0x1b2>
mov    $0x2b,%eax
mov    %eax,-0x28(%rbp)
jmp    12eb <drawbox+0x1db>
mov    -0x8(%rbp),%rax
movslq -0x18(%rbp),%rcx
imul   $0x28,%rcx,%rcx
add    %rcx,%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    $0x2b,%eax
mov    $0x4f,%ecx
cmp    $0x0,%edx
cmovne %ecx,%eax
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%esi
lea    0xd10(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    12a1 <drawbox+0x191>
cmpl   $0x2,-0x14(%rbp)
jge    1345 <drawbox+0x235>
mov    -0x10(%rbp),%rax
mov    $0x18,%ecx
sub    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%esi
mov    $0x18,%edx
sub    -0x1c(%rbp),%edx
add    $0x1,%edx
lea    0xcdc(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1366 <drawbox+0x256>
mov    -0x10(%rbp),%rax
mov    $0x18,%ecx
sub    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%esi
lea    0xca6(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    136b <drawbox+0x25b>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    126e <drawbox+0x15e>
lea    0xc80(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x18(%rbp)
cmpl   $0x8,-0x18(%rbp)
jg     13c8 <drawbox+0x2b8>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x8,%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%esi
lea    0xc52(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    138e <drawbox+0x27e>
cmpl   $0x2,-0x14(%rbp)
jge    147c <drawbox+0x36c>
lea    0xc27(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x18(%rbp)
cmpl   $0x8,-0x18(%rbp)
jg     1429 <drawbox+0x319>
mov    -0x18(%rbp),%eax
add    $0x8,%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
movslq %eax,%rcx
lea    0xc14(%rip),%rax
movsbl (%rax,%rcx,1),%esi
lea    0xbf1(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    13e7 <drawbox+0x2d7>
lea    0xbd0(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x18(%rbp)
cmpl   $0x8,-0x18(%rbp)
jg     1477 <drawbox+0x367>
mov    -0x18(%rbp),%eax
add    $0x8,%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %edx,%esi
add    $0x30,%esi
lea    0xba3(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    143e <drawbox+0x32e>
jmp    147c <drawbox+0x36c>
lea    0xba0(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<drawbox>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
mov    %edx,%r13d
mov    %rsi,0x8(%rsp)
mov    %rdi,0x10(%rsp)
lea    0xebe(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    $0x8,%ebp
mov    $0x1,%bl
lea    0xeae(%rip),%r15
lea    0xeab(%rip),%r12
jmp    1184 <drawbox+0x64>
movzbl %bl,%eax
imul   $0xcd,%eax,%eax
shr    $0xb,%rax
movsbl (%rax,%r12,1),%esi
mov    %r15,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
add    $0x1,%bl
add    $0xffffffff,%ebp
je     11a0 <drawbox+0x80>
cmp    $0x1,%r13d
jg     1160 <drawbox+0x40>
lea    0x18(%rbp),%eax
movzbl %al,%eax
imul   $0xcd,%eax,%eax
shr    $0xb,%eax
add    $0x30,%al
movzbl %al,%esi
jmp    1172 <drawbox+0x52>
xor    %r15d,%r15d
mov    %r13d,0x4(%rsp)
xor    %r13d,%r13d
cmpl   $0x2,0x4(%rsp)
setge  %r15b
setl   %r13b
lea    0xe41(%rip),%r12
mov    %r12,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0x31(%r13),%esi
lea    0xe31(%rip),%r14
mov    %r14,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    $0x32,%esi
sub    %r13d,%esi
mov    %r14,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
lea    (%r15,%r15,2),%esi
or     $0x30,%esi
mov    %r14,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0x34(%r13,%r13,4),%esi
mov    %r14,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0x35(%r13,%r13,2),%esi
mov    %r14,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0x36(%r13),%esi
mov    %r14,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
xor    $0x37,%r13d
mov    %r14,%rdi
mov    %r13d,%esi
mov    0x4(%rsp),%ebx
xor    %eax,%eax
call   1040 <printf@plt>
lea    (%r15,%r15,2),%esi
add    $0x35,%esi
mov    %r14,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    %r12,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    0x8(%rsp),%rbp
movsbl 0x1f(%rbp),%esi
mov    %r14,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
movsbl 0x1e(%rbp),%esi
mov    %r14,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
movsbl 0x1d(%rbp),%esi
mov    %r14,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
movsbl 0x1c(%rbp),%esi
mov    %r14,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
movsbl 0x1b(%rbp),%esi
mov    %r14,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
movsbl 0x1a(%rbp),%esi
mov    %r14,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
movsbl 0x19(%rbp),%esi
mov    %r14,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
movsbl 0x18(%rbp),%esi
mov    %r14,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    $0x17,%r12d
xor    %r15d,%r15d
jmp    12fc <drawbox+0x1dc>
nopl   (%rax)
mov    %r14,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
add    $0xffffffffffffffff,%r12
add    $0x1,%r15
cmp    $0x8,%r15
je     149e <drawbox+0x37e>
movsbl 0x0(%rbp,%r15,1),%edx
lea    0x1(%r15),%esi
lea    0xd01(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
cmp    $0x2,%ebx
jg     1390 <drawbox+0x270>
mov    $0x2b,%r13d
mov    %r14,%rdi
mov    $0x2b,%esi
xor    %eax,%eax
call   1040 <printf@plt>
mov    %r14,%rdi
mov    $0x2b,%esi
xor    %eax,%eax
call   1040 <printf@plt>
mov    %r14,%rdi
mov    $0x2b,%esi
xor    %eax,%eax
call   1040 <printf@plt>
mov    %r14,%rdi
mov    $0x2b,%esi
xor    %eax,%eax
call   1040 <printf@plt>
mov    %r14,%rdi
mov    $0x2b,%esi
xor    %eax,%eax
call   1040 <printf@plt>
mov    %r14,%rdi
mov    $0x2b,%esi
xor    %eax,%eax
call   1040 <printf@plt>
mov    %r14,%rdi
mov    $0x2b,%esi
xor    %eax,%eax
call   1040 <printf@plt>
jmp    1461 <drawbox+0x341>
nopl   (%rax)
mov    0x10(%rsp),%rbx
cmpl   $0x0,0x2c(%rbx,%r15,4)
mov    $0x4f,%esi
mov    $0x2b,%ebp
cmove  %ebp,%esi
mov    %r14,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
cmpl   $0x0,0x54(%rbx,%r15,4)
mov    $0x4f,%esi
cmove  %ebp,%esi
mov    %r14,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
cmpl   $0x0,0x7c(%rbx,%r15,4)
mov    $0x4f,%esi
cmove  %ebp,%esi
mov    %r14,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
cmpl   $0x0,0xa4(%rbx,%r15,4)
mov    $0x4f,%esi
cmove  %ebp,%esi
mov    %r14,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
cmpl   $0x0,0xcc(%rbx,%r15,4)
mov    $0x4f,%esi
cmove  %ebp,%esi
mov    %r14,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
cmpl   $0x0,0xf4(%rbx,%r15,4)
mov    $0x4f,%esi
cmove  %ebp,%esi
mov    %r14,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
cmpl   $0x0,0x11c(%rbx,%r15,4)
mov    $0x4f,%esi
cmove  %ebp,%esi
mov    %r14,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
cmpl   $0x0,0x144(%rbx,%r15,4)
mov    $0x4f,%r13d
cmove  %ebp,%r13d
mov    %r14,%rdi
mov    %r13d,%esi
xor    %eax,%eax
call   1040 <printf@plt>
mov    0x8(%rsp),%rbp
movsbl 0x0(%rbp,%r12,1),%esi
mov    0x4(%rsp),%ebx
cmp    $0x1,%ebx
jg     12e0 <drawbox+0x1c0>
lea    0x1(%r12),%edx
lea    0xb83(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
jmp    12ea <drawbox+0x1ca>
lea    0xb5b(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
movsbl 0x8(%rbp),%esi
lea    0xb4e(%rip),%r14
mov    %r14,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
movsbl 0x9(%rbp),%esi
mov    %r14,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
movsbl 0xa(%rbp),%esi
mov    %r14,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
movsbl 0xb(%rbp),%esi
mov    %r14,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
movsbl 0xc(%rbp),%esi
mov    %r14,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
movsbl 0xd(%rbp),%esi
mov    %r14,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
movsbl 0xe(%rbp),%esi
mov    %r14,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
movsbl 0xf(%rbp),%esi
mov    %r14,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
cmp    $0x1,%ebx
jg     163e <drawbox+0x51e>
lea    0xacd(%rip),%rbp
mov    %rbp,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xac1(%rip),%rbx
mov    %rbx,%rdi
mov    $0x20,%esi
xor    %eax,%eax
call   1040 <printf@plt>
mov    %rbx,%rdi
mov    $0x31,%esi
xor    %eax,%eax
call   1040 <printf@plt>
mov    %rbx,%rdi
mov    $0x31,%esi
xor    %eax,%eax
call   1040 <printf@plt>
mov    %rbx,%rdi
mov    $0x31,%esi
xor    %eax,%eax
call   1040 <printf@plt>
mov    %rbx,%rdi
mov    $0x31,%esi
xor    %eax,%eax
call   1040 <printf@plt>
mov    %rbx,%rdi
mov    $0x31,%esi
xor    %eax,%eax
call   1040 <printf@plt>
mov    %rbx,%rdi
mov    $0x31,%esi
xor    %eax,%eax
call   1040 <printf@plt>
mov    %rbx,%rdi
mov    $0x31,%esi
xor    %eax,%eax
call   1040 <printf@plt>
mov    %rbp,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    %rbx,%rdi
mov    $0x39,%esi
xor    %eax,%eax
call   1040 <printf@plt>
mov    %rbx,%rdi
mov    $0x30,%esi
xor    %eax,%eax
call   1040 <printf@plt>
mov    %rbx,%rdi
mov    $0x31,%esi
xor    %eax,%eax
call   1040 <printf@plt>
mov    %rbx,%rdi
mov    $0x32,%esi
xor    %eax,%eax
call   1040 <printf@plt>
mov    %rbx,%rdi
mov    $0x33,%esi
xor    %eax,%eax
call   1040 <printf@plt>
mov    %rbx,%rdi
mov    $0x34,%esi
xor    %eax,%eax
call   1040 <printf@plt>
mov    %rbx,%rdi
mov    $0x35,%esi
xor    %eax,%eax
call   1040 <printf@plt>
mov    %rbx,%rdi
mov    $0x36,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0x9d8(%rip),%rdi
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1030 <puts@plt>

LLVM IR (-O0):
@.str = [5 x i8] c"\0A \00"
@.str.1 = [4 x i8] c" %c\00"
@.str.2 = [5 x i8] c" 123\00"
@.str.3 = [7 x i8] c"\0A%2d%c\00"
@.str.4 = [8 x i8] c" %c%-2d\00"
@.str.5 = [6 x i8] c" 1234\00"
@.str.6 = [3 x i8] c"\0A\0A\00"
define void @drawbox([10 x i32]* %0, i8* %1, i32 %2) {
%4 = alloca [10 x i32]*
%5 = alloca i8*
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
store [10 x i32]* %0, [10 x i32]** %4
store i8* %1, i8** %5
store i32 %2, i32* %6
%9 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
store i32 1, i32* %7
br label %10
10: ; preds = %32, %3
%11 = load i32, i32* %7
%12 = icmp sle i32 %11, 8
br i1 %12, label %13, label %35
13: ; preds = %10
%14 = load i32, i32* %6
%15 = icmp slt i32 %14, 2
br i1 %15, label %16, label %22
16: ; preds = %13
%17 = load i32, i32* %7
%18 = sub nsw i32 32, %17
%19 = add nsw i32 %18, 1
%20 = sdiv i32 %19, 10
%21 = add nsw i32 48, %20
br label %29
22: ; preds = %13
%23 = load i32, i32* %7
%24 = sdiv i32 %23, 10
%25 = sext i32 %24 to i64
%26 = getelementptr inbounds [5 x i8], [5 x i8]* @.str.2, i64 0, i64 %25
%27 = load i8, i8* %26
%28 = sext i8 %27 to i32
br label %29
29: ; preds = %22, %16
%30 = phi i32 [ %21, %16 ], [ %28, %22 ]
%31 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %30)
br label %32
32: ; preds = %29
%33 = load i32, i32* %7
%34 = add nsw i32 %33, 1
store i32 %34, i32* %7
br label %10
35: ; preds = %10
%36 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
store i32 1, i32* %7
br label %37
37: ; preds = %55, %35
%38 = load i32, i32* %7
%39 = icmp sle i32 %38, 8
br i1 %39, label %40, label %58
40: ; preds = %37
%41 = load i32, i32* %6
%42 = icmp slt i32 %41, 2
br i1 %42, label %43, label %48
43: ; preds = %40
%44 = load i32, i32* %7
%45 = sub nsw i32 32, %44
%46 = add nsw i32 %45, 1
%47 = srem i32 %46, 10
br label %51
48: ; preds = %40
%49 = load i32, i32* %7
%50 = srem i32 %49, 10
br label %51
51: ; preds = %48, %43
%52 = phi i32 [ %47, %43 ], [ %50, %48 ]
%53 = add nsw i32 48, %52
%54 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %53)
br label %55
55: ; preds = %51
%56 = load i32, i32* %7
%57 = add nsw i32 %56, 1
store i32 %57, i32* %7
br label %37
58: ; preds = %37
%59 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
store i32 1, i32* %7
br label %60
60: ; preds = %72, %58
%61 = load i32, i32* %7
%62 = icmp sle i32 %61, 8
br i1 %62, label %63, label %75
63: ; preds = %60
%64 = load i8*, i8** %5
%65 = load i32, i32* %7
%66 = sub nsw i32 32, %65
%67 = sext i32 %66 to i64
%68 = getelementptr inbounds i8, i8* %64, i64 %67
%69 = load i8, i8* %68
%70 = sext i8 %69 to i32
%71 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %70)
br label %72
72: ; preds = %63
%73 = load i32, i32* %7
%74 = add nsw i32 %73, 1
store i32 %74, i32* %7
br label %60
75: ; preds = %60
store i32 1, i32* %8
br label %76
76: ; preds = %139, %75
%77 = load i32, i32* %8
%78 = icmp sle i32 %77, 8
br i1 %78, label %79, label %142
79: ; preds = %76
%80 = load i32, i32* %8
%81 = load i8*, i8** %5
%82 = load i32, i32* %8
%83 = sub nsw i32 %82, 1
%84 = sext i32 %83 to i64
%85 = getelementptr inbounds i8, i8* %81, i64 %84
%86 = load i8, i8* %85
%87 = sext i8 %86 to i32
%88 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.3, i64 0, i64 0), i32 %80, i32 %87)
store i32 1, i32* %7
br label %89
89: ; preds = %111, %79
%90 = load i32, i32* %7
%91 = icmp sle i32 %90, 8
br i1 %91, label %92, label %114
92: ; preds = %89
%93 = load i32, i32* %6
%94 = icmp slt i32 %93, 3
br i1 %94, label %95, label %96
95: ; preds = %92
br label %108
96: ; preds = %92
%97 = load [10 x i32]*, [10 x i32]** %4
%98 = load i32, i32* %7
%99 = sext i32 %98 to i64
%100 = getelementptr inbounds [10 x i32], [10 x i32]* %97, i64 %99
%101 = load i32, i32* %8
%102 = sext i32 %101 to i64
%103 = getelementptr inbounds [10 x i32], [10 x i32]* %100, i64 0, i64 %102
%104 = load i32, i32* %103
%105 = icmp ne i32 %104, 0
%106 = zext i1 %105 to i64
%107 = select i1 %105, i32 79, i32 43
br label %108
108: ; preds = %96, %95
%109 = phi i32 [ 43, %95 ], [ %107, %96 ]
%110 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %109)
br label %111
111: ; preds = %108
%112 = load i32, i32* %7
%113 = add nsw i32 %112, 1
store i32 %113, i32* %7
br label %89
114: ; preds = %89
%115 = load i32, i32* %6
%116 = icmp slt i32 %115, 2
br i1 %116, label %117, label %129
117: ; preds = %114
%118 = load i8*, i8** %5
%119 = load i32, i32* %8
%120 = sub nsw i32 24, %119
%121 = sext i32 %120 to i64
%122 = getelementptr inbounds i8, i8* %118, i64 %121
%123 = load i8, i8* %122
%124 = sext i8 %123 to i32
%125 = load i32, i32* %8
%126 = sub nsw i32 24, %125
%127 = add nsw i32 %126, 1
%128 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.4, i64 0, i64 0), i32 %124, i32 %127)
br label %138
129: ; preds = %114
%130 = load i8*, i8** %5
%131 = load i32, i32* %8
%132 = sub nsw i32 24, %131
%133 = sext i32 %132 to i64
%134 = getelementptr inbounds i8, i8* %130, i64 %133
%135 = load i8, i8* %134
%136 = sext i8 %135 to i32
%137 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %136)
br label %138
138: ; preds = %129, %117
br label %139
139: ; preds = %138
%140 = load i32, i32* %8
%141 = add nsw i32 %140, 1
store i32 %141, i32* %8
br label %76
142: ; preds = %76
%143 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
store i32 1, i32* %7
br label %144
144: ; preds = %157, %142
%145 = load i32, i32* %7
%146 = icmp sle i32 %145, 8
br i1 %146, label %147, label %160
147: ; preds = %144
%148 = load i8*, i8** %5
%149 = load i32, i32* %7
%150 = add nsw i32 8, %149
%151 = sub nsw i32 %150, 1
%152 = sext i32 %151 to i64
%153 = getelementptr inbounds i8, i8* %148, i64 %152
%154 = load i8, i8* %153
%155 = sext i8 %154 to i32
%156 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %155)
br label %157
157: ; preds = %147
%158 = load i32, i32* %7
%159 = add nsw i32 %158, 1
store i32 %159, i32* %7
br label %144
160: ; preds = %144
%161 = load i32, i32* %6
%162 = icmp slt i32 %161, 2
br i1 %162, label %163, label %195
163: ; preds = %160
%164 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
store i32 1, i32* %7
br label %165
165: ; preds = %177, %163
%166 = load i32, i32* %7
%167 = icmp sle i32 %166, 8
br i1 %167, label %168, label %180
168: ; preds = %165
%169 = load i32, i32* %7
%170 = add nsw i32 8, %169
%171 = sdiv i32 %170, 10
%172 = sext i32 %171 to i64
%173 = getelementptr inbounds [6 x i8], [6 x i8]* @.str.5, i64 0, i64 %172
%174 = load i8, i8* %173
%175 = sext i8 %174 to i32
%176 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %175)
br label %177
177: ; preds = %168
%178 = load i32, i32* %7
%179 = add nsw i32 %178, 1
store i32 %179, i32* %7
br label %165
180: ; preds = %165
%181 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
store i32 1, i32* %7
br label %182
182: ; preds = %191, %180
%183 = load i32, i32* %7
%184 = icmp sle i32 %183, 8
br i1 %184, label %185, label %194
185: ; preds = %182
%186 = load i32, i32* %7
%187 = add nsw i32 8, %186
%188 = srem i32 %187, 10
%189 = add nsw i32 48, %188
%190 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %189)
br label %191
191: ; preds = %185
%192 = load i32, i32* %7
%193 = add nsw i32 %192, 1
store i32 %193, i32* %7
br label %182
194: ; preds = %182
br label %195
195: ; preds = %194, %160
%196 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.6, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@.str = [5 x i8] c"\0A \00"
@.str.1 = [4 x i8] c" %c\00"
@.str.2 = [5 x i8] c" 123\00"
@.str.3 = [7 x i8] c"\0A%2d%c\00"
@.str.4 = [8 x i8] c" %c%-2d\00"
@str = [2 x i8] c"\0A\00"
define void @drawbox([10 x i32]* nocapture %0, i8* nocapture %1, i32 %2) {
%4 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
%5 = icmp slt i32 %2, 2
br label %6
6: ; preds = %3, %20
%7 = phi i32 [ 1, %3 ], [ %23, %20 ]
%8 = trunc i32 %7 to i8
br i1 %5, label %9, label %14
9: ; preds = %6
%10 = sub i8 33, %8
%11 = udiv i8 %10, 10
%12 = add nuw nsw i8 %11, 48
%13 = zext i8 %12 to i32
br label %20
14: ; preds = %6
%15 = udiv i8 %8, 10
%16 = zext i8 %15 to i64
%17 = getelementptr inbounds [5 x i8], [5 x i8]* @.str.2, i64 0, i64 %16
%18 = load i8, i8* %17
%19 = sext i8 %18 to i32
br label %20
20: ; preds = %14, %9
%21 = phi i32 [ %13, %9 ], [ %19, %14 ]
%22 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %21)
%23 = add nuw nsw i32 %7, 1
%24 = icmp eq i32 %23, 9
br i1 %24, label %25, label %6
25: ; preds = %20
%26 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
%27 = select i1 %5, i32 50, i32 49
%28 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %27)
%29 = select i1 %5, i32 49, i32 50
%30 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %29)
%31 = select i1 %5, i32 48, i32 51
%32 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %31)
%33 = select i1 %5, i32 57, i32 52
%34 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %33)
%35 = select i1 %5, i32 56, i32 53
%36 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %35)
%37 = select i1 %5, i32 55, i32 54
%38 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %37)
%39 = select i1 %5, i32 54, i32 55
%40 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %39)
%41 = select i1 %5, i32 53, i32 56
%42 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %41)
%43 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
%44 = getelementptr inbounds i8, i8* %1, i64 31
%45 = load i8, i8* %44
%46 = sext i8 %45 to i32
%47 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %46)
%48 = getelementptr inbounds i8, i8* %1, i64 30
%49 = load i8, i8* %48
%50 = sext i8 %49 to i32
%51 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %50)
%52 = getelementptr inbounds i8, i8* %1, i64 29
%53 = load i8, i8* %52
%54 = sext i8 %53 to i32
%55 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %54)
%56 = getelementptr inbounds i8, i8* %1, i64 28
%57 = load i8, i8* %56
%58 = sext i8 %57 to i32
%59 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %58)
%60 = getelementptr inbounds i8, i8* %1, i64 27
%61 = load i8, i8* %60
%62 = sext i8 %61 to i32
%63 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %62)
%64 = getelementptr inbounds i8, i8* %1, i64 26
%65 = load i8, i8* %64
%66 = sext i8 %65 to i32
%67 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %66)
%68 = getelementptr inbounds i8, i8* %1, i64 25
%69 = load i8, i8* %68
%70 = sext i8 %69 to i32
%71 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %70)
%72 = getelementptr inbounds i8, i8* %1, i64 24
%73 = load i8, i8* %72
%74 = sext i8 %73 to i32
%75 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %74)
%76 = icmp slt i32 %2, 3
br label %77
77: ; preds = %25, %146
%78 = phi i64 [ 1, %25 ], [ %147, %146 ]
%79 = add nsw i64 %78, -1
%80 = getelementptr inbounds i8, i8* %1, i64 %79
%81 = load i8, i8* %80
%82 = sext i8 %81 to i32
%83 = trunc i64 %78 to i32
%84 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @.str.3, i64 0, i64 0), i32 %83, i32 %82)
br i1 %76, label %85, label %93
85: ; preds = %77
%86 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 43)
%87 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 43)
%88 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 43)
%89 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 43)
%90 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 43)
%91 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 43)
%92 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 43)
br label %133
93: ; preds = %77
%94 = getelementptr inbounds [10 x i32], [10 x i32]* %0, i64 1, i64 %78
%95 = load i32, i32* %94
%96 = icmp eq i32 %95, 0
%97 = select i1 %96, i32 43, i32 79
%98 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %97)
%99 = getelementptr inbounds [10 x i32], [10 x i32]* %0, i64 2, i64 %78
%100 = load i32, i32* %99
%101 = icmp eq i32 %100, 0
%102 = select i1 %101, i32 43, i32 79
%103 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %102)
%104 = getelementptr inbounds [10 x i32], [10 x i32]* %0, i64 3, i64 %78
%105 = load i32, i32* %104
%106 = icmp eq i32 %105, 0
%107 = select i1 %106, i32 43, i32 79
%108 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %107)
%109 = getelementptr inbounds [10 x i32], [10 x i32]* %0, i64 4, i64 %78
%110 = load i32, i32* %109
%111 = icmp eq i32 %110, 0
%112 = select i1 %111, i32 43, i32 79
%113 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %112)
%114 = getelementptr inbounds [10 x i32], [10 x i32]* %0, i64 5, i64 %78
%115 = load i32, i32* %114
%116 = icmp eq i32 %115, 0
%117 = select i1 %116, i32 43, i32 79
%118 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %117)
%119 = getelementptr inbounds [10 x i32], [10 x i32]* %0, i64 6, i64 %78
%120 = load i32, i32* %119
%121 = icmp eq i32 %120, 0
%122 = select i1 %121, i32 43, i32 79
%123 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %122)
%124 = getelementptr inbounds [10 x i32], [10 x i32]* %0, i64 7, i64 %78
%125 = load i32, i32* %124
%126 = icmp eq i32 %125, 0
%127 = select i1 %126, i32 43, i32 79
%128 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %127)
%129 = getelementptr inbounds [10 x i32], [10 x i32]* %0, i64 8, i64 %78
%130 = load i32, i32* %129
%131 = icmp eq i32 %130, 0
%132 = select i1 %131, i32 43, i32 79
br label %133
133: ; preds = %85, %93
%134 = phi i32 [ %132, %93 ], [ 43, %85 ]
%135 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %134)
%136 = sub nuw nsw i64 24, %78
%137 = getelementptr inbounds i8, i8* %1, i64 %136
%138 = load i8, i8* %137
%139 = sext i8 %138 to i32
br i1 %5, label %140, label %144
140: ; preds = %133
%141 = trunc i64 %78 to i32
%142 = sub i32 25, %141
%143 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([8 x i8], [8 x i8]* @.str.4, i64 0, i64 0), i32 %139, i32 %142)
br label %146
144: ; preds = %133
%145 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %139)
br label %146
146: ; preds = %140, %144
%147 = add nuw nsw i64 %78, 1
%148 = icmp eq i64 %147, 9
br i1 %148, label %149, label %77
149: ; preds = %146
%150 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
%151 = getelementptr inbounds i8, i8* %1, i64 8
%152 = load i8, i8* %151
%153 = sext i8 %152 to i32
%154 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %153)
%155 = getelementptr inbounds i8, i8* %1, i64 9
%156 = load i8, i8* %155
%157 = sext i8 %156 to i32
%158 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %157)
%159 = getelementptr inbounds i8, i8* %1, i64 10
%160 = load i8, i8* %159
%161 = sext i8 %160 to i32
%162 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %161)
%163 = getelementptr inbounds i8, i8* %1, i64 11
%164 = load i8, i8* %163
%165 = sext i8 %164 to i32
%166 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %165)
%167 = getelementptr inbounds i8, i8* %1, i64 12
%168 = load i8, i8* %167
%169 = sext i8 %168 to i32
%170 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %169)
%171 = getelementptr inbounds i8, i8* %1, i64 13
%172 = load i8, i8* %171
%173 = sext i8 %172 to i32
%174 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %173)
%175 = getelementptr inbounds i8, i8* %1, i64 14
%176 = load i8, i8* %175
%177 = sext i8 %176 to i32
%178 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %177)
%179 = getelementptr inbounds i8, i8* %1, i64 15
%180 = load i8, i8* %179
%181 = sext i8 %180 to i32
%182 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %181)
br i1 %5, label %183, label %202
183: ; preds = %149
%184 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
%185 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 32)
%186 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 49)
%187 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 49)
%188 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 49)
%189 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 49)
%190 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 49)
%191 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 49)
%192 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 49)
%193 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
%194 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 57)
%195 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 48)
%196 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 49)
%197 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 50)
%198 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 51)
%199 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 52)
%200 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 53)
%201 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 54)
br label %202
202: ; preds = %183, %149
%203 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([2 x i8], [2 x i8]* @str, i64 0, i64 0))
ret void
}