void c_model2_sr(int *nin, int *itot, int *nsin, double *x, double *x1,
                 double *titre, double *titrepred, double *dd, double *dd2,
                 int *ntheta, double *theta, int *inputtestyr) {
  int n = nin[0];
  int nsamp = nsin[0];
  double T_2 = theta[2];
  double wane = theta[3];
  double mu = theta[0];
  double mu2 = theta[5];
  int t_sample = inputtestyr[0];
  double yrTitre[nsamp];
  int maskedInfectionHistory[n];
  double distanceFromTest[n];
  double cumInfectionHistory[n];
  int k;
  int i;
  int j;
  int m;
  double xx2;
  for (k = 0; k < nsamp; k++) {
    xx2 = 0;
    j = (t_sample - 1);
    for (m = 0; m < n; m++) {
      if (m <= j) {
        maskedInfectionHistory[m] = x[m];
      } else {
        maskedInfectionHistory[m] = 0;
      }
    }
    for (m = 0; m < n; m++) {
      distanceFromTest[m] =
          ((0) < (1.0 - wane * (j - m)) ? (1.0 - wane * (j - m)) : (0));
    }
    cumInfectionHistory[0] = maskedInfectionHistory[0];
    for (m = 1; m < n; m++) {
      cumInfectionHistory[m] =
          cumInfectionHistory[m - 1] + maskedInfectionHistory[m];
    }
    for (i = 0; i < n; i++) {
      x1[i] = maskedInfectionHistory[i] *
              ((0) < (1.0 - T_2 * (cumInfectionHistory[i] - 1.0))
                   ? (1.0 - T_2 * (cumInfectionHistory[i] - 1.0))
                   : (0)) *
              (mu * dd[k * n + i] + mu2 * dd2[k * n + i] * distanceFromTest[i]);
    }
    for (i = 0; i < n; i++) {
      xx2 = xx2 + x1[i];
    }
    yrTitre[k] = xx2;
  }
  for (k = 0; k < nsamp; k++) {
    titrepred[k] = yrTitre[k];
  }
}


