#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_qmd_qmdmrg(int *, int *, int *, int *, int *, int *,
                                  int *, int *, int *, int *, int *);
int /*<<< orphan*/ glp_qmd_qmdrch(int *, int *, int *, int *, int *, int *,
                                  int *, int *, int *);
void glp_qmd_qmdupd(int xadj[], int adjncy[], int *_nlist, int list[],
                    int deg[], int qsize[], int qlink[], int marker[],
                    int rchset[], int nbrhd[]) {
  int deg0, deg1, il, inhd, inode, irch, j, jstop, jstrt, mark, nabor, nhdsze,
      node, rchsze;
  if ((*_nlist) <= 0)
    return;
  deg0 = 0;
  nhdsze = 0;
  for (il = 1; il <= (*_nlist); il++) {
    node = list[il];
    deg0 += qsize[node];
    jstrt = xadj[node];
    jstop = xadj[node + 1] - 1;
    for (j = jstrt; j <= jstop; j++) {
      nabor = adjncy[j];
      if (marker[nabor] == 0 && deg[nabor] < 0) {
        marker[nabor] = -1;
        nhdsze++;
        nbrhd[nhdsze] = nabor;
      }
    }
  }
  if (nhdsze > 0)
    glp_qmd_qmdmrg(xadj, adjncy, deg, qsize, qlink, marker, &deg0, &nhdsze,
                   nbrhd, rchset, &nbrhd[nhdsze + 1]);
  for (il = 1; il <= (*_nlist); il++) {
    node = list[il];
    mark = marker[node];
    if (mark == 0 || mark == 1) {
      marker[node] = 2;
      glp_qmd_qmdrch(&node, xadj, adjncy, deg, marker, &rchsze, rchset, &nhdsze,
                     nbrhd);
      deg1 = deg0;
      if (rchsze > 0) {
        for (irch = 1; irch <= rchsze; irch++) {
          inode = rchset[irch];
          deg1 += qsize[inode];
          marker[inode] = 0;
        }
      }
      deg[node] = deg1 - 1;
      if (nhdsze > 0) {
        for (inhd = 1; inhd <= nhdsze; inhd++) {
          inode = nbrhd[inhd];
          marker[inode] = 0;
        }
      }
    }
  }
  return;
}


