void step_three(int nrow, int ncol, int *colCover, int **m, int *step) {
  int colcount;
  for (int r = 0; r < nrow; r++)
    for (int c = 0; c < ncol; c++)
      if (m[r][c] == 1)
        colCover[c] = 1;
  colcount = 0;
  for (int c = 0; c < ncol; c++)
    if (colCover[c] == 1)
      colcount += 1;
  *step = (colcount >= nrow || colcount >= ncol) ? 7 : 4;
}


x86 assembly (clang, -O0):
<step_three>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %rdx,-0x10(%rbp)
mov    %rcx,-0x18(%rbp)
mov    %r8,-0x20(%rbp)
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    118b <step_three+0x8b>
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    1178 <step_three+0x78>
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x2c(%rbp),%rcx
cmpl   $0x1,(%rax,%rcx,4)
jne    1165 <step_three+0x65>
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movl   $0x1,(%rax,%rcx,4)
jmp    116a <step_three+0x6a>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1130 <step_three+0x30>
jmp    117d <step_three+0x7d>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    111d <step_three+0x1d>
movl   $0x0,-0x24(%rbp)
movl   $0x0,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    11d3 <step_three+0xd3>
mov    -0x10(%rbp),%rax
movslq -0x30(%rbp),%rcx
cmpl   $0x1,(%rax,%rcx,4)
jne    11c0 <step_three+0xc0>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    11c5 <step_three+0xc5>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    1199 <step_three+0x99>
mov    -0x24(%rbp),%ecx
mov    $0x1,%al
cmp    -0x4(%rbp),%ecx
mov    %al,-0x31(%rbp)
jge    11f0 <step_three+0xf0>
mov    -0x24(%rbp),%eax
cmp    -0x8(%rbp),%eax
setge  %al
mov    %al,-0x31(%rbp)
mov    -0x31(%rbp),%dl
mov    $0x4,%ecx
mov    $0x7,%eax
test   $0x1,%dl
cmovne %eax,%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<step_three>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    %esi,%r12d
test   %edi,%edi
jle    12af <step_three+0x1af>
mov    %edi,%r9d
lea    (%rdx,%r12,4),%r10
mov    %r12d,%r11d
and    $0xfffffff8,%r11d
mov    %r12,%r14
neg    %r14
lea    0x0(,%r12,4),%r15
and    $0xffffffffffffffe0,%r15
xor    %r13d,%r13d
movdqa 0xec0(%rip),%xmm0
jmp    115d <step_three+0x5d>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
add    $0x1,%r13
cmp    %r9,%r13
je     12af <step_three+0x1af>
test   %esi,%esi
jle    1150 <step_three+0x50>
mov    (%rcx,%r13,8),%rax
cmp    $0x8,%esi
jb     1178 <step_three+0x78>
lea    (%rax,%r12,4),%rbx
cmp    %rdx,%rbx
jbe    11d7 <step_three+0xd7>
cmp    %r10,%rax
jae    11d7 <step_three+0xd7>
xor    %ebp,%ebp
mov    %rbp,%rbx
test   $0x1,%r12b
je     1197 <step_three+0x97>
cmpl   $0x1,(%rax,%rbp,4)
jne    1190 <step_three+0x90>
movl   $0x1,(%rdx,%rbp,4)
mov    %rbp,%rbx
or     $0x1,%rbx
not    %rbp
cmp    %r14,%rbp
jne    11b9 <step_three+0xb9>
jmp    1150 <step_three+0x50>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
add    $0x2,%rbx
cmp    %rbx,%r12
je     1150 <step_three+0x50>
cmpl   $0x1,(%rax,%rbx,4)
jne    11c6 <step_three+0xc6>
movl   $0x1,(%rdx,%rbx,4)
cmpl   $0x1,0x4(%rax,%rbx,4)
jne    11b0 <step_three+0xb0>
movl   $0x1,0x4(%rdx,%rbx,4)
jmp    11b0 <step_three+0xb0>
xor    %ebx,%ebx
jmp    11ed <step_three+0xed>
nopl   0x0(%rax,%rax,1)
add    $0x20,%rbx
cmp    %rbx,%r15
je     129e <step_three+0x19e>
movdqu (%rax,%rbx,1),%xmm2
movdqu 0x10(%rax,%rbx,1),%xmm1
pcmpeqd %xmm0,%xmm2
movd   %xmm2,%ebp
test   $0x1,%bpl
je     120d <step_three+0x10d>
movl   $0x1,(%rdx,%rbx,1)
pextrw $0x2,%xmm2,%ebp
test   $0x1,%bpl
je     1220 <step_three+0x120>
movl   $0x1,0x4(%rdx,%rbx,1)
pextrw $0x4,%xmm2,%ebp
test   $0x1,%bpl
je     1233 <step_three+0x133>
movl   $0x1,0x8(%rdx,%rbx,1)
pextrw $0x6,%xmm2,%ebp
test   $0x1,%bpl
je     1246 <step_three+0x146>
movl   $0x1,0xc(%rdx,%rbx,1)
pcmpeqd %xmm0,%xmm1
movd   %xmm1,%ebp
test   $0x1,%bpl
je     125c <step_three+0x15c>
movl   $0x1,0x10(%rdx,%rbx,1)
pextrw $0x2,%xmm1,%ebp
test   $0x1,%bpl
je     126f <step_three+0x16f>
movl   $0x1,0x14(%rdx,%rbx,1)
pextrw $0x4,%xmm1,%ebp
test   $0x1,%bpl
je     1282 <step_three+0x182>
movl   $0x1,0x18(%rdx,%rbx,1)
pextrw $0x6,%xmm1,%ebp
test   $0x1,%bpl
je     11e0 <step_three+0xe0>
movl   $0x1,0x1c(%rdx,%rbx,1)
jmp    11e0 <step_three+0xe0>
mov    %r11,%rbp
cmp    %r12,%r11
je     1150 <step_three+0x50>
jmp    117a <step_three+0x7a>
test   %esi,%esi
jle    12c1 <step_three+0x1c1>
cmp    $0x8,%esi
jae    12c8 <step_three+0x1c8>
xor    %eax,%eax
xor    %ecx,%ecx
jmp    1390 <step_three+0x290>
xor    %ecx,%ecx
jmp    13a5 <step_three+0x2a5>
mov    %r12d,%eax
and    $0xfffffff8,%eax
lea    -0x8(%rax),%rcx
mov    %rcx,%r9
shr    $0x3,%r9
add    $0x1,%r9
test   %rcx,%rcx
je     13ca <step_three+0x2ca>
mov    %r9,%rcx
and    $0xfffffffffffffffe,%rcx
pxor   %xmm0,%xmm0
xor    %ebx,%ebx
movdqa 0xd05(%rip),%xmm2
pxor   %xmm1,%xmm1
nop
movdqu (%rdx,%rbx,4),%xmm3
movdqu 0x10(%rdx,%rbx,4),%xmm4
movdqu 0x20(%rdx,%rbx,4),%xmm5
movdqu 0x30(%rdx,%rbx,4),%xmm6
pcmpeqd %xmm2,%xmm3
psubd  %xmm3,%xmm0
pcmpeqd %xmm2,%xmm4
psubd  %xmm4,%xmm1
pcmpeqd %xmm2,%xmm5
psubd  %xmm5,%xmm0
pcmpeqd %xmm2,%xmm6
psubd  %xmm6,%xmm1
add    $0x10,%rbx
add    $0xfffffffffffffffe,%rcx
jne    1300 <step_three+0x200>
test   $0x1,%r9b
je     136a <step_three+0x26a>
movdqu (%rdx,%rbx,4),%xmm2
movdqu 0x10(%rdx,%rbx,4),%xmm3
movdqa 0xca6(%rip),%xmm4
pcmpeqd %xmm4,%xmm2
psubd  %xmm2,%xmm0
pcmpeqd %xmm4,%xmm3
psubd  %xmm3,%xmm1
paddd  %xmm1,%xmm0
pshufd $0xee,%xmm0,%xmm1
paddd  %xmm0,%xmm1
pshufd $0x55,%xmm1,%xmm0
paddd  %xmm1,%xmm0
movd   %xmm0,%ecx
cmp    %r12,%rax
je     13a5 <step_three+0x2a5>
nopl   0x0(%rax)
xor    %ebp,%ebp
cmpl   $0x1,(%rdx,%rax,4)
sete   %bpl
add    %ebp,%ecx
add    $0x1,%rax
cmp    %rax,%r12
jne    1390 <step_three+0x290>
xor    %eax,%eax
cmp    %esi,%ecx
setge  %al
lea    (%rax,%rax,2),%eax
or     $0x4,%eax
cmp    %edi,%ecx
mov    $0x7,%ecx
cmovl  %eax,%ecx
mov    %ecx,(%r8)
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
pxor   %xmm0,%xmm0
xor    %ebx,%ebx
pxor   %xmm1,%xmm1
test   $0x1,%r9b
jne    1347 <step_three+0x247>
jmp    136a <step_three+0x26a>

