void Mrhor(double *C, int neq, int *ia, int *iz, double *r, double *rho) {
  int i = 0, j = 0, jlo = 0, jup = 0;
  double s = 0.0;
  rho[0] = r[0];
  for (i = 1; i < neq; i++) {
    s = 0.0;
    jlo = iz[i - 1] + 1;
    jup = iz[i];
    for (j = jlo; j < jup; j++)
      s += C[j] * rho[ia[j]];
    rho[i] = (r[i] - s) / C[jup];
  }
  for (i = neq - 1; i > 0; i--) {
    rho[i] /= C[iz[i]];
    jlo = iz[i - 1] + 1;
    jup = iz[i] - 1;
    for (j = jlo; j <= jup; j++)
      rho[ia[j]] -= C[j] * rho[i];
  }
  return;
}


x86 assembly (clang, -O0):
<Mrhor>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
movl   $0x0,-0x34(%rbp)
movl   $0x0,-0x38(%rbp)
movl   $0x0,-0x3c(%rbp)
movl   $0x0,-0x40(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
movl   $0x1,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    121c <Mrhor+0x11c>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x20(%rbp),%rax
mov    -0x34(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x40(%rbp)
mov    -0x3c(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x40(%rbp),%eax
jge    11e2 <Mrhor+0xe2>
mov    -0x8(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x30(%rbp),%rax
mov    -0x18(%rbp),%rcx
movslq -0x38(%rbp),%rdx
movslq (%rcx,%rdx,4),%rcx
movsd  (%rax,%rcx,8),%xmm2
movsd  -0x48(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    1194 <Mrhor+0x94>
mov    -0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
subsd  -0x48(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x40(%rbp),%rcx
divsd  (%rax,%rcx,8),%xmm0
mov    -0x30(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1156 <Mrhor+0x56>
mov    -0xc(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x34(%rbp)
cmpl   $0x0,-0x34(%rbp)
jle    1307 <Mrhor+0x207>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%rcx
movslq -0x34(%rbp),%rdx
movslq (%rcx,%rdx,4),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x30(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%rax
mov    -0x34(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
sub    $0x1,%eax
mov    %eax,-0x40(%rbp)
mov    -0x3c(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x40(%rbp),%eax
jg     12f4 <Mrhor+0x1f4>
mov    -0x8(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x30(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x30(%rbp),%rax
mov    -0x18(%rbp),%rcx
movslq -0x38(%rbp),%rdx
movslq (%rcx,%rdx,4),%rcx
movsd  (%rax,%rcx,8),%xmm1
movq   %xmm0,%rdx
movabs $0x8000000000000000,%rsi
xor    %rsi,%rdx
movq   %rdx,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    1287 <Mrhor+0x187>
jmp    12f9 <Mrhor+0x1f9>
mov    -0x34(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x34(%rbp)
jmp    1225 <Mrhor+0x125>
pop    %rbp
ret

x86 assembly (clang, -O2):
<Mrhor>:
push   %rbp
push   %r15
push   %r14
push   %rbx
movsd  (%r8),%xmm0
movsd  %xmm0,(%r9)
cmp    $0x2,%esi
jl     1225 <Mrhor+0x125>
mov    %esi,%r10d
mov    (%rcx),%r14d
mov    $0x1,%r11d
jmp    1155 <Mrhor+0x55>
nopw   0x0(%rax,%rax,1)
movslq %r14d,%rax
movsd  (%r8,%r11,8),%xmm1
subsd  %xmm0,%xmm1
divsd  (%rdi,%rax,8),%xmm1
movsd  %xmm1,(%r9,%r11,8)
add    $0x1,%r11
cmp    %r10,%r11
je     1220 <Mrhor+0x120>
mov    %r14d,%eax
mov    (%rcx,%r11,4),%r14d
lea    0x1(%rax),%ebx
xorpd  %xmm0,%xmm0
cmp    %r14d,%ebx
jge    1130 <Mrhor+0x30>
movslq %ebx,%rbx
mov    %r14d,%r15d
sub    %eax,%r15d
not    %eax
add    %r14d,%eax
add    $0xfffffffe,%r15d
xorpd  %xmm0,%xmm0
and    $0x3,%eax
je     11ac <Mrhor+0xac>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movsd  (%rdi,%rbx,8),%xmm1
movslq (%rdx,%rbx,4),%rbp
mulsd  (%r9,%rbp,8),%xmm1
addsd  %xmm1,%xmm0
add    $0x1,%rbx
add    $0xffffffff,%eax
jne    1190 <Mrhor+0x90>
cmp    $0x3,%r15d
jb     1130 <Mrhor+0x30>
cs nopw 0x0(%rax,%rax,1)
movslq (%rdx,%rbx,4),%rax
movsd  (%rdi,%rbx,8),%xmm1
movsd  0x8(%rdi,%rbx,8),%xmm2
mulsd  (%r9,%rax,8),%xmm1
addsd  %xmm0,%xmm1
movslq 0x4(%rdx,%rbx,4),%rax
mulsd  (%r9,%rax,8),%xmm2
addsd  %xmm1,%xmm2
movsd  0x10(%rdi,%rbx,8),%xmm1
movslq 0x8(%rdx,%rbx,4),%rax
mulsd  (%r9,%rax,8),%xmm1
movsd  0x18(%rdi,%rbx,8),%xmm0
movslq 0xc(%rdx,%rbx,4),%rax
mulsd  (%r9,%rax,8),%xmm0
addsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
add    $0x4,%rbx
cmp    %ebx,%r14d
jne    11c0 <Mrhor+0xc0>
jmp    1130 <Mrhor+0x30>
cmp    $0x2,%esi
jge    1236 <Mrhor+0x136>
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret
nopl   0x0(%rax)
cmp    $0x3,%r8
jl     1225 <Mrhor+0x125>
mov    %r10,%r8
add    $0xffffffffffffffff,%r10
mov    %r10d,%esi
movslq (%rcx,%rsi,4),%rax
movsd  (%r9,%rsi,8),%xmm0
divsd  (%rdi,%rax,8),%xmm0
movsd  %xmm0,(%r9,%rsi,8)
lea    -0x2(%r8),%ebp
movslq (%rcx,%rbp,4),%rbp
lea    -0x1(%rax),%ebx
cmp    %ebx,%ebp
jge    1230 <Mrhor+0x130>
movslq %ebx,%r11
lea    0x1(%rbp),%rax
movslq 0x4(%rdx,%rbp,4),%r14
mulsd  0x8(%rdi,%rbp,8),%xmm0
movsd  (%r9,%r14,8),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,(%r9,%r14,8)
cmp    %r11,%rax
je     1230 <Mrhor+0x130>
mov    %ebp,%r14d
not    %r14d
add    %ebx,%r14d
lea    -0x2(%r11),%r15
test   $0x1,%r14b
je     12c3 <Mrhor+0x1c3>
lea    0x2(%rbp),%rax
movsd  0x10(%rdi,%rbp,8),%xmm0
movslq 0x8(%rdx,%rbp,4),%rbx
movsd  (%r9,%rbx,8),%xmm1
mulsd  (%r9,%rsi,8),%xmm0
subsd  %xmm0,%xmm1
movsd  %xmm1,(%r9,%rbx,8)
cmp    %rbp,%r15
je     1230 <Mrhor+0x130>
nopl   0x0(%rax)
movsd  0x8(%rdi,%rax,8),%xmm0
movslq 0x4(%rdx,%rax,4),%rbx
mulsd  (%r9,%rsi,8),%xmm0
movsd  (%r9,%rbx,8),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,(%r9,%rbx,8)
movsd  0x10(%rdi,%rax,8),%xmm0
movslq 0x8(%rdx,%rax,4),%rbx
lea    0x2(%rax),%rbp
mulsd  (%r9,%rsi,8),%xmm0
movsd  (%r9,%rbx,8),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,(%r9,%rbx,8)
mov    %rbp,%rax
cmp    %rbp,%r11
jne    12d0 <Mrhor+0x1d0>
jmp    1230 <Mrhor+0x130>

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

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