void dualityGap2(double *gap, double *z, double *g, double *s, double *Av,
                 double lambda, int nn) {
  int i, m;
  double temp;
  for (i = 0; i < nn; i++)
    if (g[i] > 0)
      s[i] = lambda + z[i];
    else
      s[i] = -lambda + z[i];
  temp = 0;
  m = nn % 5;
  if (m != 0) {
    for (i = 0; i < m; i++)
      temp += s[i] * g[i];
  }
  for (i = m; i < nn; i += 5)
    temp = temp + s[i] * g[i] + s[i + 1] * g[i + 1] + s[i + 2] * g[i + 2] +
           s[i + 3] * g[i + 3] + s[i + 4] * g[i + 4];
  *gap = temp;
}


x86 assembly (clang, -O0):
<dualityGap2>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
movsd  %xmm0,-0x30(%rbp)
mov    %r9d,-0x34(%rbp)
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x34(%rbp),%eax
jge    11bb <dualityGap2+0xbb>
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1172 <dualityGap2+0x72>
movsd  -0x30(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x38(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    11a8 <dualityGap2+0xa8>
movsd  -0x30(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x10(%rbp),%rax
movslq -0x38(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    11ad <dualityGap2+0xad>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    1128 <dualityGap2+0x28>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x34(%rbp),%eax
mov    $0x5,%ecx
cltd
idiv   %ecx
mov    %edx,-0x3c(%rbp)
cmpl   $0x0,-0x3c(%rbp)
je     122d <dualityGap2+0x12d>
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jge    1228 <dualityGap2+0x128>
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%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    11e2 <dualityGap2+0xe2>
jmp    122d <dualityGap2+0x12d>
mov    -0x3c(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x34(%rbp),%eax
jge    1329 <dualityGap2+0x229>
movsd  -0x48(%rbp),%xmm1
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x20(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x20(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x38(%rbp),%eax
add    $0x5,%eax
mov    %eax,-0x38(%rbp)
jmp    1233 <dualityGap2+0x133>
movsd  -0x48(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<dualityGap2>:
push   %rbp
push   %r14
push   %rbx
test   %r9d,%r9d
jle    12bd <dualityGap2+0x1bd>
mov    %r9d,%r8d
cmp    $0x4,%r9d
jae    11df <dualityGap2+0xdf>
xor    %r11d,%r11d
mov    %r11,%rax
not    %rax
test   $0x1,%r8b
je     1160 <dualityGap2+0x60>
movapd 0xecf(%rip),%xmm1
xorpd  %xmm2,%xmm2
cmpltsd (%rdx,%r11,8),%xmm2
xorpd  %xmm0,%xmm1
movapd %xmm2,%xmm3
andpd  %xmm0,%xmm3
andnpd %xmm1,%xmm2
orpd   %xmm3,%xmm2
addsd  (%rsi,%r11,8),%xmm2
movsd  %xmm2,(%rcx,%r11,8)
or     $0x1,%r11
add    %r8,%rax
je     12bd <dualityGap2+0x1bd>
movapd 0xe8f(%rip),%xmm1
xorpd  %xmm0,%xmm1
cs nopw 0x0(%rax,%rax,1)
nop
xorpd  %xmm2,%xmm2
cmpltsd (%rdx,%r11,8),%xmm2
movapd %xmm2,%xmm3
andpd  %xmm0,%xmm3
andnpd %xmm1,%xmm2
orpd   %xmm3,%xmm2
addsd  (%rsi,%r11,8),%xmm2
movsd  %xmm2,(%rcx,%r11,8)
xorpd  %xmm2,%xmm2
cmpltsd 0x8(%rdx,%r11,8),%xmm2
01
movapd %xmm2,%xmm3
andpd  %xmm0,%xmm3
andnpd %xmm1,%xmm2
orpd   %xmm3,%xmm2
addsd  0x8(%rsi,%r11,8),%xmm2
movsd  %xmm2,0x8(%rcx,%r11,8)
add    $0x2,%r11
cmp    %r11,%r8
jne    1180 <dualityGap2+0x80>
jmp    12bd <dualityGap2+0x1bd>
lea    (%rcx,%r8,8),%rax
lea    (%rdx,%r8,8),%rbx
cmp    %rcx,%rbx
seta   %bpl
lea    (%rsi,%r8,8),%rbx
cmp    %rdx,%rax
seta   %r14b
cmp    %rcx,%rbx
seta   %bl
cmp    %rsi,%rax
seta   %r10b
xor    %r11d,%r11d
test   %r14b,%bpl
jne    111d <dualityGap2+0x1d>
and    %r10b,%bl
jne    111d <dualityGap2+0x1d>
mov    %r8d,%r11d
and    $0xfffffffc,%r11d
movapd %xmm0,%xmm1
unpcklpd %xmm0,%xmm1
movapd 0xdce(%rip),%xmm2
xorpd  %xmm1,%xmm2
lea    0x0(,%r8,8),%r10
and    $0xffffffffffffffe0,%r10
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movupd (%rdx,%rax,1),%xmm3
movupd 0x10(%rdx,%rax,1),%xmm4
xorpd  %xmm5,%xmm5
cmpltpd %xmm3,%xmm5
xorpd  %xmm3,%xmm3
cmpltpd %xmm4,%xmm3
movupd (%rsi,%rax,1),%xmm4
movupd 0x10(%rsi,%rax,1),%xmm6
movapd %xmm1,%xmm7
andpd  %xmm5,%xmm7
andnpd %xmm2,%xmm5
orpd   %xmm7,%xmm5
addpd  %xmm4,%xmm5
movapd %xmm1,%xmm4
andpd  %xmm3,%xmm4
andnpd %xmm2,%xmm3
orpd   %xmm4,%xmm3
addpd  %xmm6,%xmm3
movupd %xmm5,(%rcx,%rax,1)
movupd %xmm3,0x10(%rcx,%rax,1)
add    $0x20,%rax
cmp    %rax,%r10
jne    1250 <dualityGap2+0x150>
cmp    %r8,%r11
jne    111d <dualityGap2+0x1d>
movslq %r9d,%rax
imul   $0x66666667,%rax,%rsi
mov    %rsi,%rbp
shr    $0x3f,%rbp
sar    $0x21,%rsi
add    %ebp,%esi
lea    (%rsi,%rsi,4),%ebp
mov    %r9d,%esi
sub    %ebp,%esi
test   %esi,%esi
jle    135a <dualityGap2+0x25a>
movsd  (%rcx),%xmm1
mulsd  (%rdx),%xmm1
xorpd  %xmm0,%xmm0
addsd  %xmm1,%xmm0
cmp    $0x1,%esi
je     135e <dualityGap2+0x25e>
movsd  0x8(%rcx),%xmm1
mulsd  0x8(%rdx),%xmm1
addsd  %xmm1,%xmm0
cmp    $0x2,%esi
je     135e <dualityGap2+0x25e>
movsd  0x10(%rcx),%xmm1
mulsd  0x10(%rdx),%xmm1
addsd  %xmm1,%xmm0
cmp    $0x3,%esi
je     135e <dualityGap2+0x25e>
movsd  0x18(%rcx),%xmm1
mulsd  0x18(%rdx),%xmm1
addsd  %xmm1,%xmm0
cmp    $0x4,%esi
je     135e <dualityGap2+0x25e>
movsd  0x20(%rcx),%xmm1
movsd  0x28(%rcx),%xmm2
mulsd  0x20(%rdx),%xmm1
addsd  %xmm0,%xmm1
mulsd  0x28(%rdx),%xmm2
addsd  %xmm1,%xmm2
movsd  0x30(%rcx),%xmm0
mulsd  0x30(%rdx),%xmm0
addsd  %xmm2,%xmm0
jmp    135e <dualityGap2+0x25e>
xorpd  %xmm0,%xmm0
cmp    %r9d,%esi
jge    13c7 <dualityGap2+0x2c7>
movslq %esi,%rsi
cs nopw 0x0(%rax,%rax,1)
movsd  (%rcx,%rsi,8),%xmm1
movsd  0x8(%rcx,%rsi,8),%xmm2
mulsd  (%rdx,%rsi,8),%xmm1
mulsd  0x8(%rdx,%rsi,8),%xmm2
addsd  %xmm0,%xmm1
movsd  0x10(%rcx,%rsi,8),%xmm3
mulsd  0x10(%rdx,%rsi,8),%xmm3
addsd  %xmm1,%xmm2
movsd  0x18(%rcx,%rsi,8),%xmm1
mulsd  0x18(%rdx,%rsi,8),%xmm1
addsd  %xmm2,%xmm3
movsd  0x20(%rcx,%rsi,8),%xmm0
mulsd  0x20(%rdx,%rsi,8),%xmm0
addsd  %xmm3,%xmm1
addsd  %xmm1,%xmm0
add    $0x5,%rsi
cmp    %rax,%rsi
jl     1370 <dualityGap2+0x270>
movsd  %xmm0,(%rdi)
pop    %rbx
pop    %r14
pop    %rbp
ret

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

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