#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 */
typedef char wchar_t;
typedef int /*<<< orphan*/ bar_heights;

/* Variables and functions */
int COLS;
int LINES;
int /*<<< orphan*/ change_colors(int const, int const);
int /*<<< orphan*/ mvaddstr(int const, int, char *);
int /*<<< orphan*/ mvaddwstr(int const, int, char const *);
int /*<<< orphan*/ mvprintw(int const, int, char *, int const);
int /*<<< orphan*/ refresh();
int draw_terminal_ncurses(int is_tty, int terminal_height, int terminal_width,
                          int bars_count, int bar_width, int bar_spacing,
                          int rest, const int f[200], int flastd[200],
                          int gradient) {
  const wchar_t *bar_heights[] = {L"\u2581", L"\u2582", L"\u2583", L"\u2584",
                                  L"\u2585", L"\u2586", L"\u2587", L"\u2588"};
  if (!is_tty) {
    if (LINES != terminal_height || COLS != terminal_width) {
      return -1;
    }
  }
  const int height = terminal_height - 1;
  for (int bar = 0; bar < bars_count; bar++) {
    if (f[bar] > flastd[bar]) {
      if (is_tty) {
        for (int n = flastd[bar] / 8; n < f[bar] / 8; n++) {
          if (gradient)
            change_colors(n, height);
          for (int width = 0; width < bar_width; width++)
            mvprintw((height - n),
                     bar * bar_width + width + bar * bar_spacing + rest, "%d",
                     8);
        }
      } else {
        for (int n = flastd[bar] / 8; n < f[bar] / 8; n++) {
          if (gradient)
            change_colors(n, height);
          for (int width = 0; width < bar_width; width++)
            mvaddwstr((height - n),
                      bar * bar_width + width + bar * bar_spacing + rest,
                      bar_heights[(
                          (sizeof(bar_heights) / sizeof(bar_heights[0])) - 1)]);
        }
      }
      if (gradient)
        change_colors(f[bar] / 8, height);
      if (f[bar] % 8) {
        if (is_tty) {
          for (int width = 0; width < bar_width; width++)
            mvprintw((height - f[bar] / 8),
                     bar * bar_width + width + bar * bar_spacing + rest, "%d",
                     (f[bar] % 8));
        } else {
          for (int width = 0; width < bar_width; width++)
            mvaddwstr((height - f[bar] / 8),
                      bar * bar_width + width + bar * bar_spacing + rest,
                      bar_heights[(f[bar] % 8) - 1]);
        }
      }
    } else if (f[bar] < flastd[bar]) {
      for (int n = f[bar] / 8; n < flastd[bar] / 8 + 1; n++)
        for (int width = 0; width < bar_width; width++)
          mvaddstr((height - n),
                   bar * bar_width + width + bar * bar_spacing + rest, " ");
      if (f[bar] % 8) {
        if (gradient)
          change_colors(f[bar] / 8, height);
        if (is_tty) {
          for (int width = 0; width < bar_width; width++)
            mvprintw((height - f[bar] / 8),
                     bar * bar_width + width + bar * bar_spacing + rest, "%d",
                     (f[bar] % 8));
        } else {
          for (int width = 0; width < bar_width; width++)
            mvaddwstr((height - f[bar] / 8),
                      bar * bar_width + width + bar * bar_spacing + rest,
                      bar_heights[(f[bar] % 8) - 1]);
        }
      }
    }
    flastd[bar] = f[bar];
  }
  refresh();
  return 0;
}


