#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 *, int, int, char);
void draw_line_XY(int x1, int y1, int x2, int y2) {
  int dX, dY, count, error, x, y, temp, end_y;
  int move_W, move_NW, move_N, move_NE, move_E;
  dX = x2 - x1;
  dY = y2 - y1;
  if (dY < 0) {
    dX = -dX;
    dY = -dY;
    temp = x1;
    x1 = x2;
    x2 = temp;
    temp = y1;
    y1 = y2;
    y2 = temp;
  }
  x = x1;
  y = y1;
  end_y = y2;
  printf("\033[%d;%dH%c", y, x, '+');
  if (dX >= 0) {
    if (dY <= dX) {
      move_E = 2 * dY;
      move_NE = 2 * (dY - dX);
      error = 2 * dY - dX;
      for (count = 1; count <= dX; count++) {
        if (error > 0) {
          x++;
          y++;
          error += move_NE;
          if (count != dX)
            printf("\033[%d;%dH%c", y, x, '\\');
          else
            printf("\033[%d;%dH%c", y, x, '+');
        } else {
          x++;
          error += move_E;
          if (count != dX)
            if (end_y != y)
              printf("\033[%d;%dH%c", y, x, '_');
            else
              printf("\033[%d;%dH%c", y, x, '-');
          else
            printf("\033[%d;%dH%c", y, x, '+');
        }
      }
    } else {
      move_NE = 2 * (dY - dX);
      move_N = -2 * dX;
      error = dY - 2 * dX;
      for (count = 1; count <= dY; count++) {
        if (error < 0) {
          x++;
          y++;
          error += move_NE;
          if (count != dY)
            printf("\033[%d;%dH%c", y, x, '\\');
          else
            printf("\033[%d;%dH%c", y, x, '+');
        } else {
          y++;
          error += move_N;
          if (count != dY)
            printf("\033[%d;%dH%c", y, x, '|');
          else
            printf("\033[%d;%dH%c", y, x, '+');
        }
      }
    }
  } else {
    if (dY >= -dX) {
      move_N = -2 * dX;
      move_NW = -2 * (dX + dY);
      error = -2 * dX - dY;
      for (count = 1; count <= dY; count++) {
        if (error <= 0) {
          y++;
          error += move_N;
          if (count != dY)
            printf("\033[%d;%dH%c", y, x, '|');
          else
            printf("\033[%d;%dH%c", y, x, '+');
        } else {
          x--;
          y++;
          error += move_NW;
          if (count != dY)
            printf("\033[%d;%dH%c", y, x, '/');
          else
            printf("\033[%d;%dH%c", y, x, '+');
        }
      }
    } else {
      move_NW = -2 * (dX + dY);
      move_W = -2 * dY;
      error = -dX - 2 * dY;
      for (count = 1; count <= -dX; count++) {
        if (error <= 0) {
          x--;
          y++;
          error += move_NW;
          if (count != -dX)
            printf("\033[%d;%dH%c", y, x, '/');
          else
            printf("\033[%d;%dH%c", y, x, '+');
        } else {
          x--;
          error += move_W;
          if (count != -dX)
            if (end_y != y)
              printf("\033[%d;%dH%c", y, x, '_');
            else
              printf("\033[%d;%dH%c", y, x, '-');
          else
            printf("\033[%d;%dH%c", y, x, '+');
        }
      }
    }
  }
}