x86 assembly (clang, -O0):
<glp_qmd_qmdupd>:
push   %rbp
mov    %rsp,%rbp
push   %r14
push   %rbx
sub    $0x90,%rsp
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %rdi,-0x18(%rbp)
mov    %rsi,-0x20(%rbp)
mov    %rdx,-0x28(%rbp)
mov    %rcx,-0x30(%rbp)
mov    %r8,-0x38(%rbp)
mov    %r9,-0x40(%rbp)
mov    -0x28(%rbp),%rax
cmpl   $0x0,(%rax)
jg     1168 <glp_qmd_qmdupd+0x48>
jmp    142d <glp_qmd_qmdupd+0x30d>
movl   $0x0,-0x44(%rbp)
movl   $0x0,-0x70(%rbp)
movl   $0x1,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
mov    -0x28(%rbp),%rcx
cmp    (%rcx),%eax
jg     125f <glp_qmd_qmdupd+0x13f>
mov    -0x30(%rbp),%rax
movslq -0x4c(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x74(%rbp)
mov    -0x40(%rbp),%rax
movslq -0x74(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
add    -0x44(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x74(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x64(%rbp)
mov    -0x18(%rbp),%rax
mov    -0x74(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
sub    $0x1,%eax
mov    %eax,-0x60(%rbp)
mov    -0x64(%rbp),%eax
mov    %eax,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
cmp    -0x60(%rbp),%eax
jg     124c <glp_qmd_qmdupd+0x12c>
mov    -0x20(%rbp),%rax
movslq -0x5c(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x6c(%rbp)
mov    0x18(%rbp),%rax
movslq -0x6c(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
jne    1239 <glp_qmd_qmdupd+0x119>
mov    -0x38(%rbp),%rax
movslq -0x6c(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
jge    1239 <glp_qmd_qmdupd+0x119>
mov    0x18(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movl   $0xffffffff,(%rax,%rcx,4)
mov    -0x70(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x70(%rbp)
mov    -0x6c(%rbp),%edx
mov    0x28(%rbp),%rax
movslq -0x70(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
jmp    123e <glp_qmd_qmdupd+0x11e>
mov    -0x5c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x5c(%rbp)
jmp    11d5 <glp_qmd_qmdupd+0xb5>
jmp    1251 <glp_qmd_qmdupd+0x131>
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
jmp    117d <glp_qmd_qmdupd+0x5d>
cmpl   $0x0,-0x70(%rbp)
jle    12c2 <glp_qmd_qmdupd+0x1a2>
mov    -0x18(%rbp),%rdi
mov    -0x20(%rbp),%rsi
mov    -0x38(%rbp),%rdx
mov    -0x40(%rbp),%rcx
mov    0x10(%rbp),%r8
mov    0x18(%rbp),%r9
mov    0x28(%rbp),%r11
mov    0x20(%rbp),%r10
mov    0x28(%rbp),%rax
mov    -0x70(%rbp),%ebx
add    $0x1,%ebx
movslq %ebx,%rbx
shl    $0x2,%rbx
add    %rbx,%rax
lea    -0x44(%rbp),%r14
lea    -0x70(%rbp),%rbx
mov    %r14,(%rsp)
mov    %rbx,0x8(%rsp)
mov    %r11,0x10(%rsp)
mov    %r10,0x18(%rsp)
mov    %rax,0x20(%rsp)
call   1040 <glp_qmd_qmdmrg@plt>
movl   $0x1,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
mov    -0x28(%rbp),%rcx
cmp    (%rcx),%eax
jg     1428 <glp_qmd_qmdupd+0x308>
mov    -0x30(%rbp),%rax
movslq -0x4c(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x74(%rbp)
mov    0x18(%rbp),%rax
movslq -0x74(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x68(%rbp)
cmpl   $0x0,-0x68(%rbp)
je     1308 <glp_qmd_qmdupd+0x1e8>
cmpl   $0x1,-0x68(%rbp)
jne    1415 <glp_qmd_qmdupd+0x2f5>
mov    0x18(%rbp),%rax
movslq -0x74(%rbp),%rcx
movl   $0x2,(%rax,%rcx,4)
mov    -0x18(%rbp),%rsi
mov    -0x20(%rbp),%rdx
mov    -0x38(%rbp),%rcx
mov    0x18(%rbp),%r8
mov    0x20(%rbp),%r11
mov    0x28(%rbp),%rax
lea    -0x74(%rbp),%rdi
lea    -0x78(%rbp),%r9
lea    -0x70(%rbp),%r10
mov    %r11,(%rsp)
mov    %r10,0x8(%rsp)
mov    %rax,0x10(%rsp)
call   1030 <glp_qmd_qmdrch@plt>
mov    -0x44(%rbp),%eax
mov    %eax,-0x48(%rbp)
cmpl   $0x0,-0x78(%rbp)
jle    13b2 <glp_qmd_qmdupd+0x292>
movl   $0x1,-0x58(%rbp)
mov    -0x58(%rbp),%eax
cmp    -0x78(%rbp),%eax
jg     13ad <glp_qmd_qmdupd+0x28d>
mov    0x20(%rbp),%rax
movslq -0x58(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x54(%rbp)
mov    -0x40(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
add    -0x48(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    0x18(%rbp),%rax
movslq -0x54(%rbp),%rcx
movl   $0x0,(%rax,%rcx,4)
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
jmp    1365 <glp_qmd_qmdupd+0x245>
jmp    13b2 <glp_qmd_qmdupd+0x292>
mov    -0x48(%rbp),%edx
sub    $0x1,%edx
mov    -0x38(%rbp),%rax
movslq -0x74(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
cmpl   $0x0,-0x70(%rbp)
jle    1410 <glp_qmd_qmdupd+0x2f0>
movl   $0x1,-0x50(%rbp)
mov    -0x50(%rbp),%eax
cmp    -0x70(%rbp),%eax
jg     140b <glp_qmd_qmdupd+0x2eb>
mov    0x28(%rbp),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x54(%rbp)
mov    0x18(%rbp),%rax
movslq -0x54(%rbp),%rcx
movl   $0x0,(%rax,%rcx,4)
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
jmp    13d4 <glp_qmd_qmdupd+0x2b4>
jmp    1410 <glp_qmd_qmdupd+0x2f0>
jmp    1415 <glp_qmd_qmdupd+0x2f5>
jmp    141a <glp_qmd_qmdupd+0x2fa>
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
jmp    12c9 <glp_qmd_qmdupd+0x1a9>
jmp    142d <glp_qmd_qmdupd+0x30d>
add    $0x90,%rsp
pop    %rbx
pop    %r14
pop    %rbp
ret

x86 assembly (clang, -O2):
<glp_qmd_qmdupd>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x48,%rsp
mov    %rsi,%r13
mov    %rdi,0x38(%rsp)
mov    (%rdx),%esi
test   %esi,%esi
jle    145a <glp_qmd_qmdupd+0x33a>
mov    %r9,%r14
mov    %r8,%r11
mov    0x98(%rsp),%r15
mov    0x88(%rsp),%r12
mov    0x80(%rsp),%r8
xor    %r9d,%r9d
mov    $0x1,%r10d
xor    %eax,%eax
jmp    1181 <glp_qmd_qmdupd+0x61>
nopl   0x0(%rax,%rax,1)
mov    (%rdx),%esi
lea    0x1(%r10),%rbx
movslq %esi,%rdi
cmp    %rdi,%r10
mov    %rbx,%r10
jge    11d4 <glp_qmd_qmdupd+0xb4>
movslq (%rcx,%r10,4),%rbp
add    (%r14,%rbp,4),%r9d
mov    0x38(%rsp),%rbx
movslq (%rbx,%rbp,4),%rdi
movslq 0x4(%rbx,%rbp,4),%rbp
cmp    %ebp,%edi
jl     11a9 <glp_qmd_qmdupd+0x89>
jmp    1172 <glp_qmd_qmdupd+0x52>
nopl   (%rax)
add    $0x1,%rdi
cmp    %rdi,%rbp
je     1170 <glp_qmd_qmdupd+0x50>
mov    0x0(%r13,%rdi,4),%esi
movslq %esi,%rsi
cmpl   $0x0,(%r12,%rsi,4)
jne    11a0 <glp_qmd_qmdupd+0x80>
cmpl   $0x0,(%r11,%rsi,4)
jns    11a0 <glp_qmd_qmdupd+0x80>
movl   $0xffffffff,(%r12,%rsi,4)
ff
movslq %eax,%rbx
add    $0x1,%eax
mov    %esi,0x4(%r15,%rbx,4)
jmp    11a0 <glp_qmd_qmdupd+0x80>
mov    %r9d,0x14(%rsp)
mov    %eax,0xc(%rsp)
test   %eax,%eax
mov    %r11,0x20(%rsp)
mov    %rdx,0x18(%rsp)
jle    123c <glp_qmd_qmdupd+0x11c>
mov    %eax,%eax
lea    (%r15,%rax,4),%rax
add    $0x4,%rax
sub    $0x8,%rsp
lea    0x14(%rsp),%rbp
mov    %rcx,%rbx
lea    0x1c(%rsp),%r10
mov    0x40(%rsp),%rdi
mov    %r13,%rsi
mov    %r11,%rdx
mov    %r14,%rcx
mov    %r12,%r9
push   %rax
push   0xa0(%rsp)
push   %r15
push   %rbp
push   %r10
call   1040 <glp_qmd_qmdmrg@plt>
mov    0x48(%rsp),%rdx
mov    0x50(%rsp),%r11
mov    %rbx,%rcx
add    $0x30,%rsp
mov    (%rdx),%esi
test   %esi,%esi
mov    0x90(%rsp),%r10
jle    145a <glp_qmd_qmdupd+0x33a>
mov    $0x1,%r8d
mov    %rcx,0x28(%rsp)
jmp    1273 <glp_qmd_qmdupd+0x153>
nopl   0x0(%rax)
lea    0x1(%r8),%rax
movslq (%rdx),%rsi
cmp    %rsi,%r8
mov    %rax,%r8
jge    145a <glp_qmd_qmdupd+0x33a>
movslq (%rcx,%r8,4),%rax
mov    %eax,0x10(%rsp)
cmpl   $0x1,(%r12,%rax,4)
ja     1260 <glp_qmd_qmdupd+0x140>
mov    %r8,0x30(%rsp)
movl   $0x2,(%r12,%rax,4)
sub    $0x8,%rsp
lea    0x18(%rsp),%rdi
mov    0x40(%rsp),%rsi
mov    %r13,%rdx
mov    %r11,%rcx
mov    %r12,%r8
lea    0x4c(%rsp),%r9
push   %r15
lea    0x1c(%rsp),%rax
push   %rax
push   %r10
call   1030 <glp_qmd_qmdrch@plt>
add    $0x20,%rsp
mov    0x14(%rsp),%eax
mov    0x44(%rsp),%esi
test   %esi,%esi
jle    12fa <glp_qmd_qmdupd+0x1da>
lea    -0x1(%rsi),%rdi
mov    %esi,%ebp
and    $0x3,%ebp
mov    $0x1,%ebx
cmp    $0x3,%rdi
jae    131b <glp_qmd_qmdupd+0x1fb>
mov    0x28(%rsp),%rcx
mov    0x20(%rsp),%r11
mov    0x18(%rsp),%rdx
mov    0x90(%rsp),%r10
jmp    1390 <glp_qmd_qmdupd+0x270>
mov    0x28(%rsp),%rcx
mov    0x20(%rsp),%r11
mov    0x18(%rsp),%rdx
mov    0x90(%rsp),%r10
mov    0x30(%rsp),%r8
jmp    13b9 <glp_qmd_qmdupd+0x299>
and    $0xfffffffc,%esi
xor    %ebx,%ebx
mov    0x90(%rsp),%r10
nopl   0x0(%rax,%rax,1)
movslq 0x4(%r10,%rbx,4),%rdi
add    (%r14,%rdi,4),%eax
movl   $0x0,(%r12,%rdi,4)
movslq 0x8(%r10,%rbx,4),%rdi
add    (%r14,%rdi,4),%eax
movl   $0x0,(%r12,%rdi,4)
movslq 0xc(%r10,%rbx,4),%rdi
add    (%r14,%rdi,4),%eax
movl   $0x0,(%r12,%rdi,4)
movslq 0x10(%r10,%rbx,4),%rdi
add    (%r14,%rdi,4),%eax
movl   $0x0,(%r12,%rdi,4)
add    $0x4,%rbx
cmp    %rbx,%rsi
jne    1330 <glp_qmd_qmdupd+0x210>
add    $0x1,%rbx
mov    0x28(%rsp),%rcx
mov    0x20(%rsp),%r11
mov    0x18(%rsp),%rdx
mov    0x30(%rsp),%r8
test   %rbp,%rbp
je     13b9 <glp_qmd_qmdupd+0x299>
lea    (%r10,%rbx,4),%rbx
xor    %esi,%esi
movslq (%rbx,%rsi,4),%rdi
add    (%r14,%rdi,4),%eax
movl   $0x0,(%r12,%rdi,4)
add    $0x1,%rsi
cmp    %rsi,%rbp
jne    13a0 <glp_qmd_qmdupd+0x280>
add    $0xffffffff,%eax
movslq 0x10(%rsp),%rsi
mov    %eax,(%r11,%rsi,4)
mov    0xc(%rsp),%edi
test   %edi,%edi
jle    1260 <glp_qmd_qmdupd+0x140>
lea    -0x1(%rdi),%rsi
mov    %edi,%eax
and    $0x3,%eax
mov    $0x1,%ebp
cmp    $0x3,%rsi
jb     1431 <glp_qmd_qmdupd+0x311>
and    $0xfffffffc,%edi
xor    %ebp,%ebp
nopw   0x0(%rax,%rax,1)
movslq 0x4(%r15,%rbp,4),%rsi
movl   $0x0,(%r12,%rsi,4)
movslq 0x8(%r15,%rbp,4),%rsi
movl   $0x0,(%r12,%rsi,4)
movslq 0xc(%r15,%rbp,4),%rsi
movl   $0x0,(%r12,%rsi,4)
movslq 0x10(%r15,%rbp,4),%rsi
movl   $0x0,(%r12,%rsi,4)
add    $0x4,%rbp
cmp    %rbp,%rdi
jne    13f0 <glp_qmd_qmdupd+0x2d0>
add    $0x1,%rbp
test   %rax,%rax
je     1260 <glp_qmd_qmdupd+0x140>
lea    (%r15,%rbp,4),%rdi
xor    %ebp,%ebp
movslq (%rdi,%rbp,4),%rsi
movl   $0x0,(%r12,%rsi,4)
add    $0x1,%rbp
cmp    %rbp,%rax
jne    1440 <glp_qmd_qmdupd+0x320>
jmp    1260 <glp_qmd_qmdupd+0x140>
add    $0x48,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @glp_qmd_qmdupd(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 i32
%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** %11
store i32* %1, i32** %12
store i32* %2, i32** %13
store i32* %3, i32** %14
store i32* %4, i32** %15
store i32* %5, i32** %16
store i32* %6, i32** %17
store i32* %7, i32** %18
store i32* %8, i32** %19
store i32* %9, i32** %20
%35 = load i32*, i32** %13
%36 = load i32, i32* %35
%37 = icmp sle i32 %36, 0
br i1 %37, label %38, label %39
38: ; preds = %10
br label %229
39: ; preds = %10
store i32 0, i32* %21
store i32 0, i32* %32
store i32 1, i32* %23
br label %40
40: ; preds = %111, %39
%41 = load i32, i32* %23
%42 = load i32*, i32** %13
%43 = load i32, i32* %42
%44 = icmp sle i32 %41, %43
br i1 %44, label %45, label %114
45: ; preds = %40
%46 = load i32*, i32** %14
%47 = load i32, i32* %23
%48 = sext i32 %47 to i64
%49 = getelementptr inbounds i32, i32* %46, i64 %48
%50 = load i32, i32* %49
store i32 %50, i32* %33
%51 = load i32*, i32** %16
%52 = load i32, i32* %33
%53 = sext i32 %52 to i64
%54 = getelementptr inbounds i32, i32* %51, i64 %53
%55 = load i32, i32* %54
%56 = load i32, i32* %21
%57 = add nsw i32 %56, %55
store i32 %57, i32* %21
%58 = load i32*, i32** %11
%59 = load i32, i32* %33
%60 = sext i32 %59 to i64
%61 = getelementptr inbounds i32, i32* %58, i64 %60
%62 = load i32, i32* %61
store i32 %62, i32* %29
%63 = load i32*, i32** %11
%64 = load i32, i32* %33
%65 = add nsw i32 %64, 1
%66 = sext i32 %65 to i64
%67 = getelementptr inbounds i32, i32* %63, i64 %66
%68 = load i32, i32* %67
%69 = sub nsw i32 %68, 1
store i32 %69, i32* %28
%70 = load i32, i32* %29
store i32 %70, i32* %27
br label %71
71: ; preds = %107, %45
%72 = load i32, i32* %27
%73 = load i32, i32* %28
%74 = icmp sle i32 %72, %73
br i1 %74, label %75, label %110
75: ; preds = %71
%76 = load i32*, i32** %12
%77 = load i32, i32* %27
%78 = sext i32 %77 to i64
%79 = getelementptr inbounds i32, i32* %76, i64 %78
%80 = load i32, i32* %79
store i32 %80, i32* %31
%81 = load i32*, i32** %18
%82 = load i32, i32* %31
%83 = sext i32 %82 to i64
%84 = getelementptr inbounds i32, i32* %81, i64 %83
%85 = load i32, i32* %84
%86 = icmp eq i32 %85, 0
br i1 %86, label %87, label %106
87: ; preds = %75
%88 = load i32*, i32** %15
%89 = load i32, i32* %31
%90 = sext i32 %89 to i64
%91 = getelementptr inbounds i32, i32* %88, i64 %90
%92 = load i32, i32* %91
%93 = icmp slt i32 %92, 0
br i1 %93, label %94, label %106
94: ; preds = %87
%95 = load i32*, i32** %18
%96 = load i32, i32* %31
%97 = sext i32 %96 to i64
%98 = getelementptr inbounds i32, i32* %95, i64 %97
store i32 -1, i32* %98
%99 = load i32, i32* %32
%100 = add nsw i32 %99, 1
store i32 %100, i32* %32
%101 = load i32, i32* %31
%102 = load i32*, i32** %20
%103 = load i32, i32* %32
%104 = sext i32 %103 to i64
%105 = getelementptr inbounds i32, i32* %102, i64 %104
store i32 %101, i32* %105
br label %106
106: ; preds = %94, %87, %75
br label %107
107: ; preds = %106
%108 = load i32, i32* %27
%109 = add nsw i32 %108, 1
store i32 %109, i32* %27
br label %71
110: ; preds = %71
br label %111
111: ; preds = %110
%112 = load i32, i32* %23
%113 = add nsw i32 %112, 1
store i32 %113, i32* %23
br label %40
114: ; preds = %40
%115 = load i32, i32* %32
%116 = icmp sgt i32 %115, 0
br i1 %116, label %117, label %132
117: ; preds = %114
%118 = load i32*, i32** %11
%119 = load i32*, i32** %12
%120 = load i32*, i32** %15
%121 = load i32*, i32** %16
%122 = load i32*, i32** %17
%123 = load i32*, i32** %18
%124 = load i32*, i32** %20
%125 = load i32*, i32** %19
%126 = load i32*, i32** %20
%127 = load i32, i32* %32
%128 = add nsw i32 %127, 1
%129 = sext i32 %128 to i64
%130 = getelementptr inbounds i32, i32* %126, i64 %129
%131 = call i32 @glp_qmd_qmdmrg(i32* %118, i32* %119, i32* %120, i32* %121, i32* %122, i32* %123, i32* %21, i32* %32, i32* %124, i32* %125, i32* %130)
br label %132
132: ; preds = %117, %114
store i32 1, i32* %23
br label %133
133: ; preds = %225, %132
%134 = load i32, i32* %23
%135 = load i32*, i32** %13
%136 = load i32, i32* %135
%137 = icmp sle i32 %134, %136
br i1 %137, label %138, label %228
138: ; preds = %133
%139 = load i32*, i32** %14
%140 = load i32, i32* %23
%141 = sext i32 %140 to i64
%142 = getelementptr inbounds i32, i32* %139, i64 %141
%143 = load i32, i32* %142
store i32 %143, i32* %33
%144 = load i32*, i32** %18
%145 = load i32, i32* %33
%146 = sext i32 %145 to i64
%147 = getelementptr inbounds i32, i32* %144, i64 %146
%148 = load i32, i32* %147
store i32 %148, i32* %30
%149 = load i32, i32* %30
%150 = icmp eq i32 %149, 0
br i1 %150, label %154, label %151
151: ; preds = %138
%152 = load i32, i32* %30
%153 = icmp eq i32 %152, 1
br i1 %153, label %154, label %224
154: ; preds = %151, %138
%155 = load i32*, i32** %18
%156 = load i32, i32* %33
%157 = sext i32 %156 to i64
%158 = getelementptr inbounds i32, i32* %155, i64 %157
store i32 2, i32* %158
%159 = load i32*, i32** %11
%160 = load i32*, i32** %12
%161 = load i32*, i32** %15
%162 = load i32*, i32** %18
%163 = load i32*, i32** %19
%164 = load i32*, i32** %20
%165 = call i32 @glp_qmd_qmdrch(i32* %33, i32* %159, i32* %160, i32* %161, i32* %162, i32* %34, i32* %163, i32* %32, i32* %164)
%166 = load i32, i32* %21
store i32 %166, i32* %22
%167 = load i32, i32* %34
%168 = icmp sgt i32 %167, 0
br i1 %168, label %169, label %195
169: ; preds = %154
store i32 1, i32* %26
br label %170
170: ; preds = %191, %169
%171 = load i32, i32* %26
%172 = load i32, i32* %34
%173 = icmp sle i32 %171, %172
br i1 %173, label %174, label %194
174: ; preds = %170
%175 = load i32*, i32** %19
%176 = load i32, i32* %26
%177 = sext i32 %176 to i64
%178 = getelementptr inbounds i32, i32* %175, i64 %177
%179 = load i32, i32* %178
store i32 %179, i32* %25
%180 = load i32*, i32** %16
%181 = load i32, i32* %25
%182 = sext i32 %181 to i64
%183 = getelementptr inbounds i32, i32* %180, i64 %182
%184 = load i32, i32* %183
%185 = load i32, i32* %22
%186 = add nsw i32 %185, %184
store i32 %186, i32* %22
%187 = load i32*, i32** %18
%188 = load i32, i32* %25
%189 = sext i32 %188 to i64
%190 = getelementptr inbounds i32, i32* %187, i64 %189
store i32 0, i32* %190
br label %191
191: ; preds = %174
%192 = load i32, i32* %26
%193 = add nsw i32 %192, 1
store i32 %193, i32* %26
br label %170
194: ; preds = %170
br label %195
195: ; preds = %194, %154
%196 = load i32, i32* %22
%197 = sub nsw i32 %196, 1
%198 = load i32*, i32** %15
%199 = load i32, i32* %33
%200 = sext i32 %199 to i64
%201 = getelementptr inbounds i32, i32* %198, i64 %200
store i32 %197, i32* %201
%202 = load i32, i32* %32
%203 = icmp sgt i32 %202, 0
br i1 %203, label %204, label %223
204: ; preds = %195
store i32 1, i32* %24
br label %205
205: ; preds = %219, %204
%206 = load i32, i32* %24
%207 = load i32, i32* %32
%208 = icmp sle i32 %206, %207
br i1 %208, label %209, label %222
209: ; preds = %205
%210 = load i32*, i32** %20
%211 = load i32, i32* %24
%212 = sext i32 %211 to i64
%213 = getelementptr inbounds i32, i32* %210, i64 %212
%214 = load i32, i32* %213
store i32 %214, i32* %25
%215 = load i32*, i32** %18
%216 = load i32, i32* %25
%217 = sext i32 %216 to i64
%218 = getelementptr inbounds i32, i32* %215, i64 %217
store i32 0, i32* %218
br label %219
219: ; preds = %209
%220 = load i32, i32* %24
%221 = add nsw i32 %220, 1
store i32 %221, i32* %24
br label %205
222: ; preds = %205
br label %223
223: ; preds = %222, %195
br label %224
224: ; preds = %223, %151
br label %225
225: ; preds = %224
%226 = load i32, i32* %23
%227 = add nsw i32 %226, 1
store i32 %227, i32* %23
br label %133
228: ; preds = %133
br label %229
229: ; preds = %228, %38
ret void
}

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