void PassiveSet_update(int *NotGood, int *Ninf, int *P, int pbar,
                       int *NonOptSet, int *PassiveSet, int *InfeaSet, int N,
                       int K, int *Cols3Ix) {
  int i, k;
  for (i = 0; i < N; i++) {
    Cols3Ix[i] = 0;
    if (NotGood[i]) {
      if (NotGood[i] < Ninf[i]) {
        P[i] = pbar;
        Ninf[i] = NotGood[i];
        for (k = 0; k < K; k++) {
          if (NonOptSet[k * N + i])
            PassiveSet[k * N + i] = 1;
          else if (InfeaSet[k * N + i])
            PassiveSet[k * N + i] = 0;
        }
      } else {
        if (P[i] >= 1) {
          P[i]--;
          for (k = 0; k < K; k++) {
            if (NonOptSet[k * N + i])
              PassiveSet[k * N + i] = 1;
            else if (InfeaSet[k * N + i])
              PassiveSet[k * N + i] = 0;
          }
        } else {
          Cols3Ix[i] = 1;
        }
      }
    }
  }
  for (i = 0; i < N; i++) {
    if (Cols3Ix[i]) {
      k = K - 1;
      while (k >= 0 && !(NonOptSet[k * N + i] || InfeaSet[k * N + i]))
        k--;
      PassiveSet[k * N + i] = !PassiveSet[k * N + i];
    }
  }
}