x86 assembly (clang, -O0):
<draw_line_XY>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %edx,-0xc(%rbp)
mov    %ecx,-0x10(%rbp)
mov    -0xc(%rbp),%eax
sub    -0x4(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%eax
sub    -0x8(%rbp),%eax
mov    %eax,-0x18(%rbp)
cmpl   $0x0,-0x18(%rbp)
jge    1174 <draw_line_XY+0x64>
xor    %eax,%eax
sub    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
xor    %eax,%eax
sub    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0xc(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x2c(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x10(%rbp),%eax
mov    %eax,-0x8(%rbp)
mov    -0x2c(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x8(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x10(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x28(%rbp),%esi
mov    -0x24(%rbp),%edx
lea    0xe6d(%rip),%rdi
mov    $0x2b,%ecx
call   1030 <printf@plt>
cmpl   $0x0,-0x14(%rbp)
jl     13f9 <draw_line_XY+0x2e9>
mov    -0x18(%rbp),%eax
cmp    -0x14(%rbp),%eax
jg     12e6 <draw_line_XY+0x1d6>
mov    -0x18(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    -0x18(%rbp),%eax
sub    -0x14(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x40(%rbp)
mov    -0x18(%rbp),%eax
shl    $0x1,%eax
sub    -0x14(%rbp),%eax
mov    %eax,-0x20(%rbp)
movl   $0x1,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x14(%rbp),%eax
jg     12e1 <draw_line_XY+0x1d1>
cmpl   $0x0,-0x20(%rbp)
jle    1250 <draw_line_XY+0x140>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
mov    -0x40(%rbp),%eax
add    -0x20(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x14(%rbp),%eax
je     1234 <draw_line_XY+0x124>
mov    -0x28(%rbp),%esi
mov    -0x24(%rbp),%edx
lea    0xddb(%rip),%rdi
mov    $0x5c,%ecx
call   1030 <printf@plt>
jmp    124b <draw_line_XY+0x13b>
mov    -0x28(%rbp),%esi
mov    -0x24(%rbp),%edx
lea    0xdbf(%rip),%rdi
mov    $0x2b,%ecx
call   1030 <printf@plt>
jmp    12ce <draw_line_XY+0x1be>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
mov    -0x44(%rbp),%eax
add    -0x20(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x14(%rbp),%eax
je     12b2 <draw_line_XY+0x1a2>
mov    -0x30(%rbp),%eax
cmp    -0x28(%rbp),%eax
je     1296 <draw_line_XY+0x186>
mov    -0x28(%rbp),%esi
mov    -0x24(%rbp),%edx
lea    0xd79(%rip),%rdi
mov    $0x5f,%ecx
call   1030 <printf@plt>
jmp    12ad <draw_line_XY+0x19d>
mov    -0x28(%rbp),%esi
mov    -0x24(%rbp),%edx
lea    0xd5d(%rip),%rdi
mov    $0x2d,%ecx
call   1030 <printf@plt>
jmp    12c9 <draw_line_XY+0x1b9>
mov    -0x28(%rbp),%esi
mov    -0x24(%rbp),%edx
lea    0xd41(%rip),%rdi
mov    $0x2b,%ecx
call   1030 <printf@plt>
jmp    12ce <draw_line_XY+0x1be>
jmp    12d3 <draw_line_XY+0x1c3>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    11db <draw_line_XY+0xcb>
jmp    13f4 <draw_line_XY+0x2e4>
mov    -0x18(%rbp),%eax
sub    -0x14(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x40(%rbp)
imul   $0xfffffffe,-0x14(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x18(%rbp),%eax
mov    -0x14(%rbp),%ecx
shl    $0x1,%ecx
sub    %ecx,%eax
mov    %eax,-0x20(%rbp)
movl   $0x1,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x18(%rbp),%eax
jg     13ef <draw_line_XY+0x2df>
cmpl   $0x0,-0x20(%rbp)
jge    1386 <draw_line_XY+0x276>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
mov    -0x40(%rbp),%eax
add    -0x20(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x18(%rbp),%eax
je     136a <draw_line_XY+0x25a>
mov    -0x28(%rbp),%esi
mov    -0x24(%rbp),%edx
lea    0xca5(%rip),%rdi
mov    $0x5c,%ecx
call   1030 <printf@plt>
jmp    1381 <draw_line_XY+0x271>
mov    -0x28(%rbp),%esi
mov    -0x24(%rbp),%edx
lea    0xc89(%rip),%rdi
mov    $0x2b,%ecx
call   1030 <printf@plt>
jmp    13dc <draw_line_XY+0x2cc>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
mov    -0x3c(%rbp),%eax
add    -0x20(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x18(%rbp),%eax
je     13c0 <draw_line_XY+0x2b0>
mov    -0x28(%rbp),%esi
mov    -0x24(%rbp),%edx
lea    0xc4f(%rip),%rdi
mov    $0x7c,%ecx
call   1030 <printf@plt>
jmp    13d7 <draw_line_XY+0x2c7>
mov    -0x28(%rbp),%esi
mov    -0x24(%rbp),%edx
lea    0xc33(%rip),%rdi
mov    $0x2b,%ecx
call   1030 <printf@plt>
jmp    13dc <draw_line_XY+0x2cc>
jmp    13e1 <draw_line_XY+0x2d1>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1311 <draw_line_XY+0x201>
jmp    13f4 <draw_line_XY+0x2e4>
jmp    1665 <draw_line_XY+0x555>
mov    -0x18(%rbp),%eax
xor    %ecx,%ecx
sub    -0x14(%rbp),%ecx
cmp    %ecx,%eax
jl     1519 <draw_line_XY+0x409>
imul   $0xfffffffe,-0x14(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x14(%rbp),%eax
add    -0x18(%rbp),%eax
imul   $0xfffffffe,%eax,%eax
mov    %eax,-0x38(%rbp)
imul   $0xfffffffe,-0x14(%rbp),%eax
sub    -0x18(%rbp),%eax
mov    %eax,-0x20(%rbp)
movl   $0x1,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x18(%rbp),%eax
jg     1514 <draw_line_XY+0x404>
cmpl   $0x0,-0x20(%rbp)
jg     14a2 <draw_line_XY+0x392>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
mov    -0x3c(%rbp),%eax
add    -0x20(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x18(%rbp),%eax
je     1486 <draw_line_XY+0x376>
mov    -0x28(%rbp),%esi
mov    -0x24(%rbp),%edx
lea    0xb89(%rip),%rdi
mov    $0x7c,%ecx
call   1030 <printf@plt>
jmp    149d <draw_line_XY+0x38d>
mov    -0x28(%rbp),%esi
mov    -0x24(%rbp),%edx
lea    0xb6d(%rip),%rdi
mov    $0x2b,%ecx
call   1030 <printf@plt>
jmp    1501 <draw_line_XY+0x3f1>
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
mov    -0x38(%rbp),%eax
add    -0x20(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x18(%rbp),%eax
je     14e5 <draw_line_XY+0x3d5>
mov    -0x28(%rbp),%esi
mov    -0x24(%rbp),%edx
lea    0xb2a(%rip),%rdi
mov    $0x2f,%ecx
call   1030 <printf@plt>
jmp    14fc <draw_line_XY+0x3ec>
mov    -0x28(%rbp),%esi
mov    -0x24(%rbp),%edx
lea    0xb0e(%rip),%rdi
mov    $0x2b,%ecx
call   1030 <printf@plt>
jmp    1501 <draw_line_XY+0x3f1>
jmp    1506 <draw_line_XY+0x3f6>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1436 <draw_line_XY+0x326>
jmp    1660 <draw_line_XY+0x550>
mov    -0x14(%rbp),%eax
add    -0x18(%rbp),%eax
imul   $0xfffffffe,%eax,%eax
mov    %eax,-0x38(%rbp)
imul   $0xfffffffe,-0x18(%rbp),%eax
mov    %eax,-0x34(%rbp)
xor    %eax,%eax
sub    -0x14(%rbp),%eax
mov    -0x18(%rbp),%ecx
shl    $0x1,%ecx
sub    %ecx,%eax
mov    %eax,-0x20(%rbp)
movl   $0x1,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
xor    %ecx,%ecx
sub    -0x14(%rbp),%ecx
cmp    %ecx,%eax
jg     165b <draw_line_XY+0x54b>
cmpl   $0x0,-0x20(%rbp)
jg     15c6 <draw_line_XY+0x4b6>
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
mov    -0x38(%rbp),%eax
add    -0x20(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x1c(%rbp),%eax
xor    %ecx,%ecx
sub    -0x14(%rbp),%ecx
cmp    %ecx,%eax
je     15aa <draw_line_XY+0x49a>
mov    -0x28(%rbp),%esi
mov    -0x24(%rbp),%edx
lea    0xa65(%rip),%rdi
mov    $0x2f,%ecx
call   1030 <printf@plt>
jmp    15c1 <draw_line_XY+0x4b1>
mov    -0x28(%rbp),%esi
mov    -0x24(%rbp),%edx
lea    0xa49(%rip),%rdi
mov    $0x2b,%ecx
call   1030 <printf@plt>
jmp    1648 <draw_line_XY+0x538>
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
mov    -0x34(%rbp),%eax
add    -0x20(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x1c(%rbp),%eax
xor    %ecx,%ecx
sub    -0x14(%rbp),%ecx
cmp    %ecx,%eax
je     162c <draw_line_XY+0x51c>
mov    -0x30(%rbp),%eax
cmp    -0x28(%rbp),%eax
je     1610 <draw_line_XY+0x500>
mov    -0x28(%rbp),%esi
mov    -0x24(%rbp),%edx
lea    0x9ff(%rip),%rdi
mov    $0x5f,%ecx
call   1030 <printf@plt>
jmp    1627 <draw_line_XY+0x517>
mov    -0x28(%rbp),%esi
mov    -0x24(%rbp),%edx
lea    0x9e3(%rip),%rdi
mov    $0x2d,%ecx
call   1030 <printf@plt>
jmp    1643 <draw_line_XY+0x533>
mov    -0x28(%rbp),%esi
mov    -0x24(%rbp),%edx
lea    0x9c7(%rip),%rdi
mov    $0x2b,%ecx
call   1030 <printf@plt>
jmp    1648 <draw_line_XY+0x538>
jmp    164d <draw_line_XY+0x53d>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1549 <draw_line_XY+0x439>
jmp    1660 <draw_line_XY+0x550>
jmp    1665 <draw_line_XY+0x555>
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<draw_line_XY>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x28,%rsp
mov    %ecx,%r12d
mov    %edx,%r15d
sub    %edi,%r15d
mov    %ecx,%r14d
sub    %esi,%r14d
js     1139 <draw_line_XY+0x29>
mov    %r12d,%eax
mov    %esi,%r12d
mov    %edi,%ebx
jmp    1143 <draw_line_XY+0x33>
mov    %edx,%ebx
neg    %r15d
neg    %r14d
mov    %esi,%eax
mov    %eax,0x24(%rsp)
lea    0xeb2(%rip),%rdi
mov    %r12d,%esi
mov    %ebx,%edx
mov    $0x2b,%ecx
call   1030 <printf@plt>
test   %r15d,%r15d
js     120b <draw_line_XY+0xfb>
mov    %r14d,%eax
sub    %r15d,%eax
jbe    1322 <draw_line_XY+0x212>
add    %eax,%eax
mov    %eax,0x8(%rsp)
add    %r15d,%r15d
mov    %r14d,%ebp
sub    %r15d,%ebp
neg    %r15d
mov    $0x1,%r13d
sub    %r14d,%r13d
lea    0xe6c(%rip),%r14
jmp    11bd <draw_line_XY+0xad>
cs nopw 0x0(%rax,%rax,1)
mov    $0x2b,%ecx
call   1030 <printf@plt>
mov    %r15d,%eax
add    %eax,%ebp
add    $0x1,%r13d
cmp    $0x1,%r13d
je     1488 <draw_line_XY+0x378>
test   %ebp,%ebp
js     11e0 <draw_line_XY+0xd0>
add    $0x1,%r12d
mov    %r14,%rdi
mov    %r12d,%esi
mov    %ebx,%edx
test   %r13d,%r13d
je     11a0 <draw_line_XY+0x90>
mov    $0x7c,%ecx
jmp    11a5 <draw_line_XY+0x95>
nopl   0x0(%rax)
add    $0x1,%ebx
add    $0x1,%r12d
mov    %r14,%rdi
mov    %r12d,%esi
mov    %ebx,%edx
test   %r13d,%r13d
je     11fb <draw_line_XY+0xeb>
mov    $0x5c,%ecx
jmp    1200 <draw_line_XY+0xf0>
mov    $0x2b,%ecx
call   1030 <printf@plt>
mov    0x8(%rsp),%eax
jmp    11ad <draw_line_XY+0x9d>
mov    %r15d,%eax
neg    %eax
cmp    %eax,%r14d
jae    13e8 <draw_line_XY+0x2d8>
lea    (%r14,%r15,1),%ecx
mov    %ecx,0x20(%rsp)
mov    %r14,0x10(%rsp)
lea    (%r15,%r14,2),%r14d
neg    %r14d
cmp    $0x2,%eax
mov    $0x1,%ebp
cmovge %eax,%ebp
add    $0xffffffff,%ebx
neg    %ebp
add    $0x1,%r15d
mov    %r15,0x8(%rsp)
xor    %r13d,%r13d
lea    0xdb0(%rip),%r15
mov    %ebp,0x1c(%rsp)
jmp    1287 <draw_line_XY+0x177>
cs nopw 0x0(%rax,%rax,1)
mov    %r15,%rdi
mov    %r12d,%esi
mov    $0x2b,%ecx
call   1030 <printf@plt>
mov    0x10(%rsp),%rax
add    %eax,%eax
sub    %eax,%r14d
add    $0xffffffff,%r13d
cmp    %r13d,%ebp
je     1488 <draw_line_XY+0x378>
lea    (%rbx,%r13,1),%edx
test   %r14d,%r14d
jle    12d0 <draw_line_XY+0x1c0>
cmp    %r13d,0x8(%rsp)
je     1260 <draw_line_XY+0x150>
mov    %r15,%rbp
mov    0x24(%rsp),%r15d
cmp    %r12d,%r15d
jne    1301 <draw_line_XY+0x1f1>
mov    %rbp,%rdi
mov    %r15d,%esi
mov    $0x2d,%ecx
call   1030 <printf@plt>
mov    0x10(%rsp),%rax
mov    %r15d,%r12d
mov    %rbp,%r15
mov    0x1c(%rsp),%ebp
jmp    1275 <draw_line_XY+0x165>
cs nopw 0x0(%rax,%rax,1)
nop
add    $0x1,%r12d
cmp    %r13d,0x8(%rsp)
jne    12e8 <draw_line_XY+0x1d8>
mov    %r15,%rdi
mov    %r12d,%esi
mov    $0x2b,%ecx
jmp    12f3 <draw_line_XY+0x1e3>
mov    %r15,%rdi
mov    %r12d,%esi
mov    $0x2f,%ecx
call   1030 <printf@plt>
mov    0x20(%rsp),%eax
jmp    1275 <draw_line_XY+0x165>
mov    %rbp,%r15
mov    %rbp,%rdi
mov    %r12d,%esi
mov    $0x5f,%ecx
call   1030 <printf@plt>
mov    0x10(%rsp),%rax
mov    0x1c(%rsp),%ebp
jmp    1275 <draw_line_XY+0x165>
mov    %eax,0x8(%rsp)
test   %r15d,%r15d
je     1488 <draw_line_XY+0x378>
mov    %r15,%rbp
add    %r14d,%r14d
mov    0x8(%rsp),%eax
add    %eax,%eax
mov    %eax,0x8(%rsp)
mov    %r14,0x10(%rsp)
sub    %ebp,%r14d
add    $0x1,%ebx
lea    0xcaf(%rip),%r15
mov    0x24(%rsp),%r13d
jmp    137d <draw_line_XY+0x26d>
nopl   0x0(%rax,%rax,1)
mov    $0x5c,%ecx
call   1030 <printf@plt>
mov    0x8(%rsp),%eax
add    %eax,%r14d
add    $0x1,%ebx
add    $0xffffffff,%ebp
je     1488 <draw_line_XY+0x378>
test   %r14d,%r14d
jle    13a0 <draw_line_XY+0x290>
add    $0x1,%r12d
mov    %r15,%rdi
mov    %r12d,%esi
mov    %ebx,%edx
cmp    $0x1,%ebp
jne    1360 <draw_line_XY+0x250>
mov    $0x2b,%ecx
jmp    1365 <draw_line_XY+0x255>
nopw   0x0(%rax,%rax,1)
mov    %r15,%rdi
cmp    $0x1,%ebp
jne    13b4 <draw_line_XY+0x2a4>
mov    %r12d,%esi
mov    %ebx,%edx
mov    $0x2b,%ecx
jmp    13dc <draw_line_XY+0x2cc>
cmp    %r12d,%r13d
jne    13d2 <draw_line_XY+0x2c2>
mov    %r13d,%esi
mov    %ebx,%edx
mov    $0x2d,%ecx
call   1030 <printf@plt>
mov    0x10(%rsp),%rax
mov    %r13d,%r12d
jmp    136e <draw_line_XY+0x25e>
mov    %r12d,%esi
mov    %ebx,%edx
mov    $0x5f,%ecx
call   1030 <printf@plt>
mov    0x10(%rsp),%rax
jmp    136e <draw_line_XY+0x25e>
test   %r14d,%r14d
je     1488 <draw_line_XY+0x378>
mov    %r14,%rax
lea    (%r15,%r15,1),%ebp
neg    %ebp
add    %eax,%r15d
add    %r15d,%r15d
neg    %r15d
mov    %ebp,0x8(%rsp)
sub    %eax,%ebp
mov    $0x1,%r13d
sub    %eax,%r13d
lea    0xbe7(%rip),%r14
jmp    1439 <draw_line_XY+0x329>
nopl   0x0(%rax,%rax,1)
mov    $0x2b,%ecx
call   1030 <printf@plt>
mov    %r15d,%eax
add    %eax,%ebp
add    $0x1,%r13d
cmp    $0x1,%r13d
je     1488 <draw_line_XY+0x378>
test   %ebp,%ebp
jle    1460 <draw_line_XY+0x350>
add    $0xffffffff,%ebx
add    $0x1,%r12d
mov    %r14,%rdi
mov    %r12d,%esi
mov    %ebx,%edx
test   %r13d,%r13d
je     1420 <draw_line_XY+0x310>
mov    $0x2f,%ecx
jmp    1425 <draw_line_XY+0x315>
nopl   0x0(%rax,%rax,1)
add    $0x1,%r12d
mov    %r14,%rdi
mov    %r12d,%esi
mov    %ebx,%edx
test   %r13d,%r13d
je     1478 <draw_line_XY+0x368>
mov    $0x7c,%ecx
jmp    147d <draw_line_XY+0x36d>
mov    $0x2b,%ecx
call   1030 <printf@plt>
mov    0x8(%rsp),%eax
jmp    142d <draw_line_XY+0x31d>
add    $0x28,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [11 x i8] c"\1B[%d;%dH%c\00"
define void @draw_line_XY(i32 %0, i32 %1, i32 %2, i32 %3) {
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32
%17 = alloca i32
%18 = alloca i32
%19 = alloca i32
%20 = alloca i32
%21 = alloca i32
store i32 %0, i32* %5
store i32 %1, i32* %6
store i32 %2, i32* %7
store i32 %3, i32* %8
%22 = load i32, i32* %7
%23 = load i32, i32* %5
%24 = sub nsw i32 %22, %23
store i32 %24, i32* %9
%25 = load i32, i32* %8
%26 = load i32, i32* %6
%27 = sub nsw i32 %25, %26
store i32 %27, i32* %10
%28 = load i32, i32* %10
%29 = icmp slt i32 %28, 0
br i1 %29, label %30, label %41
30: ; preds = %4
%31 = load i32, i32* %9
%32 = sub nsw i32 0, %31
store i32 %32, i32* %9
%33 = load i32, i32* %10
%34 = sub nsw i32 0, %33
store i32 %34, i32* %10
%35 = load i32, i32* %5
store i32 %35, i32* %15
%36 = load i32, i32* %7
store i32 %36, i32* %5
%37 = load i32, i32* %15
store i32 %37, i32* %7
%38 = load i32, i32* %6
store i32 %38, i32* %15
%39 = load i32, i32* %8
store i32 %39, i32* %6
%40 = load i32, i32* %15
store i32 %40, i32* %8
br label %41
41: ; preds = %30, %4
%42 = load i32, i32* %5
store i32 %42, i32* %13
%43 = load i32, i32* %6
store i32 %43, i32* %14
%44 = load i32, i32* %8
store i32 %44, i32* %16
%45 = load i32, i32* %14
%46 = load i32, i32* %13
%47 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %45, i32 %46, i8 signext 43)
%48 = load i32, i32* %9
%49 = icmp sge i32 %48, 0
br i1 %49, label %50, label %186
50: ; preds = %41
%51 = load i32, i32* %10
%52 = load i32, i32* %9
%53 = icmp sle i32 %51, %52
br i1 %53, label %54, label %124
54: ; preds = %50
%55 = load i32, i32* %10
%56 = mul nsw i32 2, %55
store i32 %56, i32* %21
%57 = load i32, i32* %10
%58 = load i32, i32* %9
%59 = sub nsw i32 %57, %58
%60 = mul nsw i32 2, %59
store i32 %60, i32* %20
%61 = load i32, i32* %10
%62 = mul nsw i32 2, %61
%63 = load i32, i32* %9
%64 = sub nsw i32 %62, %63
store i32 %64, i32* %12
store i32 1, i32* %11
br label %65
65: ; preds = %120, %54
%66 = load i32, i32* %11
%67 = load i32, i32* %9
%68 = icmp sle i32 %66, %67
br i1 %68, label %69, label %123
69: ; preds = %65
%70 = load i32, i32* %12
%71 = icmp sgt i32 %70, 0
br i1 %71, label %72, label %92
72: ; preds = %69
%73 = load i32, i32* %13
%74 = add nsw i32 %73, 1
store i32 %74, i32* %13
%75 = load i32, i32* %14
%76 = add nsw i32 %75, 1
store i32 %76, i32* %14
%77 = load i32, i32* %20
%78 = load i32, i32* %12
%79 = add nsw i32 %78, %77
store i32 %79, i32* %12
%80 = load i32, i32* %11
%81 = load i32, i32* %9
%82 = icmp ne i32 %80, %81
br i1 %82, label %83, label %87
83: ; preds = %72
%84 = load i32, i32* %14
%85 = load i32, i32* %13
%86 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %84, i32 %85, i8 signext 92)
br label %91
87: ; preds = %72
%88 = load i32, i32* %14
%89 = load i32, i32* %13
%90 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %88, i32 %89, i8 signext 43)
br label %91
91: ; preds = %87, %83
br label %119
92: ; preds = %69
%93 = load i32, i32* %13
%94 = add nsw i32 %93, 1
store i32 %94, i32* %13
%95 = load i32, i32* %21
%96 = load i32, i32* %12
%97 = add nsw i32 %96, %95
store i32 %97, i32* %12
%98 = load i32, i32* %11
%99 = load i32, i32* %9
%100 = icmp ne i32 %98, %99
br i1 %100, label %101, label %114
101: ; preds = %92
%102 = load i32, i32* %16
%103 = load i32, i32* %14
%104 = icmp ne i32 %102, %103
br i1 %104, label %105, label %109
105: ; preds = %101
%106 = load i32, i32* %14
%107 = load i32, i32* %13
%108 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %106, i32 %107, i8 signext 95)
br label %113
109: ; preds = %101
%110 = load i32, i32* %14
%111 = load i32, i32* %13
%112 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %110, i32 %111, i8 signext 45)
br label %113
113: ; preds = %109, %105
br label %118
114: ; preds = %92
%115 = load i32, i32* %14
%116 = load i32, i32* %13
%117 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %115, i32 %116, i8 signext 43)
br label %118
118: ; preds = %114, %113
br label %119
119: ; preds = %118, %91
br label %120
120: ; preds = %119
%121 = load i32, i32* %11
%122 = add nsw i32 %121, 1
store i32 %122, i32* %11
br label %65
123: ; preds = %65
br label %185
124: ; preds = %50
%125 = load i32, i32* %10
%126 = load i32, i32* %9
%127 = sub nsw i32 %125, %126
%128 = mul nsw i32 2, %127
store i32 %128, i32* %20
%129 = load i32, i32* %9
%130 = mul nsw i32 -2, %129
store i32 %130, i32* %19
%131 = load i32, i32* %10
%132 = load i32, i32* %9
%133 = mul nsw i32 2, %132
%134 = sub nsw i32 %131, %133
store i32 %134, i32* %12
store i32 1, i32* %11
br label %135
135: ; preds = %181, %124
%136 = load i32, i32* %11
%137 = load i32, i32* %10
%138 = icmp sle i32 %136, %137
br i1 %138, label %139, label %184
139: ; preds = %135
%140 = load i32, i32* %12
%141 = icmp slt i32 %140, 0
br i1 %141, label %142, label %162
142: ; preds = %139
%143 = load i32, i32* %13
%144 = add nsw i32 %143, 1
store i32 %144, i32* %13
%145 = load i32, i32* %14
%146 = add nsw i32 %145, 1
store i32 %146, i32* %14
%147 = load i32, i32* %20
%148 = load i32, i32* %12
%149 = add nsw i32 %148, %147
store i32 %149, i32* %12
%150 = load i32, i32* %11
%151 = load i32, i32* %10
%152 = icmp ne i32 %150, %151
br i1 %152, label %153, label %157
153: ; preds = %142
%154 = load i32, i32* %14
%155 = load i32, i32* %13
%156 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %154, i32 %155, i8 signext 92)
br label %161
157: ; preds = %142
%158 = load i32, i32* %14
%159 = load i32, i32* %13
%160 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %158, i32 %159, i8 signext 43)
br label %161
161: ; preds = %157, %153
br label %180
162: ; preds = %139
%163 = load i32, i32* %14
%164 = add nsw i32 %163, 1
store i32 %164, i32* %14
%165 = load i32, i32* %19
%166 = load i32, i32* %12
%167 = add nsw i32 %166, %165
store i32 %167, i32* %12
%168 = load i32, i32* %11
%169 = load i32, i32* %10
%170 = icmp ne i32 %168, %169
br i1 %170, label %171, label %175
171: ; preds = %162
%172 = load i32, i32* %14
%173 = load i32, i32* %13
%174 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %172, i32 %173, i8 signext 124)
br label %179
175: ; preds = %162
%176 = load i32, i32* %14
%177 = load i32, i32* %13
%178 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %176, i32 %177, i8 signext 43)
br label %179
179: ; preds = %175, %171
br label %180
180: ; preds = %179, %161
br label %181
181: ; preds = %180
%182 = load i32, i32* %11
%183 = add nsw i32 %182, 1
store i32 %183, i32* %11
br label %135
184: ; preds = %135
br label %185
185: ; preds = %184, %123
br label %327
186: ; preds = %41
%187 = load i32, i32* %10
%188 = load i32, i32* %9
%189 = sub nsw i32 0, %188
%190 = icmp sge i32 %187, %189
br i1 %190, label %191, label %252
191: ; preds = %186
%192 = load i32, i32* %9
%193 = mul nsw i32 -2, %192
store i32 %193, i32* %19
%194 = load i32, i32* %9
%195 = load i32, i32* %10
%196 = add nsw i32 %194, %195
%197 = mul nsw i32 -2, %196
store i32 %197, i32* %18
%198 = load i32, i32* %9
%199 = mul nsw i32 -2, %198
%200 = load i32, i32* %10
%201 = sub nsw i32 %199, %200
store i32 %201, i32* %12
store i32 1, i32* %11
br label %202
202: ; preds = %248, %191
%203 = load i32, i32* %11
%204 = load i32, i32* %10
%205 = icmp sle i32 %203, %204
br i1 %205, label %206, label %251
206: ; preds = %202
%207 = load i32, i32* %12
%208 = icmp sle i32 %207, 0
br i1 %208, label %209, label %227
209: ; preds = %206
%210 = load i32, i32* %14
%211 = add nsw i32 %210, 1
store i32 %211, i32* %14
%212 = load i32, i32* %19
%213 = load i32, i32* %12
%214 = add nsw i32 %213, %212
store i32 %214, i32* %12
%215 = load i32, i32* %11
%216 = load i32, i32* %10
%217 = icmp ne i32 %215, %216
br i1 %217, label %218, label %222
218: ; preds = %209
%219 = load i32, i32* %14
%220 = load i32, i32* %13
%221 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %219, i32 %220, i8 signext 124)
br label %226
222: ; preds = %209
%223 = load i32, i32* %14
%224 = load i32, i32* %13
%225 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %223, i32 %224, i8 signext 43)
br label %226
226: ; preds = %222, %218
br label %247
227: ; preds = %206
%228 = load i32, i32* %13
%229 = add nsw i32 %228, -1
store i32 %229, i32* %13
%230 = load i32, i32* %14
%231 = add nsw i32 %230, 1
store i32 %231, i32* %14
%232 = load i32, i32* %18
%233 = load i32, i32* %12
%234 = add nsw i32 %233, %232
store i32 %234, i32* %12
%235 = load i32, i32* %11
%236 = load i32, i32* %10
%237 = icmp ne i32 %235, %236
br i1 %237, label %238, label %242
238: ; preds = %227
%239 = load i32, i32* %14
%240 = load i32, i32* %13
%241 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %239, i32 %240, i8 signext 47)
br label %246
242: ; preds = %227
%243 = load i32, i32* %14
%244 = load i32, i32* %13
%245 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %243, i32 %244, i8 signext 43)
br label %246
246: ; preds = %242, %238
br label %247
247: ; preds = %246, %226
br label %248
248: ; preds = %247
%249 = load i32, i32* %11
%250 = add nsw i32 %249, 1
store i32 %250, i32* %11
br label %202
251: ; preds = %202
br label %326
252: ; preds = %186
%253 = load i32, i32* %9
%254 = load i32, i32* %10
%255 = add nsw i32 %253, %254
%256 = mul nsw i32 -2, %255
store i32 %256, i32* %18
%257 = load i32, i32* %10
%258 = mul nsw i32 -2, %257
store i32 %258, i32* %17
%259 = load i32, i32* %9
%260 = sub nsw i32 0, %259
%261 = load i32, i32* %10
%262 = mul nsw i32 2, %261
%263 = sub nsw i32 %260, %262
store i32 %263, i32* %12
store i32 1, i32* %11
br label %264
264: ; preds = %322, %252
%265 = load i32, i32* %11
%266 = load i32, i32* %9
%267 = sub nsw i32 0, %266
%268 = icmp sle i32 %265, %267
br i1 %268, label %269, label %325
269: ; preds = %264
%270 = load i32, i32* %12
%271 = icmp sle i32 %270, 0
br i1 %271, label %272, label %293
272: ; preds = %269
%273 = load i32, i32* %13
%274 = add nsw i32 %273, -1
store i32 %274, i32* %13
%275 = load i32, i32* %14
%276 = add nsw i32 %275, 1
store i32 %276, i32* %14
%277 = load i32, i32* %18
%278 = load i32, i32* %12
%279 = add nsw i32 %278, %277
store i32 %279, i32* %12
%280 = load i32, i32* %11
%281 = load i32, i32* %9
%282 = sub nsw i32 0, %281
%283 = icmp ne i32 %280, %282
br i1 %283, label %284, label %288
284: ; preds = %272
%285 = load i32, i32* %14
%286 = load i32, i32* %13
%287 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %285, i32 %286, i8 signext 47)
br label %292
288: ; preds = %272
%289 = load i32, i32* %14
%290 = load i32, i32* %13
%291 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %289, i32 %290, i8 signext 43)
br label %292
292: ; preds = %288, %284
br label %321
293: ; preds = %269
%294 = load i32, i32* %13
%295 = add nsw i32 %294, -1
store i32 %295, i32* %13
%296 = load i32, i32* %17
%297 = load i32, i32* %12
%298 = add nsw i32 %297, %296
store i32 %298, i32* %12
%299 = load i32, i32* %11
%300 = load i32, i32* %9
%301 = sub nsw i32 0, %300
%302 = icmp ne i32 %299, %301
br i1 %302, label %303, label %316
303: ; preds = %293
%304 = load i32, i32* %16
%305 = load i32, i32* %14
%306 = icmp ne i32 %304, %305
br i1 %306, label %307, label %311
307: ; preds = %303
%308 = load i32, i32* %14
%309 = load i32, i32* %13
%310 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %308, i32 %309, i8 signext 95)
br label %315
311: ; preds = %303
%312 = load i32, i32* %14
%313 = load i32, i32* %13
%314 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %312, i32 %313, i8 signext 45)
br label %315
315: ; preds = %311, %307
br label %320
316: ; preds = %293
%317 = load i32, i32* %14
%318 = load i32, i32* %13
%319 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %317, i32 %318, i8 signext 43)
br label %320
320: ; preds = %316, %315
br label %321
321: ; preds = %320, %292
br label %322
322: ; preds = %321
%323 = load i32, i32* %11
%324 = add nsw i32 %323, 1
store i32 %324, i32* %11
br label %264
325: ; preds = %264
br label %326
326: ; preds = %325, %251
br label %327
327: ; preds = %326, %185
ret void
}