LLVM IR (-O0):
define void @step_three(i32 %0, i32 %1, i32* %2, i32** %3, i32* %4) {
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32*
%9 = alloca i32**
%10 = alloca i32*
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
store i32 %0, i32* %6
store i32 %1, i32* %7
store i32* %2, i32** %8
store i32** %3, i32*** %9
store i32* %4, i32** %10
store i32 0, i32* %12
br label %15
15: ; preds = %45, %5
%16 = load i32, i32* %12
%17 = load i32, i32* %6
%18 = icmp slt i32 %16, %17
br i1 %18, label %19, label %48
19: ; preds = %15
store i32 0, i32* %13
br label %20
20: ; preds = %41, %19
%21 = load i32, i32* %13
%22 = load i32, i32* %7
%23 = icmp slt i32 %21, %22
br i1 %23, label %24, label %44
24: ; preds = %20
%25 = load i32**, i32*** %9
%26 = load i32, i32* %12
%27 = sext i32 %26 to i64
%28 = getelementptr inbounds i32*, i32** %25, i64 %27
%29 = load i32*, i32** %28
%30 = load i32, i32* %13
%31 = sext i32 %30 to i64
%32 = getelementptr inbounds i32, i32* %29, i64 %31
%33 = load i32, i32* %32
%34 = icmp eq i32 %33, 1
br i1 %34, label %35, label %40
35: ; preds = %24
%36 = load i32*, i32** %8
%37 = load i32, i32* %13
%38 = sext i32 %37 to i64
%39 = getelementptr inbounds i32, i32* %36, i64 %38
store i32 1, i32* %39
br label %40
40: ; preds = %35, %24
br label %41
41: ; preds = %40
%42 = load i32, i32* %13
%43 = add nsw i32 %42, 1
store i32 %43, i32* %13
br label %20
44: ; preds = %20
br label %45
45: ; preds = %44
%46 = load i32, i32* %12
%47 = add nsw i32 %46, 1
store i32 %47, i32* %12
br label %15
48: ; preds = %15
store i32 0, i32* %11
store i32 0, i32* %14
br label %49
49: ; preds = %64, %48
%50 = load i32, i32* %14
%51 = load i32, i32* %7
%52 = icmp slt i32 %50, %51
br i1 %52, label %53, label %67
53: ; preds = %49
%54 = load i32*, i32** %8
%55 = load i32, i32* %14
%56 = sext i32 %55 to i64
%57 = getelementptr inbounds i32, i32* %54, i64 %56
%58 = load i32, i32* %57
%59 = icmp eq i32 %58, 1
br i1 %59, label %60, label %63
60: ; preds = %53
%61 = load i32, i32* %11
%62 = add nsw i32 %61, 1
store i32 %62, i32* %11
br label %63
63: ; preds = %60, %53
br label %64
64: ; preds = %63
%65 = load i32, i32* %14
%66 = add nsw i32 %65, 1
store i32 %66, i32* %14
br label %49
67: ; preds = %49
%68 = load i32, i32* %11
%69 = load i32, i32* %6
%70 = icmp sge i32 %68, %69
br i1 %70, label %75, label %71
71: ; preds = %67
%72 = load i32, i32* %11
%73 = load i32, i32* %7
%74 = icmp sge i32 %72, %73
br label %75
75: ; preds = %71, %67
%76 = phi i1 [ true, %67 ], [ %74, %71 ]
%77 = zext i1 %76 to i64
%78 = select i1 %76, i32 7, i32 4
%79 = load i32*, i32** %10
store i32 %78, i32* %79
ret void
}

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