void normalize_data(float *data, int N, int M, int *I, int missing_data) {
  float mean;
  int i, j, sum;
  if (!missing_data) {
    for (j = 0; j < M; j++) {
      mean = 0;
      for (i = 0; i < N; i++) {
        mean += data[i * M + j];
      }
      mean /= N;
      for (i = 0; i < N; i++) {
        data[i * M + j] = (data[i * M + j] - mean);
      }
    }
  } else {
    for (j = 0; j < M; j++) {
      mean = 0;
      sum = 0;
      for (i = 0; i < N; i++) {
        if (I[i * M + j]) {
          mean += data[i * M + j];
          sum++;
        }
      }
      mean /= sum;
      for (i = 0; i < N; i++) {
        if (I[i * M + j]) {
          data[i * M + j] = (data[i * M + j] - mean);
        }
      }
    }
  }
}


x86 assembly (clang, -O0):
<normalize_data>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    %rcx,-0x18(%rbp)
mov    %r8d,-0x1c(%rbp)
cmpl   $0x0,-0x1c(%rbp)
jne    11f9 <normalize_data+0xf9>
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    11f4 <normalize_data+0xf4>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x20(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    117c <normalize_data+0x7c>
mov    -0x8(%rbp),%rax
mov    -0x24(%rbp),%ecx
imul   -0x10(%rbp),%ecx
add    -0x28(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
addss  -0x20(%rbp),%xmm0
movss  %xmm0,-0x20(%rbp)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    1142 <normalize_data+0x42>
cvtsi2ssl -0xc(%rbp),%xmm1
movss  -0x20(%rbp),%xmm0
divss  %xmm1,%xmm0
movss  %xmm0,-0x20(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    11e1 <normalize_data+0xe1>
mov    -0x8(%rbp),%rax
mov    -0x24(%rbp),%ecx
imul   -0x10(%rbp),%ecx
add    -0x28(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
subss  -0x20(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x24(%rbp),%ecx
imul   -0x10(%rbp),%ecx
add    -0x28(%rbp),%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    1196 <normalize_data+0x96>
jmp    11e6 <normalize_data+0xe6>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1127 <normalize_data+0x27>
jmp    1322 <normalize_data+0x222>
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    131d <normalize_data+0x21d>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x20(%rbp)
movl   $0x0,-0x2c(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    1285 <normalize_data+0x185>
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
imul   -0x10(%rbp),%ecx
add    -0x28(%rbp),%ecx
movslq %ecx,%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     1272 <normalize_data+0x172>
mov    -0x8(%rbp),%rax
mov    -0x24(%rbp),%ecx
imul   -0x10(%rbp),%ecx
add    -0x28(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
addss  -0x20(%rbp),%xmm0
movss  %xmm0,-0x20(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1277 <normalize_data+0x177>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    1222 <normalize_data+0x122>
cvtsi2ssl -0x2c(%rbp),%xmm1
movss  -0x20(%rbp),%xmm0
divss  %xmm1,%xmm0
movss  %xmm0,-0x20(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    130a <normalize_data+0x20a>
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
imul   -0x10(%rbp),%ecx
add    -0x28(%rbp),%ecx
movslq %ecx,%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     12f7 <normalize_data+0x1f7>
mov    -0x8(%rbp),%rax
mov    -0x24(%rbp),%ecx
imul   -0x10(%rbp),%ecx
add    -0x28(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
subss  -0x20(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x24(%rbp),%ecx
imul   -0x10(%rbp),%ecx
add    -0x28(%rbp),%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
jmp    12fc <normalize_data+0x1fc>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    129f <normalize_data+0x19f>
jmp    130f <normalize_data+0x20f>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1200 <normalize_data+0x100>
jmp    1322 <normalize_data+0x222>
pop    %rbp
ret

x86 assembly (clang, -O2):
<normalize_data>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    %rcx,-0x8(%rsp)
mov    %rdi,-0x10(%rsp)
test   %r8d,%r8d
je     1296 <normalize_data+0x196>
test   %edx,%edx
jle    1413 <normalize_data+0x313>
mov    %edx,%r10d
mov    %esi,%r9d
lea    -0x1(%r9),%rcx
mov    %r9d,%r11d
and    $0xfffffffe,%r11d
mov    -0x10(%rsp),%r13
lea    0x0(,%r10,4),%r12
add    %r13,%r12
lea    0x0(,%r10,8),%r15
mov    -0x8(%rsp),%rax
lea    (%rax,%r10,4),%rbx
xor    %r14d,%r14d
jmp    117d <normalize_data+0x7d>
nopl   0x0(%rax)
add    $0x1,%r14
add    $0x4,%r12
add    $0x4,%rbx
add    $0x4,%rax
add    $0x4,%r13
cmp    %r10,%r14
je     1413 <normalize_data+0x313>
test   %esi,%esi
jle    1160 <normalize_data+0x60>
xorps  %xmm0,%xmm0
test   %rcx,%rcx
je     11d0 <normalize_data+0xd0>
xor    %r8d,%r8d
xor    %edx,%edx
xor    %ebp,%ebp
jmp    11ac <normalize_data+0xac>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
add    $0x2,%rdx
add    %r15,%r8
cmp    %rdx,%r11
je     11d4 <normalize_data+0xd4>
cmpl   $0x0,(%rax,%r8,1)
je     11bd <normalize_data+0xbd>
addss  0x0(%r13,%r8,1),%xmm0
add    $0x1,%ebp
cmpl   $0x0,(%rbx,%r8,1)
je     11a0 <normalize_data+0xa0>
addss  (%r12,%r8,1),%xmm0
add    $0x1,%ebp
jmp    11a0 <normalize_data+0xa0>
nop
xor    %edx,%edx
xor    %ebp,%ebp
test   $0x1,%r9b
je     11f9 <normalize_data+0xf9>
imul   %r10,%rdx
add    %r14,%rdx
mov    -0x8(%rsp),%rdi
cmpl   $0x0,(%rdi,%rdx,4)
je     11f9 <normalize_data+0xf9>
mov    -0x10(%rsp),%rdi
addss  (%rdi,%rdx,4),%xmm0
add    $0x1,%ebp
test   %esi,%esi
jle    1160 <normalize_data+0x60>
xorps  %xmm1,%xmm1
cvtsi2ss %ebp,%xmm1
divss  %xmm1,%xmm0
test   %rcx,%rcx
je     125c <normalize_data+0x15c>
xor    %ebp,%ebp
xor    %edx,%edx
jmp    122c <normalize_data+0x12c>
nopw   0x0(%rax,%rax,1)
add    $0x2,%rdx
add    %r15,%rbp
cmp    %rdx,%r11
je     125e <normalize_data+0x15e>
cmpl   $0x0,(%rax,%rbp,1)
je     1244 <normalize_data+0x144>
movss  0x0(%r13,%rbp,1),%xmm1
subss  %xmm0,%xmm1
movss  %xmm1,0x0(%r13,%rbp,1)
cmpl   $0x0,(%rbx,%rbp,1)
je     1220 <normalize_data+0x120>
movss  (%r12,%rbp,1),%xmm1
subss  %xmm0,%xmm1
movss  %xmm1,(%r12,%rbp,1)
jmp    1220 <normalize_data+0x120>
xor    %edx,%edx
test   $0x1,%r9b
je     1160 <normalize_data+0x60>
imul   %r10,%rdx
add    %r14,%rdx
mov    -0x8(%rsp),%rdi
cmpl   $0x0,(%rdi,%rdx,4)
je     1160 <normalize_data+0x60>
mov    -0x10(%rsp),%rdi
movss  (%rdi,%rdx,4),%xmm1
subss  %xmm0,%xmm1
movss  %xmm1,(%rdi,%rdx,4)
jmp    1160 <normalize_data+0x60>
test   %edx,%edx
jle    1413 <normalize_data+0x313>
cvtsi2ss %esi,%xmm0
mov    %edx,%eax
mov    %esi,%r8d
lea    -0x1(%r8),%r9
mov    %r8d,%r10d
and    $0x3,%r10d
mov    %r8d,%r14d
and    $0xfffffffc,%r14d
mov    %r8d,%r11d
and    $0xfffffffe,%r11d
mov    %rax,%rcx
shl    $0x4,%rcx
lea    0x0(,%rax,4),%rdx
lea    (%rdx,%rdx,2),%rbx
lea    0x0(,%rax,8),%r15
xor    %r12d,%r12d
mov    -0x10(%rsp),%r13
jmp    1301 <normalize_data+0x201>
cs nopw 0x0(%rax,%rax,1)
nop
add    $0x1,%r12
add    $0x4,%r13
cmp    %rax,%r12
je     1413 <normalize_data+0x313>
test   %esi,%esi
jle    12f0 <normalize_data+0x1f0>
xorps  %xmm1,%xmm1
cmp    $0x3,%r9
jae    1320 <normalize_data+0x220>
xor    %edi,%edi
jmp    1353 <normalize_data+0x253>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    %r13,%rbp
xor    %edi,%edi
cs nopw 0x0(%rax,%rax,1)
nop
addss  0x0(%rbp),%xmm1
addss  0x0(%rbp,%rax,4),%xmm1
addss  0x0(%rbp,%rax,8),%xmm1
addss  0x0(%rbp,%rbx,1),%xmm1
add    $0x4,%rdi
add    %rcx,%rbp
cmp    %rdi,%r14
jne    1330 <normalize_data+0x230>
test   %r10,%r10
je     138d <normalize_data+0x28d>
imul   %rax,%rdi
add    %r12,%rdi
mov    -0x10(%rsp),%rbp
lea    0x0(,%rdi,4),%rdi
add    %rbp,%rdi
mov    %r10,%rbp
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
addss  (%rdi),%xmm1
add    %rdx,%rdi
add    $0xffffffffffffffff,%rbp
jne    1380 <normalize_data+0x280>
test   %esi,%esi
jle    12f0 <normalize_data+0x1f0>
divss  %xmm0,%xmm1
test   %r9,%r9
je     13e6 <normalize_data+0x2e6>
mov    %r13,%rbp
xor    %edi,%edi
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movss  0x0(%rbp),%xmm2
subss  %xmm1,%xmm2
movss  %xmm2,0x0(%rbp)
movss  0x0(%rbp,%rdx,1),%xmm2
subss  %xmm1,%xmm2
movss  %xmm2,0x0(%rbp,%rdx,1)
add    $0x2,%rdi
add    %r15,%rbp
cmp    %rdi,%r11
jne    13b0 <normalize_data+0x2b0>
test   $0x1,%r8b
je     12f0 <normalize_data+0x1f0>
jmp    13f2 <normalize_data+0x2f2>
xor    %edi,%edi
test   $0x1,%r8b
je     12f0 <normalize_data+0x1f0>
imul   %rax,%rdi
add    %r12,%rdi
mov    -0x10(%rsp),%rbp
movss  0x0(%rbp,%rdi,4),%xmm2
subss  %xmm1,%xmm2
movss  %xmm2,0x0(%rbp,%rdi,4)
jmp    12f0 <normalize_data+0x1f0>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @normalize_data(float* %0, i32 %1, i32 %2, i32* %3, i32 %4) {
%6 = alloca float*
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32*
%10 = alloca i32
%11 = alloca float
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
store float* %0, float** %6
store i32 %1, i32* %7
store i32 %2, i32* %8
store i32* %3, i32** %9
store i32 %4, i32* %10
%15 = load i32, i32* %10
%16 = icmp ne i32 %15, 0
br i1 %16, label %79, label %17
17: ; preds = %5
store i32 0, i32* %13
br label %18
18: ; preds = %75, %17
%19 = load i32, i32* %13
%20 = load i32, i32* %8
%21 = icmp slt i32 %19, %20
br i1 %21, label %22, label %78
22: ; preds = %18
store float 0.000000e+00, float* %11
store i32 0, i32* %12
br label %23
23: ; preds = %39, %22
%24 = load i32, i32* %12
%25 = load i32, i32* %7
%26 = icmp slt i32 %24, %25
br i1 %26, label %27, label %42
27: ; preds = %23
%28 = load float*, float** %6
%29 = load i32, i32* %12
%30 = load i32, i32* %8
%31 = mul nsw i32 %29, %30
%32 = load i32, i32* %13
%33 = add nsw i32 %31, %32
%34 = sext i32 %33 to i64
%35 = getelementptr inbounds float, float* %28, i64 %34
%36 = load float, float* %35
%37 = load float, float* %11
%38 = fadd float %37, %36
store float %38, float* %11
br label %39
39: ; preds = %27
%40 = load i32, i32* %12
%41 = add nsw i32 %40, 1
store i32 %41, i32* %12
br label %23
42: ; preds = %23
%43 = load i32, i32* %7
%44 = sitofp i32 %43 to float
%45 = load float, float* %11
%46 = fdiv float %45, %44
store float %46, float* %11
store i32 0, i32* %12
br label %47
47: ; preds = %71, %42
%48 = load i32, i32* %12
%49 = load i32, i32* %7
%50 = icmp slt i32 %48, %49
br i1 %50, label %51, label %74
51: ; preds = %47
%52 = load float*, float** %6
%53 = load i32, i32* %12
%54 = load i32, i32* %8
%55 = mul nsw i32 %53, %54
%56 = load i32, i32* %13
%57 = add nsw i32 %55, %56
%58 = sext i32 %57 to i64
%59 = getelementptr inbounds float, float* %52, i64 %58
%60 = load float, float* %59
%61 = load float, float* %11
%62 = fsub float %60, %61
%63 = load float*, float** %6
%64 = load i32, i32* %12
%65 = load i32, i32* %8
%66 = mul nsw i32 %64, %65
%67 = load i32, i32* %13
%68 = add nsw i32 %66, %67
%69 = sext i32 %68 to i64
%70 = getelementptr inbounds float, float* %63, i64 %69
store float %62, float* %70
br label %71
71: ; preds = %51
%72 = load i32, i32* %12
%73 = add nsw i32 %72, 1
store i32 %73, i32* %12
br label %47
74: ; preds = %47
br label %75
75: ; preds = %74
%76 = load i32, i32* %13
%77 = add nsw i32 %76, 1
store i32 %77, i32* %13
br label %18
78: ; preds = %18
br label %167
79: ; preds = %5
store i32 0, i32* %13
br label %80
80: ; preds = %163, %79
%81 = load i32, i32* %13
%82 = load i32, i32* %8
%83 = icmp slt i32 %81, %82
br i1 %83, label %84, label %166
84: ; preds = %80
store float 0.000000e+00, float* %11
store i32 0, i32* %14
store i32 0, i32* %12
br label %85
85: ; preds = %115, %84
%86 = load i32, i32* %12
%87 = load i32, i32* %7
%88 = icmp slt i32 %86, %87
br i1 %88, label %89, label %118
89: ; preds = %85
%90 = load i32*, i32** %9
%91 = load i32, i32* %12
%92 = load i32, i32* %8
%93 = mul nsw i32 %91, %92
%94 = load i32, i32* %13
%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 %114
100: ; preds = %89
%101 = load float*, float** %6
%102 = load i32, i32* %12
%103 = load i32, i32* %8
%104 = mul nsw i32 %102, %103
%105 = load i32, i32* %13
%106 = add nsw i32 %104, %105
%107 = sext i32 %106 to i64
%108 = getelementptr inbounds float, float* %101, i64 %107
%109 = load float, float* %108
%110 = load float, float* %11
%111 = fadd float %110, %109
store float %111, float* %11
%112 = load i32, i32* %14
%113 = add nsw i32 %112, 1
store i32 %113, i32* %14
br label %114
114: ; preds = %100, %89
br label %115
115: ; preds = %114
%116 = load i32, i32* %12
%117 = add nsw i32 %116, 1
store i32 %117, i32* %12
br label %85
118: ; preds = %85
%119 = load i32, i32* %14
%120 = sitofp i32 %119 to float
%121 = load float, float* %11
%122 = fdiv float %121, %120
store float %122, float* %11
store i32 0, i32* %12
br label %123
123: ; preds = %159, %118
%124 = load i32, i32* %12
%125 = load i32, i32* %7
%126 = icmp slt i32 %124, %125
br i1 %126, label %127, label %162
127: ; preds = %123
%128 = load i32*, i32** %9
%129 = load i32, i32* %12
%130 = load i32, i32* %8
%131 = mul nsw i32 %129, %130
%132 = load i32, i32* %13
%133 = add nsw i32 %131, %132
%134 = sext i32 %133 to i64
%135 = getelementptr inbounds i32, i32* %128, i64 %134
%136 = load i32, i32* %135
%137 = icmp ne i32 %136, 0
br i1 %137, label %138, label %158
138: ; preds = %127
%139 = load float*, float** %6
%140 = load i32, i32* %12
%141 = load i32, i32* %8
%142 = mul nsw i32 %140, %141
%143 = load i32, i32* %13
%144 = add nsw i32 %142, %143
%145 = sext i32 %144 to i64
%146 = getelementptr inbounds float, float* %139, i64 %145
%147 = load float, float* %146
%148 = load float, float* %11
%149 = fsub float %147, %148
%150 = load float*, float** %6
%151 = load i32, i32* %12
%152 = load i32, i32* %8
%153 = mul nsw i32 %151, %152
%154 = load i32, i32* %13
%155 = add nsw i32 %153, %154
%156 = sext i32 %155 to i64
%157 = getelementptr inbounds float, float* %150, i64 %156
store float %149, float* %157
br label %158
158: ; preds = %138, %127
br label %159
159: ; preds = %158
%160 = load i32, i32* %12
%161 = add nsw i32 %160, 1
store i32 %161, i32* %12
br label %123
162: ; preds = %123
br label %163
163: ; preds = %162
%164 = load i32, i32* %13
%165 = add nsw i32 %164, 1
store i32 %165, i32* %13
br label %80
166: ; preds = %80
br label %167
167: ; preds = %166, %78
ret void
}

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