LLVM IR (-O2):
@.str = [11 x i8] c"\1B[%d;%dH%c\00"
define void @draw_line_XY(i32 %0, i32 %1, i32 %2, i32 %3) {
%5 = sub nsw i32 %2, %0
%6 = sub nsw i32 %3, %1
%7 = icmp slt i32 %6, 0
br i1 %7, label %8, label %11
8: ; preds = %4
%9 = sub nsw i32 0, %5
%10 = sub nsw i32 0, %6
br label %11
11: ; preds = %8, %4
%12 = phi i32 [ %9, %8 ], [ %5, %4 ]
%13 = phi i32 [ %10, %8 ], [ %6, %4 ]
%14 = phi i32 [ %1, %8 ], [ %3, %4 ]
%15 = phi i32 [ %3, %8 ], [ %1, %4 ]
%16 = phi i32 [ %2, %8 ], [ %0, %4 ]
%17 = tail call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %15, i32 %16, i8 signext 43)
%18 = icmp sgt i32 %12, -1
br i1 %18, label %19, label %91
19: ; preds = %11
%20 = icmp ugt i32 %13, %12
br i1 %20, label %58, label %21
21: ; preds = %19
%22 = shl nuw nsw i32 %13, 1
%23 = sub nsw i32 %13, %12
%24 = shl nsw i32 %23, 1
%25 = icmp eq i32 %12, 0
br i1 %25, label %165, label %26
26: ; preds = %21
%27 = sub nsw i32 %22, %12
br label %28
28: ; preds = %26, %52
%29 = phi i32 [ %54, %52 ], [ %15, %26 ]
%30 = phi i32 [ %34, %52 ], [ %16, %26 ]
%31 = phi i32 [ %55, %52 ], [ %27, %26 ]
%32 = phi i32 [ %56, %52 ], [ 1, %26 ]
%33 = icmp sgt i32 %31, 0
%34 = add nsw i32 %30, 1
br i1 %33, label %35, label %42
35: ; preds = %28
%36 = add nsw i32 %29, 1
%37 = icmp eq i32 %32, %12
br i1 %37, label %40, label %38
38: ; preds = %35
%39 = tail call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %36, i32 %34, i8 signext 92)
br label %52
40: ; preds = %35
%41 = tail call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %36, i32 %34, i8 signext 43)
br label %52
42: ; preds = %28
%43 = icmp eq i32 %32, %12
br i1 %43, label %50, label %44
44: ; preds = %42
%45 = icmp eq i32 %14, %29
br i1 %45, label %48, label %46
46: ; preds = %44
%47 = tail call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %29, i32 %34, i8 signext 95)
br label %52
48: ; preds = %44
%49 = tail call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %14, i32 %34, i8 signext 45)
br label %52
50: ; preds = %42
%51 = tail call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %29, i32 %34, i8 signext 43)
br label %52
52: ; preds = %40, %38, %46, %48, %50
%53 = phi i32 [ %24, %38 ], [ %24, %40 ], [ %22, %46 ], [ %22, %48 ], [ %22, %50 ]
%54 = phi i32 [ %36, %38 ], [ %36, %40 ], [ %29, %46 ], [ %14, %48 ], [ %29, %50 ]
%55 = add nsw i32 %53, %31
%56 = add nuw i32 %32, 1
%57 = icmp eq i32 %32, %12
br i1 %57, label %165, label %28
58: ; preds = %19
%59 = sub nsw i32 %13, %12
%60 = shl nsw i32 %59, 1
%61 = mul i32 %12, -2
%62 = add i32 %61, %13
br label %63
63: ; preds = %58, %84
%64 = phi i32 [ %87, %84 ], [ %15, %58 ]
%65 = phi i32 [ %86, %84 ], [ %16, %58 ]
%66 = phi i32 [ %88, %84 ], [ %62, %58 ]
%67 = phi i32 [ %89, %84 ], [ 1, %58 ]
%68 = icmp slt i32 %66, 0
br i1 %68, label %69, label %77
69: ; preds = %63
%70 = add nsw i32 %65, 1
%71 = add nsw i32 %64, 1
%72 = icmp eq i32 %67, %13
br i1 %72, label %75, label %73
73: ; preds = %69
%74 = tail call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %71, i32 %70, i8 signext 92)
br label %84
75: ; preds = %69
%76 = tail call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %71, i32 %70, i8 signext 43)
br label %84
77: ; preds = %63
%78 = add nsw i32 %64, 1
%79 = icmp eq i32 %67, %13
br i1 %79, label %82, label %80
80: ; preds = %77
%81 = tail call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %78, i32 %65, i8 signext 124)
br label %84
82: ; preds = %77
%83 = tail call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %78, i32 %65, i8 signext 43)
br label %84
84: ; preds = %75, %73, %82, %80
%85 = phi i32 [ %60, %73 ], [ %60, %75 ], [ %61, %80 ], [ %61, %82 ]
%86 = phi i32 [ %70, %73 ], [ %70, %75 ], [ %65, %80 ], [ %65, %82 ]
%87 = phi i32 [ %71, %73 ], [ %71, %75 ], [ %78, %80 ], [ %78, %82 ]
%88 = add nsw i32 %85, %66
%89 = add nuw i32 %67, 1
%90 = icmp eq i32 %67, %13
br i1 %90, label %165, label %63
91: ; preds = %11
%92 = sub i32 0, %12
%93 = icmp ult i32 %13, %92
br i1 %93, label %129, label %94
94: ; preds = %91
%95 = mul nsw i32 %12, -2
%96 = add nsw i32 %13, %12
%97 = mul nsw i32 %96, -2
%98 = icmp eq i32 %13, 0
br i1 %98, label %165, label %99
99: ; preds = %94
%100 = sub nsw i32 %95, %13
br label %101
101: ; preds = %99, %122
%102 = phi i32 [ %125, %122 ], [ %15, %99 ]
%103 = phi i32 [ %124, %122 ], [ %16, %99 ]
%104 = phi i32 [ %126, %122 ], [ %100, %99 ]
%105 = phi i32 [ %127, %122 ], [ 1, %99 ]
%106 = icmp slt i32 %104, 1
br i1 %106, label %107, label %114
107: ; preds = %101
%108 = add nsw i32 %102, 1
%109 = icmp eq i32 %105, %13
br i1 %109, label %112, label %110
110: ; preds = %107
%111 = tail call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %108, i32 %103, i8 signext 124)
br label %122
112: ; preds = %107
%113 = tail call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %108, i32 %103, i8 signext 43)
br label %122
114: ; preds = %101
%115 = add nsw i32 %103, -1
%116 = add nsw i32 %102, 1
%117 = icmp eq i32 %105, %13
br i1 %117, label %120, label %118
118: ; preds = %114
%119 = tail call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %116, i32 %115, i8 signext 47)
br label %122
120: ; preds = %114
%121 = tail call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %116, i32 %115, i8 signext 43)
br label %122
122: ; preds = %112, %110, %120, %118
%123 = phi i32 [ %95, %110 ], [ %95, %112 ], [ %97, %118 ], [ %97, %120 ]
%124 = phi i32 [ %103, %110 ], [ %103, %112 ], [ %115, %118 ], [ %115, %120 ]
%125 = phi i32 [ %108, %110 ], [ %108, %112 ], [ %116, %118 ], [ %116, %120 ]
%126 = add nsw i32 %123, %104
%127 = add nuw i32 %105, 1
%128 = icmp eq i32 %105, %13
br i1 %128, label %165, label %101
129: ; preds = %91
%130 = add nsw i32 %13, %12
%131 = mul i32 %13, -2
%132 = sub i32 %131, %12
%133 = call i32 @llvm.smax.i32(i32 %92, i32 1)
br label %134
134: ; preds = %129, %158
%135 = phi i32 [ %160, %158 ], [ %15, %129 ]
%136 = phi i32 [ %140, %158 ], [ %16, %129 ]
%137 = phi i32 [ %162, %158 ], [ %132, %129 ]
%138 = phi i32 [ %163, %158 ], [ 1, %129 ]
%139 = icmp slt i32 %137, 1
%140 = add nsw i32 %136, -1
br i1 %139, label %141, label %148
141: ; preds = %134
%142 = add nsw i32 %135, 1
%143 = icmp eq i32 %138, %92
br i1 %143, label %146, label %144
144: ; preds = %141
%145 = tail call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %142, i32 %140, i8 signext 47)
br label %158
146: ; preds = %141
%147 = tail call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %142, i32 %140, i8 signext 43)
br label %158
148: ; preds = %134
%149 = icmp eq i32 %138, %92
br i1 %149, label %156, label %150
150: ; preds = %148
%151 = icmp eq i32 %14, %135
br i1 %151, label %154, label %152
152: ; preds = %150
%153 = tail call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %135, i32 %140, i8 signext 95)
br label %158
154: ; preds = %150
%155 = tail call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %14, i32 %140, i8 signext 45)
br label %158
156: ; preds = %148
%157 = tail call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0), i32 %135, i32 %140, i8 signext 43)
br label %158
158: ; preds = %146, %144, %152, %154, %156
%159 = phi i32 [ %130, %144 ], [ %130, %146 ], [ %13, %152 ], [ %13, %154 ], [ %13, %156 ]
%160 = phi i32 [ %142, %144 ], [ %142, %146 ], [ %135, %152 ], [ %14, %154 ], [ %135, %156 ]
%161 = mul nsw i32 %159, -2
%162 = add nsw i32 %161, %137
%163 = add nuw i32 %138, 1
%164 = icmp eq i32 %138, %133
br i1 %164, label %165, label %134
165: ; preds = %122, %158, %52, %84, %94, %21
ret void
}