int diagminvych(double *arr, int a, int b) {
  int i, j, str, diagmax;
  str = 0;
  diagmax = (a < b) ? a : b;
  for (int i = 1; i < diagmax; ++i) {
    if (arr[i * a + i] < arr[str * a + str])
      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):
<diagminvych>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
movl   $0x0,-0x1c(%rbp)
mov    -0xc(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    112c <diagminvych+0x2c>
mov    -0xc(%rbp),%eax
mov    %eax,-0x30(%rbp)
jmp    1132 <diagminvych+0x32>
mov    -0x10(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
mov    %eax,-0x20(%rbp)
movl   $0x1,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x20(%rbp),%eax
jge    119a <diagminvych+0x9a>
mov    -0x8(%rbp),%rax
mov    -0x24(%rbp),%ecx
imul   -0xc(%rbp),%ecx
add    -0x24(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x8(%rbp),%rax
mov    -0x1c(%rbp),%ecx
imul   -0xc(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
ucomisd %xmm1,%xmm0
jbe    1187 <diagminvych+0x87>
mov    -0x24(%rbp),%eax
mov    %eax,-0x1c(%rbp)
jmp    118c <diagminvych+0x8c>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    113f <diagminvych+0x3f>
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    1227 <diagminvych+0x127>
mov    -0x28(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jne    11be <diagminvych+0xbe>
jmp    1219 <diagminvych+0x119>
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    1214 <diagminvych+0x114>
mov    -0x8(%rbp),%rax
mov    -0x1c(%rbp),%ecx
imul   -0xc(%rbp),%ecx
add    -0x2c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
imul   -0xc(%rbp),%ecx
add    -0x2c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    11c5 <diagminvych+0xc5>
jmp    1219 <diagminvych+0x119>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    11a1 <diagminvych+0xa1>
xor    %eax,%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<diagminvych>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
cmp    %edx,%esi
mov    %edx,%eax
cmovl  %esi,%eax
xor    %r11d,%r11d
cmp    $0x2,%eax
jl     115d <diagminvych+0x5d>
mov    %eax,%r8d
add    $0xffffffffffffffff,%r8
cmp    $0x2,%eax
jne    1388 <diagminvych+0x288>
xor    %r11d,%r11d
mov    $0x1,%r15d
test   $0x1,%r8b
je     115d <diagminvych+0x5d>
mov    %r15d,%eax
imul   %esi,%eax
cltq
add    %r15,%rax
mov    %r11d,%ebp
imul   %esi,%ebp
add    %r11d,%ebp
movslq %ebp,%rbp
movsd  (%rdi,%rbp,8),%xmm0
ucomisd (%rdi,%rax,8),%xmm0
cmova  %r15d,%r11d
test   %esi,%esi
jle    137b <diagminvych+0x27b>
mov    %r11d,%r9d
imul   %esi,%r11d
movslq %r11d,%r8
mov    %esi,%r11d
mov    %edx,%ecx
lea    (%rdi,%r8,8),%rax
lea    (%r8,%rcx,1),%rsi
lea    (%rdi,%rsi,8),%r12
mov    %ecx,%esi
and    $0xfffffffc,%esi
mov    %rsi,-0x20(%rsp)
add    $0xfffffffffffffffc,%rsi
mov    %rsi,-0x28(%rsp)
mov    %rsi,%rbp
shr    $0x2,%rbp
add    $0x1,%rbp
mov    %rbp,%rsi
mov    %rbp,-0x30(%rsp)
and    $0xfffffffffffffffe,%rbp
mov    %rbp,-0x38(%rsp)
mov    %rcx,%rsi
neg    %rsi
mov    %rsi,-0x8(%rsp)
lea    0x30(%rdi),%rbx
lea    0x0(,%r11,8),%r13
lea    0x8(%rdi),%r15
xor    %r14d,%r14d
mov    %r8,-0x10(%rsp)
mov    %r12,-0x18(%rsp)
jmp    11f3 <diagminvych+0xf3>
nopl   0x0(%rax)
add    $0x1,%r14
add    %r13,%rbx
add    %r13,%r15
cmp    %r11,%r14
je     137b <diagminvych+0x27b>
cmp    %r9,%r14
je     11e0 <diagminvych+0xe0>
test   %edx,%edx
jle    11e0 <diagminvych+0xe0>
mov    %r14,%r10
imul   %r11,%r10
cmp    $0x4,%edx
jb     1222 <diagminvych+0x122>
lea    (%rdi,%r10,8),%rsi
cmp    %r12,%rsi
jae    1293 <diagminvych+0x193>
lea    (%r10,%rcx,1),%rsi
lea    (%rdi,%rsi,8),%rsi
cmp    %rsi,%rax
jae    1293 <diagminvych+0x193>
xor    %ebp,%ebp
mov    %rbp,%rsi
test   $0x1,%cl
je     124b <diagminvych+0x14b>
lea    (%r8,%rbp,1),%rsi
add    %rbp,%r10
movsd  (%rdi,%r10,8),%xmm0
subsd  (%rdi,%rsi,8),%xmm0
movsd  %xmm0,(%rdi,%r10,8)
mov    %rbp,%rsi
or     $0x1,%rsi
not    %rbp
cmp    -0x8(%rsp),%rbp
je     11e0 <diagminvych+0xe0>
cs nopw 0x0(%rax,%rax,1)
nop
movsd  -0x8(%r15,%rsi,8),%xmm0
subsd  (%rax,%rsi,8),%xmm0
movsd  (%r15,%rsi,8),%xmm1
movsd  %xmm0,-0x8(%r15,%rsi,8)
subsd  0x8(%rax,%rsi,8),%xmm1
movsd  %xmm1,(%r15,%rsi,8)
add    $0x2,%rsi
cmp    %rsi,%rcx
jne    1260 <diagminvych+0x160>
jmp    11e0 <diagminvych+0xe0>
cmpq   $0x0,-0x28(%rsp)
je     131d <diagminvych+0x21d>
mov    -0x38(%rsp),%r8
xor    %r12d,%r12d
nopw   0x0(%rax,%rax,1)
movupd (%rax,%r12,8),%xmm0
movupd 0x10(%rax,%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(%rax,%r12,8),%xmm0
subpd  %xmm0,%xmm1
movupd 0x30(%rax,%r12,8),%xmm0
subpd  %xmm0,%xmm3
movupd %xmm1,-0x10(%rbx,%r12,8)
movupd %xmm3,(%rbx,%r12,8)
add    $0x8,%r12
add    $0xfffffffffffffffe,%r8
jne    12b0 <diagminvych+0x1b0>
jmp    1320 <diagminvych+0x220>
xor    %r12d,%r12d
testb  $0x1,-0x30(%rsp)
mov    -0x10(%rsp),%r8
je     1360 <diagminvych+0x260>
lea    (%r12,%r8,1),%rsi
movupd (%rdi,%rsi,8),%xmm0
movupd 0x10(%rdi,%rsi,8),%xmm1
add    %r10,%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),%rsi
mov    %rsi,%rbp
cmp    %rcx,%rsi
mov    -0x18(%rsp),%r12
je     11e0 <diagminvych+0xe0>
jmp    1224 <diagminvych+0x124>
xor    %eax,%eax
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    %r8,%r9
and    $0xfffffffffffffffe,%r9
lea    (%rsi,%rsi,1),%r10d
xor    %r11d,%r11d
mov    $0x1,%r15d
mov    %r10d,%r12d
mov    %esi,%ebp
jmp    13c3 <diagminvych+0x2c3>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
add    $0x2,%r15
add    %r10d,%ebp
add    %r10d,%r12d
cmp    %r9,%r14
je     1132 <diagminvych+0x32>
movslq %ebp,%rax
add    %r15,%rax
mov    %r11d,%ecx
imul   %esi,%ecx
add    %r11d,%ecx
movslq %ecx,%rcx
movsd  (%rdi,%rcx,8),%xmm0
ucomisd (%rdi,%rax,8),%xmm0
mov    %r15d,%ebx
ja     13e7 <diagminvych+0x2e7>
mov    %r11d,%ebx
movslq %r12d,%rcx
add    %r15,%rcx
mov    %ebx,%eax
imul   %esi,%eax
add    %ebx,%eax
cltq
movsd  (%rdi,%rax,8),%xmm0
lea    0x1(%r15),%r14
ucomisd 0x8(%rdi,%rcx,8),%xmm0
mov    %r14d,%r11d
ja     13b0 <diagminvych+0x2b0>
mov    %ebx,%r11d
jmp    13b0 <diagminvych+0x2b0>

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

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