x86 assembly (clang, -O0):
<c_model2_sr>:
push   %rbp
mov    %rsp,%rbp
sub    $0xe0,%rsp
mov    0x38(%rbp),%rax
mov    0x30(%rbp),%rax
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
mov    -0x8(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x34(%rbp)
mov    -0x18(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x38(%rbp)
mov    0x30(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    0x30(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    0x30(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    0x30(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    0x38(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x5c(%rbp)
mov    -0x38(%rbp),%eax
mov    %rsp,%rcx
mov    %rcx,-0x68(%rbp)
lea    0xf(,%rax,8),%rdx
and    $0xfffffffffffffff0,%rdx
mov    %rsp,%rcx
sub    %rdx,%rcx
mov    %rcx,-0xc0(%rbp)
mov    %rcx,%rsp
mov    %rax,-0x70(%rbp)
mov    -0x34(%rbp),%eax
lea    0xf(,%rax,4),%rdx
and    $0xfffffffffffffff0,%rdx
mov    %rsp,%rcx
sub    %rdx,%rcx
mov    %rcx,-0xb8(%rbp)
mov    %rcx,%rsp
mov    %rax,-0x78(%rbp)
mov    -0x34(%rbp),%eax
lea    0xf(,%rax,8),%rdx
and    $0xfffffffffffffff0,%rdx
mov    %rsp,%rcx
sub    %rdx,%rcx
mov    %rcx,-0xb0(%rbp)
mov    %rcx,%rsp
mov    %rax,-0x80(%rbp)
mov    -0x34(%rbp),%eax
lea    0xf(,%rax,8),%rdx
and    $0xfffffffffffffff0,%rdx
mov    %rsp,%rcx
sub    %rdx,%rcx
mov    %rcx,-0xa8(%rbp)
mov    %rcx,%rsp
mov    %rax,-0x88(%rbp)
movl   $0x0,-0x8c(%rbp)
mov    -0x8c(%rbp),%eax
cmp    -0x38(%rbp),%eax
jge    1643 <c_model2_sr+0x543>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x5c(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x94(%rbp)
movl   $0x0,-0x98(%rbp)
mov    -0x98(%rbp),%eax
cmp    -0x34(%rbp),%eax
jge    12d2 <c_model2_sr+0x1d2>
mov    -0x98(%rbp),%eax
cmp    -0x94(%rbp),%eax
jg     12a4 <c_model2_sr+0x1a4>
mov    -0xb8(%rbp),%rax
mov    -0x20(%rbp),%rcx
movslq -0x98(%rbp),%rdx
cvttsd2si (%rcx,%rdx,8),%edx
movslq -0x98(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
jmp    12b9 <c_model2_sr+0x1b9>
mov    -0xb8(%rbp),%rax
movslq -0x98(%rbp),%rcx
movl   $0x0,(%rax,%rcx,4)
jmp    12be <c_model2_sr+0x1be>
mov    -0x98(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x98(%rbp)
jmp    125d <c_model2_sr+0x15d>
movl   $0x0,-0x98(%rbp)
mov    -0x98(%rbp),%eax
cmp    -0x34(%rbp),%eax
jge    13bc <c_model2_sr+0x2bc>
movsd  -0x48(%rbp),%xmm0
mov    -0x94(%rbp),%eax
sub    -0x98(%rbp),%eax
cvtsi2sd %eax,%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm1,%xmm0
movsd  0xcdd(%rip),%xmm1
addsd  %xmm1,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    137d <c_model2_sr+0x27d>
movsd  -0x48(%rbp),%xmm0
mov    -0x94(%rbp),%eax
sub    -0x98(%rbp),%eax
cvtsi2sd %eax,%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm1,%xmm0
movsd  0xc94(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
jmp    138d <c_model2_sr+0x28d>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
jmp    138d <c_model2_sr+0x28d>
mov    -0xb0(%rbp),%rax
movsd  -0xc8(%rbp),%xmm0
ff
movslq -0x98(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x98(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x98(%rbp)
jmp    12dc <c_model2_sr+0x1dc>
mov    -0xa8(%rbp),%rax
mov    -0xb8(%rbp),%rcx
cvtsi2sdl (%rcx),%xmm0
movsd  %xmm0,(%rax)
movl   $0x1,-0x98(%rbp)
mov    -0x98(%rbp),%eax
cmp    -0x34(%rbp),%eax
jge    143a <c_model2_sr+0x33a>
mov    -0xa8(%rbp),%rax
mov    -0xb8(%rbp),%rcx
mov    -0x98(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
movsd  (%rax,%rdx,8),%xmm0
movslq -0x98(%rbp),%rdx
cvtsi2sdl (%rcx,%rdx,4),%xmm1
addsd  %xmm1,%xmm0
movslq -0x98(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x98(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x98(%rbp)
jmp    13dc <c_model2_sr+0x2dc>
movl   $0x0,-0x90(%rbp)
mov    -0x90(%rbp),%eax
cmp    -0x34(%rbp),%eax
jge    15c7 <c_model2_sr+0x4c7>
mov    -0xa8(%rbp),%rax
mov    -0xb8(%rbp),%rcx
movslq -0x90(%rbp),%rdx
cvtsi2sdl (%rcx,%rdx,4),%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movslq -0x90(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
movsd  0xb72(%rip),%xmm2
subsd  %xmm2,%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm1,%xmm0
movsd  0xb4b(%rip),%xmm1
addsd  %xmm1,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    151e <c_model2_sr+0x41e>
mov    -0xa8(%rbp),%rax
movsd  -0x40(%rbp),%xmm0
movslq -0x90(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
movsd  0xb1a(%rip),%xmm2
subsd  %xmm2,%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm1,%xmm0
movsd  0xaf3(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
jmp    152e <c_model2_sr+0x42e>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
jmp    152e <c_model2_sr+0x42e>
mov    -0xb0(%rbp),%rax
movsd  -0xd0(%rbp),%xmm0
ff
movsd  -0xd8(%rbp),%xmm1
ff
mulsd  %xmm1,%xmm0
movsd  -0x50(%rbp),%xmm1
mov    0x18(%rbp),%rcx
mov    -0x8c(%rbp),%edx
imul   -0x34(%rbp),%edx
add    -0x90(%rbp),%edx
movslq %edx,%rdx
movsd  (%rcx,%rdx,8),%xmm3
movsd  -0x58(%rbp),%xmm2
mov    0x20(%rbp),%rcx
mov    -0x8c(%rbp),%edx
imul   -0x34(%rbp),%edx
add    -0x90(%rbp),%edx
movslq %edx,%rdx
mulsd  (%rcx,%rdx,8),%xmm2
movslq -0x90(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
mov    -0x28(%rbp),%rax
movslq -0x90(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x90(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x90(%rbp)
jmp    1444 <c_model2_sr+0x344>
movl   $0x0,-0x90(%rbp)
mov    -0x90(%rbp),%eax
cmp    -0x34(%rbp),%eax
jge    1614 <c_model2_sr+0x514>
movsd  -0xa0(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movslq -0x90(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x90(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x90(%rbp)
jmp    15d1 <c_model2_sr+0x4d1>
mov    -0xc0(%rbp),%rax
movsd  -0xa0(%rbp),%xmm0
ff
movslq -0x8c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x8c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8c(%rbp)
jmp    122d <c_model2_sr+0x12d>
movl   $0x0,-0x8c(%rbp)
mov    -0x8c(%rbp),%eax
cmp    -0x38(%rbp),%eax
jge    1693 <c_model2_sr+0x593>
mov    -0xc0(%rbp),%rax
movslq -0x8c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x10(%rbp),%rax
movslq -0x8c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x8c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8c(%rbp)
jmp    164d <c_model2_sr+0x54d>
mov    -0x68(%rbp),%rax
mov    %rax,%rsp
mov    %rbp,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<c_model2_sr>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x98,%rsp
mov    %rcx,%r13
mov    (%rdi),%ebx
mov    (%rdx),%edx
mov    %rsp,%rcx
lea    0xf(,%rdx,8),%rax
and    $0xfffffffffffffff0,%rax
sub    %rax,%rcx
mov    %rcx,-0x60(%rbp)
mov    %rcx,%rsp
mov    %rsp,%r15
lea    0xf(,%rbx,4),%rax
and    $0xfffffffffffffff0,%rax
sub    %rax,%r15
mov    %r15,%rsp
mov    %rsp,%r10
lea    0xf(,%rbx,8),%rax
and    $0xfffffffffffffff0,%rax
sub    %rax,%r10
mov    %r10,%rsp
mov    %rsp,%r11
sub    %rax,%r11
mov    %r11,%rsp
test   %edx,%edx
jle    1668 <c_model2_sr+0x558>
mov    0x30(%rbp),%rdi
mov    0x20(%rbp),%r14
mov    0x18(%rbp),%r9
mov    0x38(%rbp),%rax
movslq %ebx,%rcx
movsd  (%rdi),%xmm0
movsd  0x28(%rdi),%xmm1
movslq (%rax),%r12
movq   0x10(%rdi),%xmm2
movq   0x18(%rdi),%xmm6
movdqa 0xe50(%rip),%xmm3
pxor   %xmm3,%xmm6
pxor   %xmm3,%xmm2
lea    -0x1(%rbx),%rax
mov    %ebx,%esi
and    $0xfffffffe,%esi
mov    %rsi,-0xa8(%rbp)
mov    %rdx,%rdi
mov    %ebx,%edx
and    $0xfffffffc,%edx
mov    %rdx,-0x78(%rbp)
movd   %r12d,%xmm3
pshufd $0x50,%xmm3,%xmm10
pshufd $0x44,%xmm6,%xmm9
mov    %eax,%edx
and    $0x3,%edx
mov    %rdx,-0x90(%rbp)
mov    %rdi,%rdx
mov    %rax,-0x58(%rbp)
and    $0xfffffffffffffffc,%rax
mov    %rax,-0x80(%rbp)
mov    %ebx,%eax
and    $0x7,%eax
mov    %rax,-0x40(%rbp)
mov    %ebx,%eax
and    $0xfffffff8,%eax
mov    %rax,-0x70(%rbp)
lea    0x0(,%rbx,8),%rax
and    $0xffffffffffffffe0,%rax
mov    %rax,-0x68(%rbp)
shl    $0x3,%rcx
mov    %rcx,-0x98(%rbp)
movsd  0xe1a(%rip),%xmm11
xorpd  %xmm12,%xmm12
pcmpeqd %xmm8,%xmm8
movdqa 0xdd8(%rip),%xmm5
movapd 0xde0(%rip),%xmm7
xorpd  %xmm13,%xmm13
movdqa 0xde2(%rip),%xmm14
movsd  0xdf1(%rip),%xmm15
lea    -0x2(%rbx),%rax
mov    %rax,-0x88(%rbp)
lea    -0x1(%r12),%eax
mov    %eax,-0x34(%rbp)
lea    -0x4(,%rbx,4),%rcx
ff
xor    %esi,%esi
mov    %rbx,-0x30(%rbp)
mov    %rdx,-0x50(%rbp)
mov    %r13,-0x48(%rbp)
movdqa %xmm6,-0xc0(%rbp)
ff
jmp    12db <c_model2_sr+0x1cb>
nopw   0x0(%rax,%rax,1)
mov    -0x50(%rbp),%rdx
mov    -0x48(%rbp),%r13
mov    -0x30(%rbp),%rbx
pcmpeqd %xmm8,%xmm8
mov    -0x60(%rbp),%rax
mov    -0xa0(%rbp),%rsi
movq   %xmm3,(%rax,%rsi,8)
add    $0x1,%rsi
mov    -0x98(%rbp),%rax
add    %rax,%r9
add    %rax,%r14
cmp    %rdx,%rsi
je     1653 <c_model2_sr+0x543>
mov    %rsi,-0xa0(%rbp)
test   %ebx,%ebx
jle    1437 <c_model2_sr+0x327>
cmpq   $0x0,-0x58(%rbp)
je     1350 <c_model2_sr+0x240>
xor    %edi,%edi
jmp    1312 <c_model2_sr+0x202>
cs nopw 0x0(%rax,%rax,1)
nop
mov    %ebx,0x4(%r15,%rax,4)
add    $0x1,%rdi
cmp    -0xa8(%rbp),%rdi
je     1340 <c_model2_sr+0x230>
mov    %rdi,%rax
xor    %ebx,%ebx
mov    $0x0,%edi
cmp    %r12,%rax
jge    1328 <c_model2_sr+0x218>
cvttsd2si 0x0(%r13,%rax,8),%edi
mov    %edi,(%r15,%rax,4)
lea    0x1(%rax),%rdi
cmp    %r12,%rdi
jge    1300 <c_model2_sr+0x1f0>
cvttsd2si 0x8(%r13,%rax,8),%ebx
jmp    1300 <c_model2_sr+0x1f0>
xchg   %ax,%ax
add    $0x2,%rax
mov    -0x30(%rbp),%rbx
test   $0x1,%bl
jne    1357 <c_model2_sr+0x247>
jmp    1369 <c_model2_sr+0x259>
nop
xor    %eax,%eax
test   $0x1,%bl
je     1369 <c_model2_sr+0x259>
xor    %edi,%edi
cmp    %r12,%rax
jge    1365 <c_model2_sr+0x255>
cvttsd2si 0x0(%r13,%rax,8),%edi
mov    %edi,(%r15,%rax,4)
test   %ebx,%ebx
jle    1437 <c_model2_sr+0x327>
cmp    $0x4,%ebx
jae    137d <c_model2_sr+0x26d>
xor    %edi,%edi
jmp    1402 <c_model2_sr+0x2f2>
xor    %eax,%eax
movdqa %xmm5,%xmm6
movdqa 0xc85(%rip),%xmm5
mov    -0x68(%rbp),%rsi
nop
movdqa %xmm5,%xmm3
pxor   %xmm8,%xmm3
paddd  %xmm10,%xmm3
movdqa %xmm10,%xmm4
psubd  %xmm5,%xmm4
paddd  %xmm6,%xmm4
cvtdq2pd %xmm3,%xmm3
cvtdq2pd %xmm4,%xmm4
mulpd  %xmm9,%xmm3
addpd  %xmm7,%xmm3
mulpd  %xmm9,%xmm4
addpd  %xmm7,%xmm4
maxpd  %xmm13,%xmm3
maxpd  %xmm13,%xmm4
movapd %xmm3,(%r10,%rax,1)
movapd %xmm4,0x10(%r10,%rax,1)
paddd  %xmm14,%xmm5
add    $0x20,%rax
cmp    %rax,%rsi
jne    1390 <c_model2_sr+0x280>
mov    -0x78(%rbp),%rax
mov    %rax,%rdi
cmp    %rbx,%rax
movdqa %xmm6,%xmm5
movdqa -0xc0(%rbp),%xmm6
ff
je     1437 <c_model2_sr+0x327>
mov    -0x34(%rbp),%eax
sub    %edi,%eax
nopw   0x0(%rax,%rax,1)
xorps  %xmm3,%xmm3
cvtsi2sd %eax,%xmm3
mulsd  %xmm6,%xmm3
addsd  %xmm11,%xmm3
maxsd  %xmm12,%xmm3
movsd  %xmm3,(%r10,%rdi,8)
add    $0x1,%rdi
add    $0xffffffff,%eax
cmp    %rdi,%rbx
jne    1410 <c_model2_sr+0x300>
mov    %rbx,%rdi
mov    (%r15),%eax
xorps  %xmm8,%xmm8
cvtsi2sd %eax,%xmm8
movsd  %xmm8,(%r11)
cmp    $0x2,%edi
mov    -0x90(%rbp),%rdi
jl     151c <c_model2_sr+0x40c>
mov    $0x1,%edx
movapd %xmm8,%xmm3
cmpq   $0x3,-0x88(%rbp)
03
jb     14e1 <c_model2_sr+0x3d1>
movapd %xmm8,%xmm3
xor    %edx,%edx
mov    -0x80(%rbp),%rbx
nopw   0x0(%rax,%rax,1)
xorps  %xmm4,%xmm4
cvtsi2sdl 0x4(%r15,%rdx,4),%xmm4
addsd  %xmm3,%xmm4
movsd  %xmm4,0x8(%r11,%rdx,8)
xorps  %xmm3,%xmm3
cvtsi2sdl 0x8(%r15,%rdx,4),%xmm3
addsd  %xmm4,%xmm3
movsd  %xmm3,0x10(%r11,%rdx,8)
xorps  %xmm4,%xmm4
cvtsi2sdl 0xc(%r15,%rdx,4),%xmm4
addsd  %xmm3,%xmm4
movsd  %xmm4,0x18(%r11,%rdx,8)
xorps  %xmm3,%xmm3
cvtsi2sdl 0x10(%r15,%rdx,4),%xmm3
addsd  %xmm4,%xmm3
movsd  %xmm3,0x20(%r11,%rdx,8)
add    $0x4,%rdx
cmp    %rdx,%rbx
jne    1480 <c_model2_sr+0x370>
add    $0x1,%rdx
test   %rdi,%rdi
je     151c <c_model2_sr+0x40c>
mov    %rdi,%rbx
lea    (%r11,%rdx,8),%rdi
lea    (%r15,%rdx,4),%rdx
xor    %r13d,%r13d
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
xorps  %xmm4,%xmm4
cvtsi2sdl (%rdx,%r13,4),%xmm4
addsd  %xmm4,%xmm3
movsd  %xmm3,(%rdi,%r13,8)
add    $0x1,%r13
cmp    %r13,%rbx
jne    1500 <c_model2_sr+0x3f0>
pxor   %xmm3,%xmm3
cmpl   $0x0,-0x30(%rbp)
jle    12a0 <c_model2_sr+0x190>
movdqa %xmm5,%xmm13
xor    %edi,%edi
mov    -0x50(%rbp),%rdx
mov    -0x48(%rbp),%r13
mov    -0x30(%rbp),%rbx
nopl   (%rax)
xorps  %xmm4,%xmm4
cvtsi2sd %eax,%xmm4
addsd  %xmm15,%xmm8
mulsd  %xmm2,%xmm8
addsd  %xmm11,%xmm8
maxsd  %xmm12,%xmm8
mulsd  %xmm4,%xmm8
movsd  (%r14,%rdi,2),%xmm4
mulsd  %xmm1,%xmm4
mulsd  (%r10,%rdi,2),%xmm4
movsd  (%r9,%rdi,2),%xmm5
mulsd  %xmm0,%xmm5
addsd  %xmm4,%xmm5
mulsd  %xmm8,%xmm5
movsd  %xmm5,(%r8,%rdi,2)
cmp    %rdi,%rcx
je     15a0 <c_model2_sr+0x490>
mov    0x4(%r15,%rdi,1),%eax
movq   0x8(%r11,%rdi,2),%xmm8
add    $0x4,%rdi
jmp    1540 <c_model2_sr+0x430>
test   %ebx,%ebx
pcmpeqd %xmm8,%xmm8
movdqa %xmm13,%xmm5
pxor   %xmm13,%xmm13
jle    12b1 <c_model2_sr+0x1a1>
cmpq   $0x7,-0x58(%rbp)
jae    15ca <c_model2_sr+0x4ba>
pxor   %xmm3,%xmm3
xor    %eax,%eax
mov    -0x40(%rbp),%rdi
jmp    1620 <c_model2_sr+0x510>
pxor   %xmm3,%xmm3
xor    %eax,%eax
mov    -0x40(%rbp),%rdi
mov    -0x70(%rbp),%rsi
nopl   0x0(%rax,%rax,1)
addsd  (%r8,%rax,8),%xmm3
addsd  0x8(%r8,%rax,8),%xmm3
addsd  0x10(%r8,%rax,8),%xmm3
addsd  0x18(%r8,%rax,8),%xmm3
addsd  0x20(%r8,%rax,8),%xmm3
addsd  0x28(%r8,%rax,8),%xmm3
addsd  0x30(%r8,%rax,8),%xmm3
addsd  0x38(%r8,%rax,8),%xmm3
add    $0x8,%rax
cmp    %rax,%rsi
jne    15e0 <c_model2_sr+0x4d0>
test   %rdi,%rdi
je     12b1 <c_model2_sr+0x1a1>
mov    %rdi,%rsi
lea    (%r8,%rax,8),%rdi
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
addsd  (%rdi,%rax,8),%xmm3
add    $0x1,%rax
cmp    %rax,%rsi
jne    1640 <c_model2_sr+0x530>
jmp    12b1 <c_model2_sr+0x1a1>
test   %edx,%edx
jle    1668 <c_model2_sr+0x558>
shl    $0x3,%rdx
mov    0x10(%rbp),%rdi
mov    -0x60(%rbp),%rsi
call   1030 <memcpy@plt>
lea    -0x28(%rbp),%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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