#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*/ glp_assert_(char *, char *, int);
void _glp_bigdiv(int n, int m, unsigned short x[], unsigned short y[]) {
  int i, j;
  unsigned int t;
  unsigned short d, q, r;
  ((void)((n >= 0) ||
          (glp_assert_(
               "n >= 0",
               "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/"
               "outputs/2022-01-22/02-19-57/repos/MarhesLab/NeeleyThesisCode/"
               "refs/heads/master/lib/glpk-4.52/src/misc/bignum.c",
               135),
           1)));
  ((void)((m >= 1) ||
          (glp_assert_(
               "m >= 1",
               "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/"
               "outputs/2022-01-22/02-19-57/repos/MarhesLab/NeeleyThesisCode/"
               "refs/heads/master/lib/glpk-4.52/src/misc/bignum.c",
               136),
           1)));
  ((void)((y[m - 1] != 0) ||
          (glp_assert_(
               "y[m-1] != 0",
               "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/"
               "outputs/2022-01-22/02-19-57/repos/MarhesLab/NeeleyThesisCode/"
               "refs/heads/master/lib/glpk-4.52/src/misc/bignum.c",
               137),
           1)));
  if (m == 1) {
    d = 0;
    for (i = n; i >= 0; i--) {
      t = ((unsigned int)d << 16) + (unsigned int)x[i];
      x[i + 1] = (unsigned short)(t / y[0]);
      d = (unsigned short)(t % y[0]);
    }
    x[0] = d;
    goto done;
  }
  d = (unsigned short)(0x10000 / ((unsigned int)y[m - 1] + 1));
  if (d == 1)
    x[n + m] = 0;
  else {
    t = 0;
    for (i = 0; i < n + m; i++) {
      t += (unsigned int)x[i] * (unsigned int)d;
      x[i] = (unsigned short)t;
      t >>= 16;
    }
    x[n + m] = (unsigned short)t;
    t = 0;
    for (j = 0; j < m; j++) {
      t += (unsigned int)y[j] * (unsigned int)d;
      y[j] = (unsigned short)t;
      t >>= 16;
    }
  }
  for (i = n; i >= 0; i--) {
    if (x[i + m] < y[m - 1]) {
      t = ((unsigned int)x[i + m] << 16) + (unsigned int)x[i + m - 1];
      q = (unsigned short)(t / (unsigned int)y[m - 1]);
      r = (unsigned short)(t % (unsigned int)y[m - 1]);
      if (q == 0)
        goto putq;
      else
        goto test;
    }
    q = 0;
    r = x[i + m - 1];
  decr:
    q--;
    t = (unsigned int)r + (unsigned int)y[m - 1];
    r = (unsigned short)t;
    if (t > 0xFFFF)
      goto msub;
  test:
    t = (unsigned int)y[m - 2] * (unsigned int)q;
    if ((unsigned short)(t >> 16) > r)
      goto decr;
    if ((unsigned short)(t >> 16) < r)
      goto msub;
    if ((unsigned short)t > x[i + m - 2])
      goto decr;
  msub:
    if (q == 0)
      goto putq;
    t = 0;
    for (j = 0; j < m; j++) {
      t += (unsigned int)y[j] * (unsigned int)q;
      if (x[i + j] < (unsigned short)t)
        t += 0x10000;
      x[i + j] -= (unsigned short)t;
      t >>= 16;
    }
    if (x[i + m] >= (unsigned short)t)
      goto putq;
    q--;
    t = 0;
    for (j = 0; j < m; j++) {
      t += (unsigned int)x[i + j] + (unsigned int)y[j];
      x[i + j] = (unsigned short)t;
      t >>= 16;
    }
  putq:
    x[i + m] = q;
  }
  if (d > 1) {
    t = 0;
    for (i = m - 1; i >= 0; i--) {
      t = (t << 16) + (unsigned int)x[i];
      x[i] = (unsigned short)(t / (unsigned int)d);
      t %= (unsigned int)d;
    }
    t = 0;
    for (j = m - 1; j >= 0; j--) {
      t = (t << 16) + (unsigned int)y[j];
      y[j] = (unsigned short)(t / (unsigned int)d);
      t %= (unsigned int)d;
    }
  }
done:
  return;
}