x86 assembly (clang, -O0):
<PassiveSet_update>:
push   %rbp
mov    %rsp,%rbp
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%eax
mov    0x18(%rbp),%eax
mov    0x10(%rbp),%rax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    0x18(%rbp),%eax
jge    1322 <PassiveSet_update+0x222>
mov    0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
movl   $0x0,(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     130f <PassiveSet_update+0x20f>
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x10(%rbp),%rcx
movslq -0x34(%rbp),%rdx
cmp    (%rcx,%rdx,4),%eax
jge    1238 <PassiveSet_update+0x138>
mov    -0x1c(%rbp),%edx
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    0x20(%rbp),%eax
jge    1233 <PassiveSet_update+0x133>
mov    -0x28(%rbp),%rax
mov    -0x38(%rbp),%ecx
imul   0x18(%rbp),%ecx
add    -0x34(%rbp),%ecx
movslq %ecx,%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     11e8 <PassiveSet_update+0xe8>
mov    -0x30(%rbp),%rax
mov    -0x38(%rbp),%ecx
imul   0x18(%rbp),%ecx
add    -0x34(%rbp),%ecx
movslq %ecx,%rcx
movl   $0x1,(%rax,%rcx,4)
jmp    1220 <PassiveSet_update+0x120>
mov    0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
imul   0x18(%rbp),%ecx
add    -0x34(%rbp),%ecx
movslq %ecx,%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     121b <PassiveSet_update+0x11b>
mov    -0x30(%rbp),%rax
mov    -0x38(%rbp),%ecx
imul   0x18(%rbp),%ecx
add    -0x34(%rbp),%ecx
movslq %ecx,%rcx
movl   $0x0,(%rax,%rcx,4)
jmp    1220 <PassiveSet_update+0x120>
jmp    1225 <PassiveSet_update+0x125>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    11a4 <PassiveSet_update+0xa4>
jmp    130a <PassiveSet_update+0x20a>
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
cmpl   $0x1,(%rax,%rcx,4)
jl     12f6 <PassiveSet_update+0x1f6>
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
add    $0xffffffff,%edx
mov    %edx,(%rax,%rcx,4)
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    0x20(%rbp),%eax
jge    12f1 <PassiveSet_update+0x1f1>
mov    -0x28(%rbp),%rax
mov    -0x38(%rbp),%ecx
imul   0x18(%rbp),%ecx
add    -0x34(%rbp),%ecx
movslq %ecx,%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     12a6 <PassiveSet_update+0x1a6>
mov    -0x30(%rbp),%rax
mov    -0x38(%rbp),%ecx
imul   0x18(%rbp),%ecx
add    -0x34(%rbp),%ecx
movslq %ecx,%rcx
movl   $0x1,(%rax,%rcx,4)
jmp    12de <PassiveSet_update+0x1de>
mov    0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
imul   0x18(%rbp),%ecx
add    -0x34(%rbp),%ecx
movslq %ecx,%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     12d9 <PassiveSet_update+0x1d9>
mov    -0x30(%rbp),%rax
mov    -0x38(%rbp),%ecx
imul   0x18(%rbp),%ecx
add    -0x34(%rbp),%ecx
movslq %ecx,%rcx
movl   $0x0,(%rax,%rcx,4)
jmp    12de <PassiveSet_update+0x1de>
jmp    12e3 <PassiveSet_update+0x1e3>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    1262 <PassiveSet_update+0x162>
jmp    1305 <PassiveSet_update+0x205>
mov    0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
movl   $0x1,(%rax,%rcx,4)
jmp    130a <PassiveSet_update+0x20a>
jmp    130f <PassiveSet_update+0x20f>
jmp    1314 <PassiveSet_update+0x214>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1130 <PassiveSet_update+0x30>
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    0x18(%rbp),%eax
jge    1406 <PassiveSet_update+0x306>
mov    0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     13f3 <PassiveSet_update+0x2f3>
mov    0x20(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x38(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x38(%rbp)
mov    %al,-0x39(%rbp)
jl     13a2 <PassiveSet_update+0x2a2>
mov    -0x28(%rbp),%rcx
mov    -0x38(%rbp),%eax
imul   0x18(%rbp),%eax
add    -0x34(%rbp),%eax
movslq %eax,%rdx
mov    $0x1,%al
cmpl   $0x0,(%rcx,%rdx,4)
mov    %al,-0x3a(%rbp)
jne    139a <PassiveSet_update+0x29a>
mov    0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
imul   0x18(%rbp),%ecx
add    -0x34(%rbp),%ecx
movslq %ecx,%rcx
cmpl   $0x0,(%rax,%rcx,4)
setne  %al
mov    %al,-0x3a(%rbp)
mov    -0x3a(%rbp),%al
xor    $0xff,%al
mov    %al,-0x39(%rbp)
mov    -0x39(%rbp),%al
test   $0x1,%al
jne    13b2 <PassiveSet_update+0x2b2>
jmp    13c0 <PassiveSet_update+0x2c0>
mov    -0x38(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x38(%rbp)
jmp    1350 <PassiveSet_update+0x250>
mov    -0x30(%rbp),%rax
mov    -0x38(%rbp),%ecx
imul   0x18(%rbp),%ecx
add    -0x34(%rbp),%ecx
movslq %ecx,%rcx
cmpl   $0x0,(%rax,%rcx,4)
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%edx
mov    -0x30(%rbp),%rax
mov    -0x38(%rbp),%ecx
imul   0x18(%rbp),%ecx
add    -0x34(%rbp),%ecx
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
jmp    13f8 <PassiveSet_update+0x2f8>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1329 <PassiveSet_update+0x229>
pop    %rbp
ret

x86 assembly (clang, -O2):
<PassiveSet_update>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    %ecx,-0x1c(%rsp)
mov    0x40(%rsp),%eax
test   %eax,%eax
jle    13e5 <PassiveSet_update+0x2e5>
mov    %rsi,-0x8(%rsp)
mov    %rdx,-0x10(%rsp)
mov    0x50(%rsp),%rbp
mov    0x38(%rsp),%rcx
mov    %eax,%eax
mov    0x48(%rsp),%r12d
lea    -0x1(%r12),%rdx
mov    %rdx,-0x18(%rsp)
and    $0xfffffffe,%r12d
lea    (%r9,%rax,4),%r13
lea    0x0(,%rax,8),%r10
lea    (%rcx,%rax,4),%rsi
mov    %rax,-0x28(%rsp)
lea    (%r8,%rax,4),%rcx
xor    %r15d,%r15d
xor    %r11d,%r11d
jmp    1183 <PassiveSet_update+0x83>
movl   $0x1,0x0(%rbp,%r11,4)
nopl   (%rax)
add    $0x1,%r11
add    $0x4,%r15
cmp    -0x28(%rsp),%r11
je     1339 <PassiveSet_update+0x239>
movl   $0x0,0x0(%rbp,%r11,4)
mov    (%rdi,%r11,4),%eax
test   %eax,%eax
je     1170 <PassiveSet_update+0x70>
mov    -0x8(%rsp),%rbx
cmp    (%rbx,%r11,4),%eax
jge    1230 <PassiveSet_update+0x130>
mov    -0x1c(%rsp),%eax
mov    -0x10(%rsp),%rdx
mov    %eax,(%rdx,%r11,4)
mov    (%rdi,%r11,4),%eax
mov    %eax,(%rbx,%r11,4)
cmpl   $0x0,0x48(%rsp)
jle    1170 <PassiveSet_update+0x70>
cmpq   $0x0,-0x18(%rsp)
je     12b3 <PassiveSet_update+0x1b3>
mov    %r15,%rbx
xor    %r14d,%r14d
mov    0x38(%rsp),%rax
jmp    11f5 <PassiveSet_update+0xf5>
nopl   0x0(%rax,%rax,1)
mov    %ebp,0x0(%r13,%rbx,1)
add    $0x2,%r14
add    %r10,%rbx
cmp    %r14,%r12
je     12b6 <PassiveSet_update+0x1b6>
mov    $0x1,%ebp
cmpl   $0x0,(%r8,%rbx,1)
jne    1209 <PassiveSet_update+0x109>
xor    %ebp,%ebp
cmpl   $0x0,(%rax,%rbx,1)
je     120d <PassiveSet_update+0x10d>
mov    %ebp,(%r9,%rbx,1)
mov    $0x1,%ebp
cmpl   $0x0,(%rcx,%rbx,1)
jne    11e0 <PassiveSet_update+0xe0>
xor    %ebp,%ebp
cmpl   $0x0,(%rsi,%rbx,1)
jne    11e0 <PassiveSet_update+0xe0>
jmp    11e5 <PassiveSet_update+0xe5>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    -0x10(%rsp),%rdx
mov    (%rdx,%r11,4),%eax
test   %eax,%eax
jle    1164 <PassiveSet_update+0x64>
add    $0xffffffff,%eax
mov    %eax,(%rdx,%r11,4)
cmpl   $0x0,0x48(%rsp)
jle    1170 <PassiveSet_update+0x70>
cmpq   $0x0,-0x18(%rsp)
je     12f7 <PassiveSet_update+0x1f7>
mov    %r15,%rbp
xor    %ebx,%ebx
jmp    1281 <PassiveSet_update+0x181>
cs nopw 0x0(%rax,%rax,1)
mov    %eax,0x0(%r13,%rbp,1)
add    $0x2,%rbx
add    %r10,%rbp
cmp    %rbx,%r12
je     12f9 <PassiveSet_update+0x1f9>
mov    $0x1,%eax
cmpl   $0x0,(%r8,%rbp,1)
jne    129a <PassiveSet_update+0x19a>
xor    %eax,%eax
mov    0x38(%rsp),%rdx
cmpl   $0x0,(%rdx,%rbp,1)
je     129e <PassiveSet_update+0x19e>
mov    %eax,(%r9,%rbp,1)
mov    $0x1,%eax
cmpl   $0x0,(%rcx,%rbp,1)
jne    1270 <PassiveSet_update+0x170>
xor    %eax,%eax
cmpl   $0x0,(%rsi,%rbp,1)
jne    1270 <PassiveSet_update+0x170>
jmp    1275 <PassiveSet_update+0x175>
xor    %r14d,%r14d
mov    0x48(%rsp),%eax
test   $0x1,%al
mov    0x50(%rsp),%rbp
je     1170 <PassiveSet_update+0x70>
imul   -0x28(%rsp),%r14
add    %r11,%r14
mov    $0x1,%eax
cmpl   $0x0,(%r8,%r14,4)
jne    12ee <PassiveSet_update+0x1ee>
xor    %eax,%eax
mov    0x38(%rsp),%rdx
cmpl   $0x0,(%rdx,%r14,4)
je     1170 <PassiveSet_update+0x70>
mov    %eax,(%r9,%r14,4)
jmp    1170 <PassiveSet_update+0x70>
xor    %ebx,%ebx
mov    0x48(%rsp),%eax
test   $0x1,%al
mov    0x50(%rsp),%rbp
je     1170 <PassiveSet_update+0x70>
imul   -0x28(%rsp),%rbx
add    %r11,%rbx
mov    $0x1,%eax
cmpl   $0x0,(%r8,%rbx,4)
jne    1330 <PassiveSet_update+0x230>
xor    %eax,%eax
mov    0x38(%rsp),%rdx
cmpl   $0x0,(%rdx,%rbx,4)
je     1170 <PassiveSet_update+0x70>
mov    %eax,(%r9,%rbx,4)
jmp    1170 <PassiveSet_update+0x70>
mov    0x40(%rsp),%r11d
test   %r11d,%r11d
jle    13e5 <PassiveSet_update+0x2e5>
mov    0x48(%rsp),%r14d
movslq %r14d,%r10
xor    %ecx,%ecx
test   %r14d,%r14d
cmovns %ecx,%r14d
add    $0xffffffff,%r14d
lea    -0x1(%r10),%rax
mov    -0x28(%rsp),%rsi
imul   %rsi,%rax
lea    (%r8,%rax,4),%rdx
lea    0x0(,%rsi,4),%rsi
mov    0x38(%rsp),%rdi
lea    (%rdi,%rax,4),%rdi
jmp    13b3 <PassiveSet_update+0x2b3>
mov    %r14d,%eax
imul   %r11d,%eax
cltq
add    %rcx,%rax
xor    %ebp,%ebp
cmpl   $0x0,(%r9,%rax,4)
sete   %bpl
mov    %ebp,(%r9,%rax,4)
mov    0x50(%rsp),%rbp
add    $0x1,%rcx
add    $0x4,%rdx
add    $0x4,%rdi
cmp    -0x28(%rsp),%rcx
je     13e5 <PassiveSet_update+0x2e5>
cmpl   $0x0,0x0(%rbp,%rcx,4)
je     13a0 <PassiveSet_update+0x2a0>
xor    %ebp,%ebp
mov    %r10,%rax
nop
test   %rax,%rax
jle    1380 <PassiveSet_update+0x280>
cmpl   $0x0,(%rdx,%rbp,1)
jne    13e0 <PassiveSet_update+0x2e0>
add    $0xffffffffffffffff,%rax
mov    %rbp,%rbx
sub    %rsi,%rbx
cmpl   $0x0,(%rdi,%rbp,1)
mov    %rbx,%rbp
je     13c0 <PassiveSet_update+0x2c0>
jmp    1383 <PassiveSet_update+0x283>
add    $0xffffffff,%eax
jmp    1383 <PassiveSet_update+0x283>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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