x86 assembly (clang, -O0):
<draw_terminal_ncurses>:
push   %rbp
mov    %rsp,%rbp
sub    $0xa0,%rsp
mov    0x28(%rbp),%eax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%eax
mov    %edi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    %ecx,-0x14(%rbp)
mov    %r8d,-0x18(%rbp)
mov    %r9d,-0x1c(%rbp)
lea    -0x60(%rbp),%rdi
lea    0x2c38(%rip),%rsi
mov    $0x40,%edx
call   1030 <memcpy@plt>
cmpl   $0x0,-0x8(%rbp)
jne    11e1 <draw_terminal_ncurses+0x81>
mov    0x2e35(%rip),%rax
mov    (%rax),%eax
cmp    -0xc(%rbp),%eax
jne    11d0 <draw_terminal_ncurses+0x70>
mov    0x2e1b(%rip),%rax
mov    (%rax),%eax
cmp    -0x10(%rbp),%eax
je     11dc <draw_terminal_ncurses+0x7c>
movl   $0xffffffff,-0x4(%rbp)
jmp    174b <draw_terminal_ncurses+0x5eb>
jmp    11e1 <draw_terminal_ncurses+0x81>
mov    -0xc(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x64(%rbp)
movl   $0x0,-0x68(%rbp)
mov    -0x68(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    173d <draw_terminal_ncurses+0x5dd>
mov    0x18(%rbp),%rax
movslq -0x68(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    0x20(%rbp),%rcx
movslq -0x68(%rbp),%rdx
cmp    (%rcx,%rdx,4),%eax
jle    14d8 <draw_terminal_ncurses+0x378>
cmpl   $0x0,-0x8(%rbp)
je     12e0 <draw_terminal_ncurses+0x180>
mov    0x20(%rbp),%rax
movslq -0x68(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %eax,-0x6c(%rbp)
mov    -0x6c(%rbp),%eax
mov    %eax,-0x94(%rbp)
mov    0x18(%rbp),%rax
movslq -0x68(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x94(%rbp),%eax
cmp    %ecx,%eax
jge    12db <draw_terminal_ncurses+0x17b>
cmpl   $0x0,0x28(%rbp)
je     127a <draw_terminal_ncurses+0x11a>
mov    -0x6c(%rbp),%edi
mov    -0x64(%rbp),%esi
call   1070 <change_colors@plt>
movl   $0x0,-0x70(%rbp)
mov    -0x70(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    12c8 <draw_terminal_ncurses+0x168>
mov    -0x64(%rbp),%edi
sub    -0x6c(%rbp),%edi
mov    -0x68(%rbp),%esi
imul   -0x18(%rbp),%esi
add    -0x70(%rbp),%esi
mov    -0x68(%rbp),%eax
imul   -0x1c(%rbp),%eax
add    %eax,%esi
add    0x10(%rbp),%esi
lea    0xd90(%rip),%rdx
mov    $0x8,%ecx
call   1080 <mvprintw@plt>
mov    -0x70(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x70(%rbp)
jmp    1281 <draw_terminal_ncurses+0x121>
jmp    12cd <draw_terminal_ncurses+0x16d>
mov    -0x6c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x6c(%rbp)
jmp    1239 <draw_terminal_ncurses+0xd9>
jmp    1395 <draw_terminal_ncurses+0x235>
mov    0x20(%rbp),%rax
movslq -0x68(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %eax,-0x74(%rbp)
mov    -0x74(%rbp),%eax
mov    %eax,-0x98(%rbp)
mov    0x18(%rbp),%rax
movslq -0x68(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x98(%rbp),%eax
cmp    %ecx,%eax
jge    1390 <draw_terminal_ncurses+0x230>
cmpl   $0x0,0x28(%rbp)
je     1337 <draw_terminal_ncurses+0x1d7>
mov    -0x74(%rbp),%edi
mov    -0x64(%rbp),%esi
call   1070 <change_colors@plt>
movl   $0x0,-0x78(%rbp)
mov    -0x78(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    137d <draw_terminal_ncurses+0x21d>
mov    -0x64(%rbp),%edi
sub    -0x74(%rbp),%edi
mov    -0x68(%rbp),%esi
imul   -0x18(%rbp),%esi
add    -0x78(%rbp),%esi
mov    -0x68(%rbp),%eax
imul   -0x1c(%rbp),%eax
add    %eax,%esi
add    0x10(%rbp),%esi
mov    -0x28(%rbp),%rdx
call   1040 <mvaddwstr@plt>
mov    -0x78(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x78(%rbp)
jmp    133e <draw_terminal_ncurses+0x1de>
jmp    1382 <draw_terminal_ncurses+0x222>
mov    -0x74(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x74(%rbp)
jmp    12f6 <draw_terminal_ncurses+0x196>
jmp    1395 <draw_terminal_ncurses+0x235>
cmpl   $0x0,0x28(%rbp)
je     13bc <draw_terminal_ncurses+0x25c>
mov    0x18(%rbp),%rax
movslq -0x68(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %eax,%edi
mov    -0x64(%rbp),%esi
call   1070 <change_colors@plt>
mov    0x18(%rbp),%rax
movslq -0x68(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
je     14d3 <draw_terminal_ncurses+0x373>
cmpl   $0x0,-0x8(%rbp)
je     1457 <draw_terminal_ncurses+0x2f7>
movl   $0x0,-0x7c(%rbp)
mov    -0x7c(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    1452 <draw_terminal_ncurses+0x2f2>
mov    -0x64(%rbp),%edi
mov    0x18(%rbp),%rax
movslq -0x68(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
sub    %eax,%edi
mov    -0x68(%rbp),%esi
imul   -0x18(%rbp),%esi
add    -0x7c(%rbp),%esi
mov    -0x68(%rbp),%eax
imul   -0x1c(%rbp),%eax
add    %eax,%esi
add    0x10(%rbp),%esi
mov    0x18(%rbp),%rax
movslq -0x68(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %edx,%ecx
lea    0xc01(%rip),%rdx
call   1080 <mvprintw@plt>
mov    -0x7c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x7c(%rbp)
jmp    13e9 <draw_terminal_ncurses+0x289>
jmp    14ce <draw_terminal_ncurses+0x36e>
movl   $0x0,-0x80(%rbp)
mov    -0x80(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    14c9 <draw_terminal_ncurses+0x369>
mov    -0x64(%rbp),%edi
mov    0x18(%rbp),%rax
movslq -0x68(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
sub    %eax,%edi
mov    -0x68(%rbp),%esi
imul   -0x18(%rbp),%esi
add    -0x80(%rbp),%esi
mov    -0x68(%rbp),%eax
imul   -0x1c(%rbp),%eax
add    %eax,%esi
add    0x10(%rbp),%esi
mov    0x18(%rbp),%rax
movslq -0x68(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
sub    $0x1,%edx
movslq %edx,%rax
mov    -0x60(%rbp,%rax,8),%rdx
call   1040 <mvaddwstr@plt>
mov    -0x80(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x80(%rbp)
jmp    145e <draw_terminal_ncurses+0x2fe>
jmp    14ce <draw_terminal_ncurses+0x36e>
jmp    14d3 <draw_terminal_ncurses+0x373>
jmp    1719 <draw_terminal_ncurses+0x5b9>
mov    0x18(%rbp),%rax
movslq -0x68(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    0x20(%rbp),%rcx
movslq -0x68(%rbp),%rdx
cmp    (%rcx,%rdx,4),%eax
jge    1714 <draw_terminal_ncurses+0x5b4>
mov    0x18(%rbp),%rax
movslq -0x68(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %eax,-0x84(%rbp)
mov    -0x84(%rbp),%eax
mov    %eax,-0x9c(%rbp)
mov    0x20(%rbp),%rax
movslq -0x68(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x9c(%rbp),%eax
add    $0x1,%ecx
cmp    %ecx,%eax
jge    15b3 <draw_terminal_ncurses+0x453>
movl   $0x0,-0x88(%rbp)
mov    -0x88(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    159a <draw_terminal_ncurses+0x43a>
mov    -0x64(%rbp),%edi
sub    -0x84(%rbp),%edi
mov    -0x68(%rbp),%esi
imul   -0x18(%rbp),%esi
add    -0x88(%rbp),%esi
mov    -0x68(%rbp),%eax
imul   -0x1c(%rbp),%eax
add    %eax,%esi
add    0x10(%rbp),%esi
lea    0xac2(%rip),%rdx
call   1060 <mvaddstr@plt>
mov    -0x88(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x88(%rbp)
jmp    1549 <draw_terminal_ncurses+0x3e9>
jmp    159f <draw_terminal_ncurses+0x43f>
mov    -0x84(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x84(%rbp)
jmp    150d <draw_terminal_ncurses+0x3ad>
mov    0x18(%rbp),%rax
movslq -0x68(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
je     170f <draw_terminal_ncurses+0x5af>
cmpl   $0x0,0x28(%rbp)
je     15f6 <draw_terminal_ncurses+0x496>
mov    0x18(%rbp),%rax
movslq -0x68(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %eax,%edi
mov    -0x64(%rbp),%esi
call   1070 <change_colors@plt>
cmpl   $0x0,-0x8(%rbp)
je     1684 <draw_terminal_ncurses+0x524>
movl   $0x0,-0x8c(%rbp)
mov    -0x8c(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    167f <draw_terminal_ncurses+0x51f>
mov    -0x64(%rbp),%edi
mov    0x18(%rbp),%rax
movslq -0x68(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
sub    %eax,%edi
mov    -0x68(%rbp),%esi
imul   -0x18(%rbp),%esi
add    -0x8c(%rbp),%esi
mov    -0x68(%rbp),%eax
imul   -0x1c(%rbp),%eax
add    %eax,%esi
add    0x10(%rbp),%esi
mov    0x18(%rbp),%rax
movslq -0x68(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %edx,%ecx
lea    0x9da(%rip),%rdx
call   1080 <mvprintw@plt>
mov    -0x8c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8c(%rbp)
jmp    160a <draw_terminal_ncurses+0x4aa>
jmp    170a <draw_terminal_ncurses+0x5aa>
movl   $0x0,-0x90(%rbp)
mov    -0x90(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    1705 <draw_terminal_ncurses+0x5a5>
mov    -0x64(%rbp),%edi
mov    0x18(%rbp),%rax
movslq -0x68(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
sub    %eax,%edi
mov    -0x68(%rbp),%esi
imul   -0x18(%rbp),%esi
add    -0x90(%rbp),%esi
mov    -0x68(%rbp),%eax
imul   -0x1c(%rbp),%eax
add    %eax,%esi
add    0x10(%rbp),%esi
mov    0x18(%rbp),%rax
movslq -0x68(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
sub    $0x1,%edx
movslq %edx,%rax
mov    -0x60(%rbp,%rax,8),%rdx
call   1040 <mvaddwstr@plt>
mov    -0x90(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x90(%rbp)
jmp    168e <draw_terminal_ncurses+0x52e>
jmp    170a <draw_terminal_ncurses+0x5aa>
jmp    170f <draw_terminal_ncurses+0x5af>
jmp    1714 <draw_terminal_ncurses+0x5b4>
jmp    1719 <draw_terminal_ncurses+0x5b9>
mov    0x18(%rbp),%rax
movslq -0x68(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    0x20(%rbp),%rax
movslq -0x68(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x68(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x68(%rbp)
jmp    11f1 <draw_terminal_ncurses+0x91>
mov    $0x0,%al
call   1050 <refresh@plt>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0xa0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<draw_terminal_ncurses>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x38,%rsp
mov    %r9d,0x20(%rsp)
mov    %r8d,%r15d
mov    %esi,%r12d
mov    %edi,0x1c(%rsp)
test   %edi,%edi
jne    1195 <draw_terminal_ncurses+0x45>
mov    0x2e70(%rip),%rax
mov    $0xffffffff,%ebx
cmp    %r12d,(%rax)
jne    15ef <draw_terminal_ncurses+0x49f>
mov    0x2e53(%rip),%rax
cmp    %edx,(%rax)
jne    15ef <draw_terminal_ncurses+0x49f>
test   %ecx,%ecx
jle    15e6 <draw_terminal_ncurses+0x496>
mov    0x80(%rsp),%rdx
mov    0x78(%rsp),%rdi
mov    0x70(%rsp),%r13d
add    $0xffffffff,%r12d
add    %r15d,0x20(%rsp)
mov    %ecx,%eax
mov    %rax,0x28(%rsp)
lea    -0x1(%r15),%eax
mov    %eax,0x24(%rsp)
xor    %esi,%esi
lea    0xe70(%rip),%rbp
mov    %r12d,0xc(%rsp)
jmp    1202 <draw_terminal_ncurses+0xb2>
nopw   0x0(%rax,%rax,1)
mov    (%rdi,%rsi,4),%eax
mov    0x80(%rsp),%rdx
mov    %eax,(%rdx,%rsi,4)
add    $0x1,%rsi
add    0x20(%rsp),%r13d
cmp    0x28(%rsp),%rsi
je     15e6 <draw_terminal_ncurses+0x496>
mov    (%rdi,%rsi,4),%ecx
mov    (%rdx,%rsi,4),%eax
cmp    %eax,%ecx
mov    %rsi,0x10(%rsp)
jle    12d0 <draw_terminal_ncurses+0x180>
lea    0x7(%rax),%r14d
test   %eax,%eax
cmovns %eax,%r14d
sar    $0x3,%r14d
lea    0x7(%rcx),%eax
test   %ecx,%ecx
cmovns %ecx,%eax
sar    $0x3,%eax
cmpl   $0x0,0x1c(%rsp)
je     137d <draw_terminal_ncurses+0x22d>
cmp    %eax,%r14d
jl     127a <draw_terminal_ncurses+0x12a>
jmp    1390 <draw_terminal_ncurses+0x240>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
add    $0x1,%r14d
mov    0x78(%rsp),%rdi
mov    0x10(%rsp),%rsi
mov    (%rdi,%rsi,4),%ecx
lea    0x7(%rcx),%eax
test   %ecx,%ecx
cmovns %ecx,%eax
sar    $0x3,%eax
cmp    %eax,%r14d
mov    0xc(%rsp),%r12d
jge    1390 <draw_terminal_ncurses+0x240>
cmpl   $0x0,0x88(%rsp)
je     128f <draw_terminal_ncurses+0x13f>
mov    %r14d,%edi
mov    %r12d,%esi
call   1060 <change_colors@plt>
test   %r15d,%r15d
lea    0xda7(%rip),%rbp
jle    1250 <draw_terminal_ncurses+0x100>
mov    0xc(%rsp),%r12d
sub    %r14d,%r12d
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
nop
lea    (%rbx,%r13,1),%esi
mov    %r12d,%edi
mov    %rbp,%rdx
mov    $0x8,%ecx
call   1070 <mvprintw@plt>
add    $0x1,%ebx
cmp    %ebx,%r15d
jne    12b0 <draw_terminal_ncurses+0x160>
jmp    1250 <draw_terminal_ncurses+0x100>
xchg   %ax,%ax
jge    11e0 <draw_terminal_ncurses+0x90>
lea    0x7(%rcx),%ebx
test   %ecx,%ecx
cmovns %ecx,%ebx
sar    $0x3,%ebx
lea    0x7(%rax),%edx
test   %eax,%eax
cmovns %eax,%edx
sar    $0x3,%edx
cmp    %edx,%ebx
jle    1318 <draw_terminal_ncurses+0x1c8>
test   $0x7,%cl
jne    14a4 <draw_terminal_ncurses+0x354>
jmp    11e0 <draw_terminal_ncurses+0x90>
xchg   %ax,%ax
lea    0x1(%rbx),%ecx
lea    0x7(%rax),%edx
test   %eax,%eax
cmovns %eax,%edx
sar    $0x3,%edx
cmp    %edx,%ebx
mov    %ecx,%ebx
jge    1498 <draw_terminal_ncurses+0x348>
test   %r15d,%r15d
jle    1300 <draw_terminal_ncurses+0x1b0>
mov    %rbx,0x30(%rsp)
sub    %ebx,%r12d
mov    %r13d,%ebx
mov    %r15d,%ebp
lea    0xd11(%rip),%r14
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    %r12d,%edi
mov    %ebx,%esi
mov    %r14,%rdx
call   1050 <mvaddstr@plt>
add    $0x1,%ebx
add    $0xffffffff,%ebp
jne    1340 <draw_terminal_ncurses+0x1f0>
mov    0x80(%rsp),%rax
mov    0x10(%rsp),%rsi
mov    (%rax,%rsi,4),%eax
mov    0xc(%rsp),%r12d
mov    0x78(%rsp),%rdi
lea    0xcca(%rip),%rbp
mov    0x30(%rsp),%rbx
jmp    1300 <draw_terminal_ncurses+0x1b0>
cmp    %eax,%r14d
jl     144a <draw_terminal_ncurses+0x2fa>
cs nopw 0x0(%rax,%rax,1)
cmpl   $0x0,0x88(%rsp)
je     13ba <draw_terminal_ncurses+0x26a>
lea    0x7(%rcx),%edi
test   %ecx,%ecx
cmovns %ecx,%edi
sar    $0x3,%edi
mov    %r12d,%esi
call   1060 <change_colors@plt>
mov    0x78(%rsp),%rdi
mov    0x10(%rsp),%rsi
mov    (%rdi,%rsi,4),%ecx
lea    0xc7f(%rip),%rbp
test   $0x7,%cl
je     11e0 <draw_terminal_ncurses+0x90>
cmpl   $0x0,0x1c(%rsp)
je     152b <draw_terminal_ncurses+0x3db>
test   %r15d,%r15d
jle    11e0 <draw_terminal_ncurses+0x90>
xor    %ebx,%ebx
lea    0x7(%rcx),%eax
test   %ecx,%ecx
cmovns %ecx,%eax
mov    %eax,%edx
sar    $0x3,%edx
mov    %r12d,%edi
sub    %edx,%edi
lea    (%rbx,%r13,1),%esi
and    $0xfffffff8,%eax
sub    %eax,%ecx
mov    %rbp,%rdx
call   1070 <mvprintw@plt>
cmp    %ebx,0x24(%rsp)
mov    0x10(%rsp),%rsi
mov    0x78(%rsp),%rdi
je     11e0 <draw_terminal_ncurses+0x90>
mov    (%rdi,%rsi,4),%ecx
add    $0x1,%ebx
jmp    13e0 <draw_terminal_ncurses+0x290>
nop
add    $0x1,%r14d
mov    0x10(%rsp),%rsi
mov    0x78(%rsp),%rdi
mov    (%rdi,%rsi,4),%ecx
lea    0x7(%rcx),%eax
test   %ecx,%ecx
cmovns %ecx,%eax
sar    $0x3,%eax
cmp    %eax,%r14d
mov    0xc(%rsp),%r12d
jge    1390 <draw_terminal_ncurses+0x240>
cmpl   $0x0,0x88(%rsp)
je     145f <draw_terminal_ncurses+0x30f>
mov    %r14d,%edi
mov    %r12d,%esi
call   1060 <change_colors@plt>
test   %r15d,%r15d
lea    0xbcf(%rip),%r12
jle    1420 <draw_terminal_ncurses+0x2d0>
mov    0xc(%rsp),%ebp
sub    %r14d,%ebp
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
lea    (%rbx,%r13,1),%esi
mov    %ebp,%edi
mov    %r12,%rdx
call   1030 <mvaddwstr@plt>
add    $0x1,%ebx
cmp    %ebx,%r15d
jne    1480 <draw_terminal_ncurses+0x330>
jmp    1420 <draw_terminal_ncurses+0x2d0>
mov    (%rdi,%rsi,4),%ecx
test   $0x7,%cl
je     11e0 <draw_terminal_ncurses+0x90>
cmpl   $0x0,0x88(%rsp)
mov    %rdi,%r14
je     14cc <draw_terminal_ncurses+0x37c>
lea    0x7(%rcx),%edi
test   %ecx,%ecx
cmovns %ecx,%edi
sar    $0x3,%edi
mov    %r12d,%esi
call   1060 <change_colors@plt>
mov    %r14,%rdi
mov    0x10(%rsp),%rsi
cmpl   $0x0,0x1c(%rsp)
je     158b <draw_terminal_ncurses+0x43b>
test   %r15d,%r15d
jle    11e0 <draw_terminal_ncurses+0x90>
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    (%rdi,%rsi,4),%ecx
lea    0x7(%rcx),%eax
test   %ecx,%ecx
cmovns %ecx,%eax
mov    %eax,%edx
sar    $0x3,%edx
mov    %r12d,%edi
sub    %edx,%edi
lea    (%rbx,%r13,1),%esi
and    $0xfffffff8,%eax
sub    %eax,%ecx
mov    %rbp,%rdx
call   1070 <mvprintw@plt>
mov    %r14,%rdi
mov    0x10(%rsp),%rsi
add    $0x1,%ebx
cmp    %ebx,%r15d
jne    14f0 <draw_terminal_ncurses+0x3a0>
jmp    11e0 <draw_terminal_ncurses+0x90>
test   %r15d,%r15d
jle    11e0 <draw_terminal_ncurses+0x90>
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
lea    0x7(%rcx),%eax
test   %ecx,%ecx
cmovns %ecx,%eax
mov    %eax,%edx
sar    $0x3,%edx
mov    %r12d,%edi
sub    %edx,%edi
lea    (%rbx,%r13,1),%esi
and    $0xfffffff8,%eax
sub    %eax,%ecx
movslq %ecx,%rax
lea    0x286b(%rip),%rcx
mov    -0x8(%rcx,%rax,8),%rdx
call   1030 <mvaddwstr@plt>
cmp    %ebx,0x24(%rsp)
mov    0x10(%rsp),%rsi
mov    0x78(%rsp),%rdi
je     11e0 <draw_terminal_ncurses+0x90>
mov    (%rdi,%rsi,4),%ecx
add    $0x1,%ebx
jmp    1540 <draw_terminal_ncurses+0x3f0>
test   %r15d,%r15d
jle    11e0 <draw_terminal_ncurses+0x90>
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
mov    (%rdi,%rsi,4),%eax
lea    0x7(%rax),%ecx
test   %eax,%eax
cmovns %eax,%ecx
mov    %ecx,%edx
sar    $0x3,%edx
mov    %r12d,%edi
sub    %edx,%edi
lea    (%rbx,%r13,1),%esi
and    $0xfffffff8,%ecx
sub    %ecx,%eax
cltq
lea    0x2809(%rip),%rcx
mov    -0x8(%rcx,%rax,8),%rdx
call   1030 <mvaddwstr@plt>
mov    %r14,%rdi
mov    0x10(%rsp),%rsi
add    $0x1,%ebx
cmp    %ebx,%r15d
jne    15a0 <draw_terminal_ncurses+0x450>
jmp    11e0 <draw_terminal_ncurses+0x90>
xor    %ebx,%ebx
xor    %eax,%eax
call   1040 <refresh@plt>
mov    %ebx,%eax
add    $0x38,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [2 x i32] [i32 9601, i32 0]
@.str.1 = [2 x i32] [i32 9602, i32 0]
@.str.2 = [2 x i32] [i32 9603, i32 0]
@.str.3 = [2 x i32] [i32 9604, i32 0]
@.str.4 = [2 x i32] [i32 9605, i32 0]
@.str.5 = [2 x i32] [i32 9606, i32 0]
@.str.6 = [2 x i32] [i32 9607, i32 0]
@.str.7 = [2 x i32] [i32 9608, i32 0]
@__const.draw_terminal_ncurses.bar_heights = [8 x i8*] [i8* bitcast ([2 x i32]* @.str to i8*), i8* bitcast ([2 x i32]* @.str.1 to i8*), i8* bitcast ([2 x i32]* @.str.2 to i8*), i8* bitcast ([2 x i32]* @.str.3 to i8*), i8* bitcast ([2 x i32]* @.str.4 to i8*), i8* bitcast ([2 x i32]* @.str.5 to i8*), i8* bitcast ([2 x i32]* @.str.6 to i8*), i8* bitcast ([2 x i32]* @.str.7 to i8*)]
@LINES = global i32 0
@COLS = global i32 0
@.str.8 = [3 x i8] c"%d\00"
@.str.9 = [2 x i8] c" \00"
define i32 @draw_terminal_ncurses(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5, i32 %6, i32* %7, i32* %8, i32 %9) {
%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
%22 = alloca [8 x i8*]
%23 = alloca i32
%24 = alloca i32
%25 = alloca i32
%26 = alloca i32
%27 = alloca i32
%28 = alloca i32
%29 = alloca i32
%30 = alloca i32
%31 = alloca i32
%32 = alloca i32
%33 = alloca i32
%34 = alloca i32
store i32 %0, i32* %12
store i32 %1, i32* %13
store i32 %2, i32* %14
store i32 %3, i32* %15
store i32 %4, i32* %16
store i32 %5, i32* %17
store i32 %6, i32* %18
store i32* %7, i32** %19
store i32* %8, i32** %20
store i32 %9, i32* %21
%35 = bitcast [8 x i8*]* %22 to i8*
%36 = load i32, i32* %12
%37 = icmp ne i32 %36, 0
br i1 %37, label %48, label %38
38: ; preds = %10
%39 = load i32, i32* @LINES
%40 = load i32, i32* %13
%41 = icmp ne i32 %39, %40
br i1 %41, label %46, label %42
42: ; preds = %38
%43 = load i32, i32* @COLS
%44 = load i32, i32* %14
%45 = icmp ne i32 %43, %44
br i1 %45, label %46, label %47
46: ; preds = %42, %38
store i32 -1, i32* %11
br label %451
47: ; preds = %42
br label %48
48: ; preds = %47, %10
%49 = load i32, i32* %13
%50 = sub nsw i32 %49, 1
store i32 %50, i32* %23
store i32 0, i32* %24
br label %51
51: ; preds = %446, %48
%52 = load i32, i32* %24
%53 = load i32, i32* %15
%54 = icmp slt i32 %52, %53
br i1 %54, label %55, label %449
55: ; preds = %51
%56 = load i32*, i32** %19
%57 = load i32, i32* %24
%58 = sext i32 %57 to i64
%59 = getelementptr inbounds i32, i32* %56, i64 %58
%60 = load i32, i32* %59
%61 = load i32*, i32** %20
%62 = load i32, i32* %24
%63 = sext i32 %62 to i64
%64 = getelementptr inbounds i32, i32* %61, i64 %63
%65 = load i32, i32* %64
%66 = icmp sgt i32 %60, %65
br i1 %66, label %67, label %277
67: ; preds = %55
%68 = load i32, i32* %12
%69 = icmp ne i32 %68, 0
br i1 %69, label %70, label %122
70: ; preds = %67
%71 = load i32*, i32** %20
%72 = load i32, i32* %24
%73 = sext i32 %72 to i64
%74 = getelementptr inbounds i32, i32* %71, i64 %73
%75 = load i32, i32* %74
%76 = sdiv i32 %75, 8
store i32 %76, i32* %25
br label %77
77: ; preds = %118, %70
%78 = load i32, i32* %25
%79 = load i32*, i32** %19
%80 = load i32, i32* %24
%81 = sext i32 %80 to i64
%82 = getelementptr inbounds i32, i32* %79, i64 %81
%83 = load i32, i32* %82
%84 = sdiv i32 %83, 8
%85 = icmp slt i32 %78, %84
br i1 %85, label %86, label %121
86: ; preds = %77
%87 = load i32, i32* %21
%88 = icmp ne i32 %87, 0
br i1 %88, label %89, label %93
89: ; preds = %86
%90 = load i32, i32* %25
%91 = load i32, i32* %23
%92 = call i32 @change_colors(i32 %90, i32 %91)
br label %93
93: ; preds = %89, %86
store i32 0, i32* %26
br label %94
94: ; preds = %114, %93
%95 = load i32, i32* %26
%96 = load i32, i32* %16
%97 = icmp slt i32 %95, %96
br i1 %97, label %98, label %117
98: ; preds = %94
%99 = load i32, i32* %23
%100 = load i32, i32* %25
%101 = sub nsw i32 %99, %100
%102 = load i32, i32* %24
%103 = load i32, i32* %16
%104 = mul nsw i32 %102, %103
%105 = load i32, i32* %26
%106 = add nsw i32 %104, %105
%107 = load i32, i32* %24
%108 = load i32, i32* %17
%109 = mul nsw i32 %107, %108
%110 = add nsw i32 %106, %109
%111 = load i32, i32* %18
%112 = add nsw i32 %110, %111
%113 = call i32 @mvprintw(i32 %101, i32 %112, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.8, i64 0, i64 0), i32 8)
br label %114
114: ; preds = %98
%115 = load i32, i32* %26
%116 = add nsw i32 %115, 1
store i32 %116, i32* %26
br label %94
117: ; preds = %94
br label %118
118: ; preds = %117
%119 = load i32, i32* %25
%120 = add nsw i32 %119, 1
store i32 %120, i32* %25
br label %77
121: ; preds = %77
br label %176
122: ; preds = %67
%123 = load i32*, i32** %20
%124 = load i32, i32* %24
%125 = sext i32 %124 to i64
%126 = getelementptr inbounds i32, i32* %123, i64 %125
%127 = load i32, i32* %126
%128 = sdiv i32 %127, 8
store i32 %128, i32* %27
br label %129
129: ; preds = %172, %122
%130 = load i32, i32* %27
%131 = load i32*, i32** %19
%132 = load i32, i32* %24
%133 = sext i32 %132 to i64
%134 = getelementptr inbounds i32, i32* %131, i64 %133
%135 = load i32, i32* %134
%136 = sdiv i32 %135, 8
%137 = icmp slt i32 %130, %136
br i1 %137, label %138, label %175
138: ; preds = %129
%139 = load i32, i32* %21
%140 = icmp ne i32 %139, 0
br i1 %140, label %141, label %145
141: ; preds = %138
%142 = load i32, i32* %27
%143 = load i32, i32* %23
%144 = call i32 @change_colors(i32 %142, i32 %143)
br label %145
145: ; preds = %141, %138
store i32 0, i32* %28
br label %146
146: ; preds = %168, %145
%147 = load i32, i32* %28
%148 = load i32, i32* %16
%149 = icmp slt i32 %147, %148
br i1 %149, label %150, label %171
150: ; preds = %146
%151 = load i32, i32* %23
%152 = load i32, i32* %27
%153 = sub nsw i32 %151, %152
%154 = load i32, i32* %24
%155 = load i32, i32* %16
%156 = mul nsw i32 %154, %155
%157 = load i32, i32* %28
%158 = add nsw i32 %156, %157
%159 = load i32, i32* %24
%160 = load i32, i32* %17
%161 = mul nsw i32 %159, %160
%162 = add nsw i32 %158, %161
%163 = load i32, i32* %18
%164 = add nsw i32 %162, %163
%165 = getelementptr inbounds [8 x i8*], [8 x i8*]* %22, i64 0, i64 7
%166 = load i8*, i8** %165
%167 = call i32 @mvaddwstr(i32 %153, i32 %164, i8* %166)
br label %168
168: ; preds = %150
%169 = load i32, i32* %28
%170 = add nsw i32 %169, 1
store i32 %170, i32* %28
br label %146
171: ; preds = %146
br label %172
172: ; preds = %171
%173 = load i32, i32* %27
%174 = add nsw i32 %173, 1
store i32 %174, i32* %27
br label %129
175: ; preds = %129
br label %176
176: ; preds = %175, %121
%177 = load i32, i32* %21
%178 = icmp ne i32 %177, 0
br i1 %178, label %179, label %188
179: ; preds = %176
%180 = load i32*, i32** %19
%181 = load i32, i32* %24
%182 = sext i32 %181 to i64
%183 = getelementptr inbounds i32, i32* %180, i64 %182
%184 = load i32, i32* %183
%185 = sdiv i32 %184, 8
%186 = load i32, i32* %23
%187 = call i32 @change_colors(i32 %185, i32 %186)
br label %188
188: ; preds = %179, %176
%189 = load i32*, i32** %19
%190 = load i32, i32* %24
%191 = sext i32 %190 to i64
%192 = getelementptr inbounds i32, i32* %189, i64 %191
%193 = load i32, i32* %192
%194 = srem i32 %193, 8
%195 = icmp ne i32 %194, 0
br i1 %195, label %196, label %276
196: ; preds = %188
%197 = load i32, i32* %12
%198 = icmp ne i32 %197, 0
br i1 %198, label %199, label %235
199: ; preds = %196
store i32 0, i32* %29
br label %200
200: ; preds = %231, %199
%201 = load i32, i32* %29
%202 = load i32, i32* %16
%203 = icmp slt i32 %201, %202
br i1 %203, label %204, label %234
204: ; preds = %200
%205 = load i32, i32* %23
%206 = load i32*, i32** %19
%207 = load i32, i32* %24
%208 = sext i32 %207 to i64
%209 = getelementptr inbounds i32, i32* %206, i64 %208
%210 = load i32, i32* %209
%211 = sdiv i32 %210, 8
%212 = sub nsw i32 %205, %211
%213 = load i32, i32* %24
%214 = load i32, i32* %16
%215 = mul nsw i32 %213, %214
%216 = load i32, i32* %29
%217 = add nsw i32 %215, %216
%218 = load i32, i32* %24
%219 = load i32, i32* %17
%220 = mul nsw i32 %218, %219
%221 = add nsw i32 %217, %220
%222 = load i32, i32* %18
%223 = add nsw i32 %221, %222
%224 = load i32*, i32** %19
%225 = load i32, i32* %24
%226 = sext i32 %225 to i64
%227 = getelementptr inbounds i32, i32* %224, i64 %226
%228 = load i32, i32* %227
%229 = srem i32 %228, 8
%230 = call i32 @mvprintw(i32 %212, i32 %223, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.8, i64 0, i64 0), i32 %229)
br label %231
231: ; preds = %204
%232 = load i32, i32* %29
%233 = add nsw i32 %232, 1
store i32 %233, i32* %29
br label %200
234: ; preds = %200
br label %275
235: ; preds = %196
store i32 0, i32* %30
br label %236
236: ; preds = %271, %235
%237 = load i32, i32* %30
%238 = load i32, i32* %16
%239 = icmp slt i32 %237, %238
br i1 %239, label %240, label %274
240: ; preds = %236
%241 = load i32, i32* %23
%242 = load i32*, i32** %19
%243 = load i32, i32* %24
%244 = sext i32 %243 to i64
%245 = getelementptr inbounds i32, i32* %242, i64 %244
%246 = load i32, i32* %245
%247 = sdiv i32 %246, 8
%248 = sub nsw i32 %241, %247
%249 = load i32, i32* %24
%250 = load i32, i32* %16
%251 = mul nsw i32 %249, %250
%252 = load i32, i32* %30
%253 = add nsw i32 %251, %252
%254 = load i32, i32* %24
%255 = load i32, i32* %17
%256 = mul nsw i32 %254, %255
%257 = add nsw i32 %253, %256
%258 = load i32, i32* %18
%259 = add nsw i32 %257, %258
%260 = load i32*, i32** %19
%261 = load i32, i32* %24
%262 = sext i32 %261 to i64
%263 = getelementptr inbounds i32, i32* %260, i64 %262
%264 = load i32, i32* %263
%265 = srem i32 %264, 8
%266 = sub nsw i32 %265, 1
%267 = sext i32 %266 to i64
%268 = getelementptr inbounds [8 x i8*], [8 x i8*]* %22, i64 0, i64 %267
%269 = load i8*, i8** %268
%270 = call i32 @mvaddwstr(i32 %248, i32 %259, i8* %269)
br label %271
271: ; preds = %240
%272 = load i32, i32* %30
%273 = add nsw i32 %272, 1
store i32 %273, i32* %30
br label %236
274: ; preds = %236
br label %275
275: ; preds = %274, %234
br label %276
276: ; preds = %275, %188
br label %436
277: ; preds = %55
%278 = load i32*, i32** %19
%279 = load i32, i32* %24
%280 = sext i32 %279 to i64
%281 = getelementptr inbounds i32, i32* %278, i64 %280
%282 = load i32, i32* %281
%283 = load i32*, i32** %20
%284 = load i32, i32* %24
%285 = sext i32 %284 to i64
%286 = getelementptr inbounds i32, i32* %283, i64 %285
%287 = load i32, i32* %286
%288 = icmp slt i32 %282, %287
br i1 %288, label %289, label %435
289: ; preds = %277
%290 = load i32*, i32** %19
%291 = load i32, i32* %24
%292 = sext i32 %291 to i64
%293 = getelementptr inbounds i32, i32* %290, i64 %292
%294 = load i32, i32* %293
%295 = sdiv i32 %294, 8
store i32 %295, i32* %31
br label %296
296: ; preds = %331, %289
%297 = load i32, i32* %31
%298 = load i32*, i32** %20
%299 = load i32, i32* %24
%300 = sext i32 %299 to i64
%301 = getelementptr inbounds i32, i32* %298, i64 %300
%302 = load i32, i32* %301
%303 = sdiv i32 %302, 8
%304 = add nsw i32 %303, 1
%305 = icmp slt i32 %297, %304
br i1 %305, label %306, label %334
306: ; preds = %296
store i32 0, i32* %32
br label %307
307: ; preds = %327, %306
%308 = load i32, i32* %32
%309 = load i32, i32* %16
%310 = icmp slt i32 %308, %309
br i1 %310, label %311, label %330
311: ; preds = %307
%312 = load i32, i32* %23
%313 = load i32, i32* %31
%314 = sub nsw i32 %312, %313
%315 = load i32, i32* %24
%316 = load i32, i32* %16
%317 = mul nsw i32 %315, %316
%318 = load i32, i32* %32
%319 = add nsw i32 %317, %318
%320 = load i32, i32* %24
%321 = load i32, i32* %17
%322 = mul nsw i32 %320, %321
%323 = add nsw i32 %319, %322
%324 = load i32, i32* %18
%325 = add nsw i32 %323, %324
%326 = call i32 @mvaddstr(i32 %314, i32 %325, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.9, i64 0, i64 0))
br label %327
327: ; preds = %311
%328 = load i32, i32* %32
%329 = add nsw i32 %328, 1
store i32 %329, i32* %32
br label %307
330: ; preds = %307
br label %331
331: ; preds = %330
%332 = load i32, i32* %31
%333 = add nsw i32 %332, 1
store i32 %333, i32* %31
br label %296
334: ; preds = %296
%335 = load i32*, i32** %19
%336 = load i32, i32* %24
%337 = sext i32 %336 to i64
%338 = getelementptr inbounds i32, i32* %335, i64 %337
%339 = load i32, i32* %338
%340 = srem i32 %339, 8
%341 = icmp ne i32 %340, 0
br i1 %341, label %342, label %434
342: ; preds = %334
%343 = load i32, i32* %21
%344 = icmp ne i32 %343, 0
br i1 %344, label %345, label %354
345: ; preds = %342
%346 = load i32*, i32** %19
%347 = load i32, i32* %24
%348 = sext i32 %347 to i64
%349 = getelementptr inbounds i32, i32* %346, i64 %348
%350 = load i32, i32* %349
%351 = sdiv i32 %350, 8
%352 = load i32, i32* %23
%353 = call i32 @change_colors(i32 %351, i32 %352)
br label %354
354: ; preds = %345, %342
%355 = load i32, i32* %12
%356 = icmp ne i32 %355, 0
br i1 %356, label %357, label %393
357: ; preds = %354
store i32 0, i32* %33
br label %358
358: ; preds = %389, %357
%359 = load i32, i32* %33
%360 = load i32, i32* %16
%361 = icmp slt i32 %359, %360
br i1 %361, label %362, label %392
362: ; preds = %358
%363 = load i32, i32* %23
%364 = load i32*, i32** %19
%365 = load i32, i32* %24
%366 = sext i32 %365 to i64
%367 = getelementptr inbounds i32, i32* %364, i64 %366
%368 = load i32, i32* %367
%369 = sdiv i32 %368, 8
%370 = sub nsw i32 %363, %369
%371 = load i32, i32* %24
%372 = load i32, i32* %16
%373 = mul nsw i32 %371, %372
%374 = load i32, i32* %33
%375 = add nsw i32 %373, %374
%376 = load i32, i32* %24
%377 = load i32, i32* %17
%378 = mul nsw i32 %376, %377
%379 = add nsw i32 %375, %378
%380 = load i32, i32* %18
%381 = add nsw i32 %379, %380
%382 = load i32*, i32** %19
%383 = load i32, i32* %24
%384 = sext i32 %383 to i64
%385 = getelementptr inbounds i32, i32* %382, i64 %384
%386 = load i32, i32* %385
%387 = srem i32 %386, 8
%388 = call i32 @mvprintw(i32 %370, i32 %381, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.8, i64 0, i64 0), i32 %387)
br label %389
389: ; preds = %362
%390 = load i32, i32* %33
%391 = add nsw i32 %390, 1
store i32 %391, i32* %33
br label %358
392: ; preds = %358
br label %433
393: ; preds = %354
store i32 0, i32* %34
br label %394
394: ; preds = %429, %393
%395 = load i32, i32* %34
%396 = load i32, i32* %16
%397 = icmp slt i32 %395, %396
br i1 %397, label %398, label %432
398: ; preds = %394
%399 = load i32, i32* %23
%400 = load i32*, i32** %19
%401 = load i32, i32* %24
%402 = sext i32 %401 to i64
%403 = getelementptr inbounds i32, i32* %400, i64 %402
%404 = load i32, i32* %403
%405 = sdiv i32 %404, 8
%406 = sub nsw i32 %399, %405
%407 = load i32, i32* %24
%408 = load i32, i32* %16
%409 = mul nsw i32 %407, %408
%410 = load i32, i32* %34
%411 = add nsw i32 %409, %410
%412 = load i32, i32* %24
%413 = load i32, i32* %17
%414 = mul nsw i32 %412, %413
%415 = add nsw i32 %411, %414
%416 = load i32, i32* %18
%417 = add nsw i32 %415, %416
%418 = load i32*, i32** %19
%419 = load i32, i32* %24
%420 = sext i32 %419 to i64
%421 = getelementptr inbounds i32, i32* %418, i64 %420
%422 = load i32, i32* %421
%423 = srem i32 %422, 8
%424 = sub nsw i32 %423, 1
%425 = sext i32 %424 to i64
%426 = getelementptr inbounds [8 x i8*], [8 x i8*]* %22, i64 0, i64 %425
%427 = load i8*, i8** %426
%428 = call i32 @mvaddwstr(i32 %406, i32 %417, i8* %427)
br label %429
429: ; preds = %398
%430 = load i32, i32* %34
%431 = add nsw i32 %430, 1
store i32 %431, i32* %34
br label %394
432: ; preds = %394
br label %433
433: ; preds = %432, %392
br label %434
434: ; preds = %433, %334
br label %435
435: ; preds = %434, %277
br label %436
436: ; preds = %435, %276
%437 = load i32*, i32** %19
%438 = load i32, i32* %24
%439 = sext i32 %438 to i64
%440 = getelementptr inbounds i32, i32* %437, i64 %439
%441 = load i32, i32* %440
%442 = load i32*, i32** %20
%443 = load i32, i32* %24
%444 = sext i32 %443 to i64
%445 = getelementptr inbounds i32, i32* %442, i64 %444
store i32 %441, i32* %445
br label %446
446: ; preds = %436
%447 = load i32, i32* %24
%448 = add nsw i32 %447, 1
store i32 %448, i32* %24
br label %51
449: ; preds = %51
%450 = call i32 (...) @refresh()
store i32 0, i32* %11
br label %451
451: ; preds = %449, %46
%452 = load i32, i32* %11
ret i32 %452
}

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