x86 assembly (clang, -O0):
<_glp_bigdiv>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %rdx,-0x10(%rbp)
mov    %rcx,-0x18(%rbp)
mov    $0x1,%al
cmpl   $0x0,-0x4(%rbp)
mov    %al,-0x2b(%rbp)
jge    1152 <_glp_bigdiv+0x42>
lea    0xec4(%rip),%rdi
lea    0xec4(%rip),%rsi
mov    $0x87,%edx
call   1030 <glp_assert_@plt>
mov    $0x1,%al
mov    %al,-0x2b(%rbp)
mov    -0x2b(%rbp),%al
mov    $0x1,%al
cmpl   $0x1,-0x8(%rbp)
mov    %al,-0x2c(%rbp)
jge    1181 <_glp_bigdiv+0x71>
lea    0xf43(%rip),%rdi
lea    0xe95(%rip),%rsi
mov    $0x88,%edx
call   1030 <glp_assert_@plt>
mov    $0x1,%al
mov    %al,-0x2c(%rbp)
mov    -0x2c(%rbp),%al
mov    -0x18(%rbp),%rax
mov    -0x8(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movzwl (%rax,%rcx,2),%ecx
mov    $0x1,%al
cmp    $0x0,%ecx
mov    %al,-0x2d(%rbp)
jne    11c0 <_glp_bigdiv+0xb0>
lea    0xf0b(%rip),%rdi
lea    0xe56(%rip),%rsi
mov    $0x89,%edx
call   1030 <glp_assert_@plt>
mov    $0x1,%al
mov    %al,-0x2d(%rbp)
mov    -0x2d(%rbp),%al
cmpl   $0x1,-0x8(%rbp)
jne    1250 <_glp_bigdiv+0x140>
movw   $0x0,-0x26(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0x1c(%rbp)
cmpl   $0x0,-0x1c(%rbp)
jl     1240 <_glp_bigdiv+0x130>
movzwl -0x26(%rbp),%eax
shl    $0x10,%eax
mov    -0x10(%rbp),%rcx
movslq -0x1c(%rbp),%rdx
movzwl (%rcx,%rdx,2),%ecx
add    %ecx,%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    -0x18(%rbp),%rcx
movzwl (%rcx),%ecx
xor    %edx,%edx
div    %ecx
mov    %ax,%dx
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    %dx,(%rax,%rcx,2)
mov    -0x24(%rbp),%eax
mov    -0x18(%rbp),%rcx
movzwl (%rcx),%ecx
xor    %edx,%edx
div    %ecx
mov    %dx,%ax
mov    %ax,-0x26(%rbp)
mov    -0x1c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x1c(%rbp)
jmp    11d9 <_glp_bigdiv+0xc9>
mov    -0x26(%rbp),%cx
mov    -0x10(%rbp),%rax
mov    %cx,(%rax)
jmp    1752 <_glp_bigdiv+0x642>
mov    -0x18(%rbp),%rax
mov    -0x8(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movzwl (%rax,%rcx,2),%ecx
add    $0x1,%ecx
mov    $0x10000,%eax
xor    %edx,%edx
div    %ecx
mov    %ax,-0x26(%rbp)
movzwl -0x26(%rbp),%eax
cmp    $0x1,%eax
jne    1296 <_glp_bigdiv+0x186>
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
add    -0x8(%rbp),%ecx
movslq %ecx,%rcx
movw   $0x0,(%rax,%rcx,2)
jmp    136f <_glp_bigdiv+0x25f>
movl   $0x0,-0x24(%rbp)
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
mov    -0x4(%rbp),%ecx
add    -0x8(%rbp),%ecx
cmp    %ecx,%eax
jge    12f7 <_glp_bigdiv+0x1e7>
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movzwl (%rax,%rcx,2),%eax
movzwl -0x26(%rbp),%ecx
imul   %ecx,%eax
add    -0x24(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    %ax,%dx
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    %dx,(%rax,%rcx,2)
mov    -0x24(%rbp),%eax
shr    $0x10,%eax
mov    %eax,-0x24(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    12a4 <_glp_bigdiv+0x194>
mov    -0x24(%rbp),%eax
mov    %ax,%dx
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
add    -0x8(%rbp),%ecx
movslq %ecx,%rcx
mov    %dx,(%rax,%rcx,2)
movl   $0x0,-0x24(%rbp)
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    136a <_glp_bigdiv+0x25a>
mov    -0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
movzwl (%rax,%rcx,2),%eax
movzwl -0x26(%rbp),%ecx
imul   %ecx,%eax
add    -0x24(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    %ax,%dx
mov    -0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
mov    %dx,(%rax,%rcx,2)
mov    -0x24(%rbp),%eax
shr    $0x10,%eax
mov    %eax,-0x24(%rbp)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    131c <_glp_bigdiv+0x20c>
jmp    136f <_glp_bigdiv+0x25f>
mov    -0x4(%rbp),%eax
mov    %eax,-0x1c(%rbp)
cmpl   $0x0,-0x1c(%rbp)
jl     166d <_glp_bigdiv+0x55d>
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    -0x8(%rbp),%ecx
movslq %ecx,%rcx
movzwl (%rax,%rcx,2),%eax
mov    -0x18(%rbp),%rcx
mov    -0x8(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
movzwl (%rcx,%rdx,2),%ecx
cmp    %ecx,%eax
jge    1428 <_glp_bigdiv+0x318>
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    -0x8(%rbp),%ecx
movslq %ecx,%rcx
movzwl (%rax,%rcx,2),%eax
shl    $0x10,%eax
mov    -0x10(%rbp),%rcx
mov    -0x1c(%rbp),%edx
add    -0x8(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
movzwl (%rcx,%rdx,2),%ecx
add    %ecx,%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    -0x18(%rbp),%rcx
mov    -0x8(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
movzwl (%rcx,%rdx,2),%ecx
xor    %edx,%edx
div    %ecx
mov    %ax,-0x28(%rbp)
mov    -0x24(%rbp),%eax
mov    -0x18(%rbp),%rcx
mov    -0x8(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
movzwl (%rcx,%rdx,2),%ecx
xor    %edx,%edx
div    %ecx
mov    %dx,%ax
mov    %ax,-0x2a(%rbp)
movzwl -0x28(%rbp),%eax
cmp    $0x0,%eax
jne    1423 <_glp_bigdiv+0x313>
jmp    164a <_glp_bigdiv+0x53a>
jmp    148a <_glp_bigdiv+0x37a>
movw   $0x0,-0x28(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    -0x8(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,2),%ax
mov    %ax,-0x2a(%rbp)
mov    -0x28(%rbp),%ax
add    $0xffff,%ax
mov    %ax,-0x28(%rbp)
movzwl -0x2a(%rbp),%eax
mov    -0x18(%rbp),%rcx
mov    -0x8(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
movzwl (%rcx,%rdx,2),%ecx
add    %ecx,%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    %ax,-0x2a(%rbp)
cmpl   $0xffff,-0x24(%rbp)
jbe    1485 <_glp_bigdiv+0x375>
jmp    1505 <_glp_bigdiv+0x3f5>
jmp    148a <_glp_bigdiv+0x37a>
mov    -0x18(%rbp),%rax
mov    -0x8(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movzwl (%rax,%rcx,2),%eax
movzwl -0x28(%rbp),%ecx
imul   %ecx,%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
shr    $0x10,%eax
movzwl %ax,%eax
movzwl -0x2a(%rbp),%ecx
cmp    %ecx,%eax
jle    14bf <_glp_bigdiv+0x3af>
jmp    1446 <_glp_bigdiv+0x336>
mov    -0x24(%rbp),%eax
shr    $0x10,%eax
movzwl %ax,%eax
movzwl -0x2a(%rbp),%ecx
cmp    %ecx,%eax
jge    14d9 <_glp_bigdiv+0x3c9>
jmp    1505 <_glp_bigdiv+0x3f5>
mov    -0x24(%rbp),%eax
movzwl %ax,%eax
mov    -0x10(%rbp),%rcx
mov    -0x1c(%rbp),%edx
add    -0x8(%rbp),%edx
sub    $0x2,%edx
movslq %edx,%rdx
movzwl (%rcx,%rdx,2),%ecx
cmp    %ecx,%eax
jle    1500 <_glp_bigdiv+0x3f0>
jmp    1446 <_glp_bigdiv+0x336>
jmp    1505 <_glp_bigdiv+0x3f5>
movzwl -0x28(%rbp),%eax
cmp    $0x0,%eax
jne    1517 <_glp_bigdiv+0x407>
jmp    164a <_glp_bigdiv+0x53a>
movl   $0x0,-0x24(%rbp)
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    15a8 <_glp_bigdiv+0x498>
mov    -0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
movzwl (%rax,%rcx,2),%eax
movzwl -0x28(%rbp),%ecx
imul   %ecx,%eax
add    -0x24(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    -0x20(%rbp),%ecx
movslq %ecx,%rcx
movzwl (%rax,%rcx,2),%eax
mov    -0x24(%rbp),%ecx
movzwl %cx,%ecx
cmp    %ecx,%eax
jge    1574 <_glp_bigdiv+0x464>
mov    -0x24(%rbp),%eax
add    $0x10000,%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
movzwl %ax,%esi
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    -0x20(%rbp),%ecx
movslq %ecx,%rcx
movzwl (%rax,%rcx,2),%edx
sub    %esi,%edx
mov    %dx,(%rax,%rcx,2)
mov    -0x24(%rbp),%eax
shr    $0x10,%eax
mov    %eax,-0x24(%rbp)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    1525 <_glp_bigdiv+0x415>
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    -0x8(%rbp),%ecx
movslq %ecx,%rcx
movzwl (%rax,%rcx,2),%eax
mov    -0x24(%rbp),%ecx
movzwl %cx,%ecx
cmp    %ecx,%eax
jl     15cc <_glp_bigdiv+0x4bc>
jmp    164a <_glp_bigdiv+0x53a>
mov    -0x28(%rbp),%ax
add    $0xffff,%ax
mov    %ax,-0x28(%rbp)
movl   $0x0,-0x24(%rbp)
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    1645 <_glp_bigdiv+0x535>
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    -0x20(%rbp),%ecx
movslq %ecx,%rcx
movzwl (%rax,%rcx,2),%eax
mov    -0x18(%rbp),%rcx
movslq -0x20(%rbp),%rdx
movzwl (%rcx,%rdx,2),%ecx
add    %ecx,%eax
add    -0x24(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    %ax,%dx
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    -0x20(%rbp),%ecx
movslq %ecx,%rcx
mov    %dx,(%rax,%rcx,2)
mov    -0x24(%rbp),%eax
shr    $0x10,%eax
mov    %eax,-0x24(%rbp)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    15e6 <_glp_bigdiv+0x4d6>
jmp    164a <_glp_bigdiv+0x53a>
mov    -0x28(%rbp),%dx
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    -0x8(%rbp),%ecx
movslq %ecx,%rcx
mov    %dx,(%rax,%rcx,2)
mov    -0x1c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x1c(%rbp)
jmp    1375 <_glp_bigdiv+0x265>
movzwl -0x26(%rbp),%eax
cmp    $0x1,%eax
jle    174d <_glp_bigdiv+0x63d>
movl   $0x0,-0x24(%rbp)
mov    -0x8(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x1c(%rbp)
cmpl   $0x0,-0x1c(%rbp)
jl     16e1 <_glp_bigdiv+0x5d1>
mov    -0x24(%rbp),%eax
shl    $0x10,%eax
mov    -0x10(%rbp),%rcx
movslq -0x1c(%rbp),%rdx
movzwl (%rcx,%rdx,2),%ecx
add    %ecx,%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
movzwl -0x26(%rbp),%ecx
xor    %edx,%edx
div    %ecx
mov    %ax,%dx
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    %dx,(%rax,%rcx,2)
movzwl -0x26(%rbp),%ecx
mov    -0x24(%rbp),%eax
xor    %edx,%edx
div    %ecx
mov    %edx,-0x24(%rbp)
mov    -0x1c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x1c(%rbp)
jmp    168a <_glp_bigdiv+0x57a>
movl   $0x0,-0x24(%rbp)
mov    -0x8(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x20(%rbp)
cmpl   $0x0,-0x20(%rbp)
jl     1748 <_glp_bigdiv+0x638>
mov    -0x24(%rbp),%eax
shl    $0x10,%eax
mov    -0x18(%rbp),%rcx
movslq -0x20(%rbp),%rdx
movzwl (%rcx,%rdx,2),%ecx
add    %ecx,%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
movzwl -0x26(%rbp),%ecx
xor    %edx,%edx
div    %ecx
mov    %ax,%dx
mov    -0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
mov    %dx,(%rax,%rcx,2)
movzwl -0x26(%rbp),%ecx
mov    -0x24(%rbp),%eax
xor    %edx,%edx
div    %ecx
mov    %edx,-0x24(%rbp)
mov    -0x20(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x20(%rbp)
jmp    16f1 <_glp_bigdiv+0x5e1>
jmp    174d <_glp_bigdiv+0x63d>
jmp    1752 <_glp_bigdiv+0x642>
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<_glp_bigdiv>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x28,%rsp
mov    %rcx,%r14
mov    %rdx,%rbx
mov    %esi,%ebp
mov    %edi,%r15d
test   %edi,%edi
jns    1145 <_glp_bigdiv+0x35>
lea    0xecc(%rip),%rdi
lea    0xecc(%rip),%rsi
mov    $0x87,%edx
call   1030 <glp_assert_@plt>
test   %ebp,%ebp
mov    %rbp,%rdi
mov    %rbp,(%rsp)
jg     116c <_glp_bigdiv+0x5c>
lea    0xf57(%rip),%rdi
lea    0xea9(%rip),%rsi
mov    $0x88,%edx
call   1030 <glp_assert_@plt>
mov    (%rsp),%rdi
movslq %edi,%rcx
lea    -0x1(%rcx),%rax
mov    %rcx,0x20(%rsp)
cmpw   $0x0,-0x2(%r14,%rcx,2)
mov    %rax,0x8(%rsp)
je     11cf <_glp_bigdiv+0xbf>
cmp    $0x1,%edi
jne    11f5 <_glp_bigdiv+0xe5>
xor    %edx,%edx
test   %r15d,%r15d
js     11c7 <_glp_bigdiv+0xb7>
mov    %r15d,%esi
movzwl (%r14),%edi
add    $0x1,%rsi
nopl   (%rax)
shl    $0x10,%edx
movzwl -0x2(%rbx,%rsi,2),%ecx
or     %edx,%ecx
movzwl %di,%edi
mov    %ecx,%eax
xor    %edx,%edx
div    %edi
mov    %ax,(%rbx,%rsi,2)
movzwl (%r14),%edi
mov    %ecx,%eax
xor    %edx,%edx
div    %edi
add    $0xffffffffffffffff,%rsi
jne    11a0 <_glp_bigdiv+0x90>
mov    %dx,(%rbx)
jmp    1549 <_glp_bigdiv+0x439>
lea    0xedf(%rip),%rdi
lea    0xe2a(%rip),%rsi
mov    $0x89,%edx
call   1030 <glp_assert_@plt>
mov    0x8(%rsp),%rax
mov    (%rsp),%rdi
cmp    $0x1,%edi
je     118b <_glp_bigdiv+0x7b>
movzwl (%r14,%rax,2),%ecx
add    $0x1,%ecx
mov    $0x10000,%eax
xor    %edx,%edx
div    %ecx
movzwl %ax,%ebp
lea    (%rdi,%r15,1),%eax
cmp    $0x1,%ebp
jne    121f <_glp_bigdiv+0x10f>
cltq
movw   $0x0,(%rbx,%rax,2)
jmp    12f7 <_glp_bigdiv+0x1e7>
xor    %ecx,%ecx
test   %eax,%eax
jle    1287 <_glp_bigdiv+0x177>
mov    %eax,%r8d
mov    $0x0,%edx
cmp    $0x1,%eax
je     126b <_glp_bigdiv+0x15b>
mov    %r8d,%edi
and    $0xfffffffe,%edi
xor    %edx,%edx
xor    %ecx,%ecx
nopl   0x0(%rax)
movzwl (%rbx,%rdx,2),%esi
imul   %ebp,%esi
add    %ecx,%esi
mov    %si,(%rbx,%rdx,2)
shr    $0x10,%esi
movzwl 0x2(%rbx,%rdx,2),%ecx
imul   %ebp,%ecx
add    %esi,%ecx
mov    %cx,0x2(%rbx,%rdx,2)
shr    $0x10,%ecx
add    $0x2,%rdx
cmp    %rdx,%rdi
jne    1240 <_glp_bigdiv+0x130>
test   $0x1,%r8b
je     1283 <_glp_bigdiv+0x173>
movzwl (%rbx,%rdx,2),%esi
imul   %ebp,%esi
add    %ecx,%esi
mov    %si,(%rbx,%rdx,2)
shr    $0x10,%esi
mov    %esi,%ecx
mov    (%rsp),%rdi
cltq
mov    %cx,(%rbx,%rax,2)
test   %edi,%edi
jle    12f7 <_glp_bigdiv+0x1e7>
mov    %edi,%ecx
xor    %eax,%eax
mov    $0x0,%edx
cmp    $0x1,%edi
je     12df <_glp_bigdiv+0x1cf>
mov    %ecx,%esi
and    $0xfffffffe,%esi
xor    %eax,%eax
xor    %edx,%edx
nopl   0x0(%rax,%rax,1)
movzwl (%r14,%rax,2),%edi
imul   %ebp,%edi
add    %edx,%edi
mov    %di,(%r14,%rax,2)
shr    $0x10,%edi
movzwl 0x2(%r14,%rax,2),%edx
imul   %ebp,%edx
add    %edi,%edx
mov    %dx,0x2(%r14,%rax,2)
shr    $0x10,%edx
add    $0x2,%rax
cmp    %rax,%rsi
jne    12b0 <_glp_bigdiv+0x1a0>
test   $0x1,%cl
mov    (%rsp),%rdi
je     12f7 <_glp_bigdiv+0x1e7>
movzwl (%r14,%rax,2),%ecx
imul   %ebp,%ecx
add    %edx,%ecx
mov    %cx,(%r14,%rax,2)
mov    %ebp,0x14(%rsp)
test   %r15d,%r15d
js     14e8 <_glp_bigdiv+0x3d8>
lea    -0x2(%rdi),%eax
cltq
mov    %rax,0x18(%rsp)
mov    %r15d,%r15d
mov    %edi,%r10d
mov    %r10d,%r12d
and    $0xfffffffe,%r12d
lea    (%rbx,%r15,2),%r9
jmp    134d <_glp_bigdiv+0x23d>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    (%rsp),%rdi
mov    %ax,(%rbx,%r11,2)
lea    -0x1(%r15),%rax
add    $0xfffffffffffffffe,%r9
test   %r15,%r15
mov    %rax,%r15
jle    14e8 <_glp_bigdiv+0x3d8>
mov    0x20(%rsp),%rax
lea    (%r15,%rax,1),%r11
movzwl (%rbx,%r11,2),%edx
mov    0x8(%rsp),%rax
movzwl (%r14,%rax,2),%esi
cmp    %si,%dx
jae    1380 <_glp_bigdiv+0x270>
shl    $0x10,%edx
movzwl -0x2(%rbx,%r11,2),%eax
or     %edx,%eax
xor    %edx,%edx
div    %esi
test   %ax,%ax
jne    1390 <_glp_bigdiv+0x280>
jmp    1334 <_glp_bigdiv+0x224>
movzwl -0x2(%rbx,%r11,2),%edx
xor    %eax,%eax
jmp    13ba <_glp_bigdiv+0x2aa>
nopw   0x0(%rax,%rax,1)
mov    %rdi,%rcx
mov    %r12,%rdi
mov    0x18(%rsp),%rbp
movzwl (%r14,%rbp,2),%r8d
movzwl %ax,%r13d
imul   %r13d,%r8d
mov    %r8d,%r12d
shr    $0x10,%r12d
cmp    %edx,%r12d
jbe    13d0 <_glp_bigdiv+0x2c0>
mov    %rdi,%r12
mov    %rcx,%rdi
add    $0xffffffff,%eax
movzwl %dx,%edx
add    %esi,%edx
cmp    $0x10000,%edx
jb     1390 <_glp_bigdiv+0x280>
movzwl %ax,%r13d
jmp    1400 <_glp_bigdiv+0x2f0>
jae    13e0 <_glp_bigdiv+0x2d0>
mov    %rdi,%r12
mov    %rcx,%rdi
jmp    1400 <_glp_bigdiv+0x2f0>
nopw   0x0(%rax,%rax,1)
movzwl %r8w,%r8d
movzwl -0x4(%rbx,%r11,2),%ebp
cmp    %ebp,%r8d
mov    %rdi,%r12
mov    %rcx,%rdi
ja     13ba <_glp_bigdiv+0x2aa>
cs nopw 0x0(%rax,%rax,1)
nop
test   %edi,%edi
jle    1334 <_glp_bigdiv+0x224>
test   %ax,%ax
je     1334 <_glp_bigdiv+0x224>
mov    %rbx,%r8
xor    %edx,%edx
xor    %esi,%esi
nopl   0x0(%rax,%rax,1)
movzwl (%r14,%rdx,2),%ebp
imul   %r13d,%ebp
lea    (%rsi,%rbp,1),%ebx
movzwl (%r9,%rdx,2),%edi
movzwl %bx,%ecx
cmp    %edi,%ecx
lea    0x10000(%rbp,%rsi,1),%esi
cmovbe %ebx,%esi
sub    %esi,%edi
mov    %di,(%r9,%rdx,2)
shr    $0x10,%esi
add    $0x1,%rdx
cmp    %rdx,%r10
jne    1420 <_glp_bigdiv+0x310>
mov    %r8,%rbx
movzwl (%r8,%r11,2),%ecx
cmp    %ecx,%esi
jbe    1330 <_glp_bigdiv+0x220>
add    $0xffffffff,%eax
mov    (%rsp),%rdi
test   %edi,%edi
jle    1334 <_glp_bigdiv+0x224>
xor    %edx,%edx
mov    $0x0,%esi
cmp    $0x1,%edi
je     14c8 <_glp_bigdiv+0x3b8>
xor    %edx,%edx
xor    %esi,%esi
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movzwl (%r9,%rdx,2),%ecx
add    %esi,%ecx
movzwl (%r14,%rdx,2),%esi
add    %ecx,%esi
mov    %si,(%r9,%rdx,2)
shr    $0x10,%esi
movzwl 0x2(%r9,%rdx,2),%ecx
add    %esi,%ecx
movzwl 0x2(%r14,%rdx,2),%esi
add    %ecx,%esi
mov    %si,0x2(%r9,%rdx,2)
shr    $0x10,%esi
add    $0x2,%rdx
cmp    %rdx,%r12
jne    1490 <_glp_bigdiv+0x380>
test   $0x1,%r10b
je     1334 <_glp_bigdiv+0x224>
lea    (%rdx,%r15,1),%rcx
add    (%rbx,%rcx,2),%si
add    (%r14,%rdx,2),%si
mov    %si,(%rbx,%rcx,2)
jmp    1334 <_glp_bigdiv+0x224>
test   %edi,%edi
mov    0x14(%rsp),%esi
jle    1549 <_glp_bigdiv+0x439>
cmp    $0x2,%esi
jb     1549 <_glp_bigdiv+0x439>
mov    0x8(%rsp),%ecx
xor    %edx,%edx
nopl   0x0(%rax,%rax,1)
shl    $0x10,%edx
movzwl (%rbx,%rcx,2),%eax
or     %edx,%eax
xor    %edx,%edx
div    %esi
mov    %ax,(%rbx,%rcx,2)
add    $0xffffffffffffffff,%rcx
jb     1500 <_glp_bigdiv+0x3f0>
test   %edi,%edi
mov    0x8(%rsp),%rax
jle    1549 <_glp_bigdiv+0x439>
mov    %eax,%ecx
xor    %edx,%edx
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
shl    $0x10,%edx
movzwl (%r14,%rcx,2),%eax
or     %edx,%eax
xor    %edx,%edx
div    %esi
mov    %ax,(%r14,%rcx,2)
add    $0xffffffffffffffff,%rcx
jb     1530 <_glp_bigdiv+0x420>
add    $0x28,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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