int strmaxsumvych(double *arr, int a, int b) {
  int i, j, str;
  double sum, max;
  max = 0;
  str = 0;
  for (int i = 0; i < b; ++i) {
    max += arr[i];
  }
  for (i = 1; i < a; ++i) {
    sum = 0;
    for (j = 0; j < b; ++j) {
      sum += arr[i * a + j];
    }
    if (max < sum) {
      max = sum;
      str = i;
    }
  }
  for (int i = 0; i < a; ++i) {
    if (i == str)
      continue;
    for (int j = 0; j < b; ++j) {
      arr[i * a + j] -= arr[str * a + j];
    }
  }
  return 0;
}


x86 assembly (clang, -O0):
<strmaxsumvych>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x30(%rbp)
movl   $0x0,-0x1c(%rbp)
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    1155 <strmaxsumvych+0x55>
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
addsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1124 <strmaxsumvych+0x24>
movl   $0x1,-0x14(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    11e8 <strmaxsumvych+0xe8>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x28(%rbp)
movl   $0x0,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    11b1 <strmaxsumvych+0xb1>
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
imul   -0xc(%rbp),%ecx
add    -0x18(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
addsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1177 <strmaxsumvych+0x77>
movsd  -0x30(%rbp),%xmm1
movsd  -0x28(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    11d5 <strmaxsumvych+0xd5>
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x14(%rbp),%eax
mov    %eax,-0x1c(%rbp)
jmp    11da <strmaxsumvych+0xda>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    115c <strmaxsumvych+0x5c>
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    1275 <strmaxsumvych+0x175>
mov    -0x38(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jne    120c <strmaxsumvych+0x10c>
jmp    1267 <strmaxsumvych+0x167>
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    1262 <strmaxsumvych+0x162>
mov    -0x8(%rbp),%rax
mov    -0x1c(%rbp),%ecx
imul   -0xc(%rbp),%ecx
add    -0x3c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x8(%rbp),%rax
mov    -0x38(%rbp),%ecx
imul   -0xc(%rbp),%ecx
add    -0x3c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    1213 <strmaxsumvych+0x113>
jmp    1267 <strmaxsumvych+0x167>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    11ef <strmaxsumvych+0xef>
xor    %eax,%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<strmaxsumvych>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    %edx,%r11d
test   %edx,%edx
jle    1129 <strmaxsumvych+0x29>
lea    -0x1(%r11),%rcx
mov    %r11d,%eax
and    $0x7,%eax
cmp    $0x7,%rcx
jae    112f <strmaxsumvych+0x2f>
xorpd  %xmm0,%xmm0
xor    %ecx,%ecx
jmp    1178 <strmaxsumvych+0x78>
xorpd  %xmm0,%xmm0
jmp    119e <strmaxsumvych+0x9e>
mov    %r11d,%ebp
and    $0xfffffff8,%ebp
xorpd  %xmm0,%xmm0
xor    %ecx,%ecx
nopl   0x0(%rax,%rax,1)
addsd  (%rdi,%rcx,8),%xmm0
addsd  0x8(%rdi,%rcx,8),%xmm0
addsd  0x10(%rdi,%rcx,8),%xmm0
addsd  0x18(%rdi,%rcx,8),%xmm0
addsd  0x20(%rdi,%rcx,8),%xmm0
addsd  0x28(%rdi,%rcx,8),%xmm0
addsd  0x30(%rdi,%rcx,8),%xmm0
addsd  0x38(%rdi,%rcx,8),%xmm0
add    $0x8,%rcx
cmp    %rcx,%rbp
jne    1140 <strmaxsumvych+0x40>
test   %rax,%rax
je     119e <strmaxsumvych+0x9e>
lea    (%rdi,%rcx,8),%rcx
xor    %ebp,%ebp
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
addsd  (%rcx,%rbp,8),%xmm0
add    $0x1,%rbp
cmp    %rbp,%rax
jne    1190 <strmaxsumvych+0x90>
xor    %r14d,%r14d
mov    %esi,%r10d
cmp    $0x2,%esi
jl     1251 <strmaxsumvych+0x151>
lea    -0x1(%r11),%r8
mov    %r11d,%eax
and    $0x3,%eax
mov    %r11d,%r13d
and    $0xfffffffc,%r13d
lea    (%rdi,%r10,8),%rcx
add    $0x18,%rcx
lea    0x0(,%r10,8),%r9
xor    %r14d,%r14d
mov    $0x1,%r12d
mov    %r10,%r15
jmp    11ff <strmaxsumvych+0xff>
nopl   0x0(%rax)
ucomisd %xmm0,%xmm1
cmova  %r12d,%r14d
maxsd  %xmm0,%xmm1
add    $0x1,%r12
add    %r9,%rcx
add    %r10,%r15
movapd %xmm1,%xmm0
cmp    %r10,%r12
je     1251 <strmaxsumvych+0x151>
xorpd  %xmm1,%xmm1
test   %edx,%edx
jle    11e0 <strmaxsumvych+0xe0>
xor    %ebp,%ebp
cmp    $0x3,%r8
jb     1230 <strmaxsumvych+0x130>
nop
addsd  -0x18(%rcx,%rbp,8),%xmm1
addsd  -0x10(%rcx,%rbp,8),%xmm1
addsd  -0x8(%rcx,%rbp,8),%xmm1
addsd  (%rcx,%rbp,8),%xmm1
add    $0x4,%rbp
cmp    %rbp,%r13
jne    1210 <strmaxsumvych+0x110>
test   %rax,%rax
je     11e0 <strmaxsumvych+0xe0>
add    %r15,%rbp
lea    (%rdi,%rbp,8),%rbp
xor    %ebx,%ebx
xchg   %ax,%ax
addsd  0x0(%rbp,%rbx,8),%xmm1
add    $0x1,%rbx
cmp    %rbx,%rax
jne    1240 <strmaxsumvych+0x140>
jmp    11e0 <strmaxsumvych+0xe0>
test   %esi,%esi
jle    145b <strmaxsumvych+0x35b>
imul   %r14d,%esi
movslq %esi,%r8
mov    %r14d,%r9d
lea    (%rdi,%r8,8),%rsi
lea    (%r8,%r11,1),%rax
lea    (%rdi,%rax,8),%r12
mov    %r11d,%eax
and    $0xfffffffc,%eax
mov    %rax,-0x20(%rsp)
add    $0xfffffffffffffffc,%rax
mov    %rax,-0x28(%rsp)
mov    %rax,%rcx
shr    $0x2,%rcx
add    $0x1,%rcx
mov    %rcx,%rax
mov    %rcx,-0x30(%rsp)
and    $0xfffffffffffffffe,%rcx
mov    %rcx,-0x38(%rsp)
mov    %r11,%rax
neg    %rax
mov    %rax,-0x8(%rsp)
lea    0x30(%rdi),%rbx
lea    0x0(,%r10,8),%r13
lea    0x8(%rdi),%r15
xor    %r14d,%r14d
mov    %r8,-0x10(%rsp)
mov    %r12,-0x18(%rsp)
jmp    12e3 <strmaxsumvych+0x1e3>
nopl   0x0(%rax)
add    $0x1,%r14
add    %r13,%rbx
add    %r13,%r15
cmp    %r10,%r14
je     145b <strmaxsumvych+0x35b>
cmp    %r9,%r14
je     12d0 <strmaxsumvych+0x1d0>
test   %edx,%edx
jle    12d0 <strmaxsumvych+0x1d0>
mov    %r14,%rcx
imul   %r10,%rcx
cmp    $0x4,%edx
jb     130e <strmaxsumvych+0x20e>
lea    (%rdi,%rcx,8),%rax
cmp    %r12,%rax
jae    1373 <strmaxsumvych+0x273>
lea    (%rcx,%r11,1),%rax
lea    (%rdi,%rax,8),%rax
cmp    %rax,%rsi
jae    1373 <strmaxsumvych+0x273>
xor    %ebp,%ebp
mov    %rbp,%rax
test   $0x1,%r11b
je     1336 <strmaxsumvych+0x236>
lea    (%r8,%rbp,1),%rax
add    %rbp,%rcx
movsd  (%rdi,%rcx,8),%xmm0
subsd  (%rdi,%rax,8),%xmm0
movsd  %xmm0,(%rdi,%rcx,8)
mov    %rbp,%rax
or     $0x1,%rax
not    %rbp
cmp    -0x8(%rsp),%rbp
je     12d0 <strmaxsumvych+0x1d0>
movsd  -0x8(%r15,%rax,8),%xmm0
subsd  (%rsi,%rax,8),%xmm0
movsd  (%r15,%rax,8),%xmm1
movsd  %xmm0,-0x8(%r15,%rax,8)
subsd  0x8(%rsi,%rax,8),%xmm1
movsd  %xmm1,(%r15,%rax,8)
add    $0x2,%rax
cmp    %rax,%r11
jne    1340 <strmaxsumvych+0x240>
jmp    12d0 <strmaxsumvych+0x1d0>
cmpq   $0x0,-0x28(%rsp)
je     13fd <strmaxsumvych+0x2fd>
mov    -0x38(%rsp),%r8
xor    %r12d,%r12d
nopw   0x0(%rax,%rax,1)
movupd (%rsi,%r12,8),%xmm0
movupd 0x10(%rsi,%r12,8),%xmm1
movupd -0x30(%rbx,%r12,8),%xmm2
subpd  %xmm0,%xmm2
movupd -0x20(%rbx,%r12,8),%xmm0
subpd  %xmm1,%xmm0
movupd -0x10(%rbx,%r12,8),%xmm1
movupd (%rbx,%r12,8),%xmm3
movupd %xmm2,-0x30(%rbx,%r12,8)
movupd %xmm0,-0x20(%rbx,%r12,8)
movupd 0x20(%rsi,%r12,8),%xmm0
subpd  %xmm0,%xmm1
movupd 0x30(%rsi,%r12,8),%xmm0
subpd  %xmm0,%xmm3
movupd %xmm1,-0x10(%rbx,%r12,8)
movupd %xmm3,(%rbx,%r12,8)
add    $0x8,%r12
add    $0xfffffffffffffffe,%r8
jne    1390 <strmaxsumvych+0x290>
jmp    1400 <strmaxsumvych+0x300>
xor    %r12d,%r12d
testb  $0x1,-0x30(%rsp)
mov    -0x10(%rsp),%r8
je     1440 <strmaxsumvych+0x340>
lea    (%r12,%r8,1),%rax
movupd (%rdi,%rax,8),%xmm0
movupd 0x10(%rdi,%rax,8),%xmm1
add    %rcx,%r12
movupd (%rdi,%r12,8),%xmm2
subpd  %xmm0,%xmm2
movupd 0x10(%rdi,%r12,8),%xmm0
subpd  %xmm1,%xmm0
movupd %xmm2,(%rdi,%r12,8)
movupd %xmm0,0x10(%rdi,%r12,8)
mov    -0x20(%rsp),%rax
mov    %rax,%rbp
cmp    %r11,%rax
mov    -0x18(%rsp),%r12
je     12d0 <strmaxsumvych+0x1d0>
jmp    1310 <strmaxsumvych+0x210>
xor    %eax,%eax
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define i32 @strmaxsumvych(double* %0, i32 %1, i32 %2) {
%4 = alloca double*
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca double
%11 = alloca double
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
store double* %0, double** %4
store i32 %1, i32* %5
store i32 %2, i32* %6
store double 0.000000e+00, double* %11
store i32 0, i32* %9
store i32 0, i32* %12
br label %15
15: ; preds = %27, %3
%16 = load i32, i32* %12
%17 = load i32, i32* %6
%18 = icmp slt i32 %16, %17
br i1 %18, label %19, label %30
19: ; preds = %15
%20 = load double*, double** %4
%21 = load i32, i32* %12
%22 = sext i32 %21 to i64
%23 = getelementptr inbounds double, double* %20, i64 %22
%24 = load double, double* %23
%25 = load double, double* %11
%26 = fadd double %25, %24
store double %26, double* %11
br label %27
27: ; preds = %19
%28 = load i32, i32* %12
%29 = add nsw i32 %28, 1
store i32 %29, i32* %12
br label %15
30: ; preds = %15
store i32 1, i32* %7
br label %31
31: ; preds = %63, %30
%32 = load i32, i32* %7
%33 = load i32, i32* %5
%34 = icmp slt i32 %32, %33
br i1 %34, label %35, label %66
35: ; preds = %31
store double 0.000000e+00, double* %10
store i32 0, i32* %8
br label %36
36: ; preds = %52, %35
%37 = load i32, i32* %8
%38 = load i32, i32* %6
%39 = icmp slt i32 %37, %38
br i1 %39, label %40, label %55
40: ; preds = %36
%41 = load double*, double** %4
%42 = load i32, i32* %7
%43 = load i32, i32* %5
%44 = mul nsw i32 %42, %43
%45 = load i32, i32* %8
%46 = add nsw i32 %44, %45
%47 = sext i32 %46 to i64
%48 = getelementptr inbounds double, double* %41, i64 %47
%49 = load double, double* %48
%50 = load double, double* %10
%51 = fadd double %50, %49
store double %51, double* %10
br label %52
52: ; preds = %40
%53 = load i32, i32* %8
%54 = add nsw i32 %53, 1
store i32 %54, i32* %8
br label %36
55: ; preds = %36
%56 = load double, double* %11
%57 = load double, double* %10
%58 = fcmp olt double %56, %57
br i1 %58, label %59, label %62
59: ; preds = %55
%60 = load double, double* %10
store double %60, double* %11
%61 = load i32, i32* %7
store i32 %61, i32* %9
br label %62
62: ; preds = %59, %55
br label %63
63: ; preds = %62
%64 = load i32, i32* %7
%65 = add nsw i32 %64, 1
store i32 %65, i32* %7
br label %31
66: ; preds = %31
store i32 0, i32* %13
br label %67
67: ; preds = %105, %66
%68 = load i32, i32* %13
%69 = load i32, i32* %5
%70 = icmp slt i32 %68, %69
br i1 %70, label %71, label %108
71: ; preds = %67
%72 = load i32, i32* %13
%73 = load i32, i32* %9
%74 = icmp eq i32 %72, %73
br i1 %74, label %75, label %76
75: ; preds = %71
br label %105
76: ; preds = %71
store i32 0, i32* %14
br label %77
77: ; preds = %101, %76
%78 = load i32, i32* %14
%79 = load i32, i32* %6
%80 = icmp slt i32 %78, %79
br i1 %80, label %81, label %104
81: ; preds = %77
%82 = load double*, double** %4
%83 = load i32, i32* %9
%84 = load i32, i32* %5
%85 = mul nsw i32 %83, %84
%86 = load i32, i32* %14
%87 = add nsw i32 %85, %86
%88 = sext i32 %87 to i64
%89 = getelementptr inbounds double, double* %82, i64 %88
%90 = load double, double* %89
%91 = load double*, double** %4
%92 = load i32, i32* %13
%93 = load i32, i32* %5
%94 = mul nsw i32 %92, %93
%95 = load i32, i32* %14
%96 = add nsw i32 %94, %95
%97 = sext i32 %96 to i64
%98 = getelementptr inbounds double, double* %91, i64 %97
%99 = load double, double* %98
%100 = fsub double %99, %90
store double %100, double* %98
br label %101
101: ; preds = %81
%102 = load i32, i32* %14
%103 = add nsw i32 %102, 1
store i32 %103, i32* %14
br label %77
104: ; preds = %77
br label %105
105: ; preds = %104, %75
%106 = load i32, i32* %13
%107 = add nsw i32 %106, 1
store i32 %107, i32* %13
br label %67
108: ; preds = %67
ret i32 0
}

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