void jaccombust(double *p, double *jac, int m, int n, void *data) {
  register int j = 0;
  double R, R5, R6, R7, R8, R9, R10;
  R = 10;
  R5 = 0.193;
  R6 = 4.10622 * 1e-4;
  R7 = 5.45177 * 1e-4;
  R8 = 4.4975 * 1e-7;
  R9 = 3.40735 * 1e-5;
  R10 = 9.615 * 1e-7;
  for (j = 0; j < m * n; ++j)
    jac[j] = 0.0;
  j = 0;
  jac[j] = p[1] + 1;
  jac[j + 1] = p[0];
  jac[j + 4] = -3;
  j += m;
  jac[j] = 2 * p[1] + 1;
  jac[j + 1] =
      2 * p[0] + 6 * R10 * p[1] + p[2] * p[2] + R7 * p[2] + R9 * p[3] + R8;
  jac[j + 2] = 2 * p[1] * p[2] + R7 * p[1];
  jac[j + 3] = R9 * p[1];
  jac[j + 4] = -R;
  j += m;
  jac[j + 1] = 2 * p[2] * p[2] + R7 * p[2];
  jac[j + 2] = 4 * p[1] * p[2] + R7 * p[1] + 4 * R5 * p[2] + R6;
  jac[j + 4] = -8;
  j += m;
  jac[j + 1] = R9 * p[3];
  jac[j + 3] = R9 * p[1] + 4 * p[3];
  jac[j + 4] = -4 * R;
  j += m;
  jac[j] = p[1] + 1;
  jac[j + 1] = p[0] + 2 * R10 * p[1] + p[2] * p[2] + R7 * p[2] + R9 * p[3] + R8;
  jac[j + 2] = 2 * p[1] * p[2] + R7 * p[1] + 2 * R5 * p[2] + R6;
  jac[j + 3] = R9 * p[1] + 2 * p[3];
}


x86 assembly (clang, -O0):
<jaccombust>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %ecx,-0x18(%rbp)
mov    %r8,-0x20(%rbp)
movl   $0x0,-0x24(%rbp)
movsd  0xf0b(%rip),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  0xef6(%rip),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  0xee1(%rip),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0xecc(%rip),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  0xeb7(%rip),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  0xea2(%rip),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  0xe8d(%rip),%xmm0
movsd  %xmm0,-0x60(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    -0x14(%rbp),%ecx
imul   -0x18(%rbp),%ecx
cmp    %ecx,%eax
jge    11af <jaccombust+0xaf>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    117f <jaccombust+0x7f>
movl   $0x0,-0x24(%rbp)
mov    -0x8(%rbp),%rax
movsd  0xe7e(%rip),%xmm0
addsd  0x8(%rax),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
movsd  0xe65(%rip),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x14(%rbp),%eax
add    -0x24(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x8(%rax),%xmm0
addsd  %xmm0,%xmm0
movsd  0xe1a(%rip),%xmm1
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm1
movsd  0xe19(%rip),%xmm0
mulsd  -0x60(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mulsd  0x8(%rax),%xmm0
addsd  %xmm1,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x8(%rbp),%rax
movsd  0x10(%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x48(%rbp),%xmm1
mov    -0x8(%rbp),%rax
movsd  0x10(%rax),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x58(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  0x18(%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  -0x50(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x8(%rbp),%rax
movsd  0xd72(%rip),%xmm0
mulsd  0x8(%rax),%xmm0
mov    -0x8(%rbp),%rax
movsd  0x10(%rax),%xmm2
movsd  -0x48(%rbp),%xmm1
mov    -0x8(%rbp),%rax
mulsd  0x8(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x58(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mulsd  0x8(%rax),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x30(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x14(%rbp),%eax
add    -0x24(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x8(%rbp),%rax
movsd  0xcd9(%rip),%xmm0
mulsd  0x10(%rax),%xmm0
mov    -0x8(%rbp),%rax
movsd  0x10(%rax),%xmm2
movsd  -0x48(%rbp),%xmm1
mov    -0x8(%rbp),%rax
mulsd  0x10(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x8(%rbp),%rax
movsd  0xcaf(%rip),%xmm1
mulsd  0x8(%rax),%xmm1
mov    -0x8(%rbp),%rax
movsd  0x10(%rax),%xmm2
movsd  -0x48(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mulsd  0x8(%rax),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0xc83(%rip),%xmm0
mulsd  -0x38(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  0x10(%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  -0x40(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
movsd  0xc49(%rip),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x14(%rbp),%eax
add    -0x24(%rbp),%eax
mov    %eax,-0x24(%rbp)
movsd  -0x58(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mulsd  0x18(%rax),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x58(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  0x8(%rax),%xmm2
mov    -0x8(%rbp),%rax
movsd  0xbf9(%rip),%xmm1
mulsd  0x18(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  0xbca(%rip),%xmm0
mulsd  -0x30(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x14(%rbp),%eax
add    -0x24(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x8(%rbp),%rax
movsd  0xb96(%rip),%xmm0
addsd  0x8(%rax),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0xb6c(%rip),%xmm1
mulsd  -0x60(%rbp),%xmm1
mov    -0x8(%rbp),%rax
movsd  0x8(%rax),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x8(%rbp),%rax
movsd  0x10(%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x48(%rbp),%xmm1
mov    -0x8(%rbp),%rax
movsd  0x10(%rax),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x58(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  0x18(%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  -0x50(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x8(%rbp),%rax
movsd  0xaed(%rip),%xmm1
mulsd  0x8(%rax),%xmm1
mov    -0x8(%rbp),%rax
movsd  0x10(%rax),%xmm2
movsd  -0x48(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mulsd  0x8(%rax),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0xac1(%rip),%xmm0
mulsd  -0x38(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  0x10(%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  -0x40(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x58(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  0x8(%rax),%xmm2
mov    -0x8(%rbp),%rax
movsd  0xa7a(%rip),%xmm1
mulsd  0x18(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
pop    %rbp
ret

x86 assembly (clang, -O2):
<jaccombust>:
push   %rbp
push   %r14
push   %rbx
mov    %edx,%ebp
mov    %rsi,%r14
mov    %rdi,%rbx
imul   %edx,%ecx
test   %ecx,%ecx
jle    1133 <jaccombust+0x23>
mov    %ecx,%edx
shl    $0x3,%rdx
mov    %r14,%rdi
xor    %esi,%esi
call   1030 <memset@plt>
movsd  0xec5(%rip),%xmm0
movsd  0x8(%rbx),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,(%r14)
movsd  (%rbx),%xmm1
movsd  %xmm1,0x8(%r14)
movabs $0xc008000000000000,%rax
mov    %rax,0x20(%r14)
movsd  0x8(%rbx),%xmm1
addsd  %xmm1,%xmm1
addsd  %xmm0,%xmm1
movslq %ebp,%rax
movsd  %xmm1,(%r14,%rax,8)
movsd  (%rbx),%xmm1
movsd  0x8(%rbx),%xmm2
mulsd  0xe80(%rip),%xmm2
addsd  %xmm1,%xmm1
addsd  %xmm2,%xmm1
movsd  0x10(%rbx),%xmm3
movapd %xmm3,%xmm4
mulsd  %xmm3,%xmm4
addsd  %xmm1,%xmm4
movsd  0xe67(%rip),%xmm2
mulsd  %xmm2,%xmm3
addsd  %xmm4,%xmm3
movsd  0xe5f(%rip),%xmm1
movsd  0x18(%rbx),%xmm4
mulsd  %xmm1,%xmm4
addsd  %xmm3,%xmm4
movsd  0xe52(%rip),%xmm3
addsd  %xmm3,%xmm4
movsd  %xmm4,0x8(%r14,%rax,8)
movsd  0x8(%rbx),%xmm4
movapd %xmm4,%xmm5
addsd  %xmm4,%xmm5
mulsd  %xmm2,%xmm4
mulsd  0x10(%rbx),%xmm5
addsd  %xmm4,%xmm5
movsd  %xmm5,0x10(%r14,%rax,8)
movsd  0x8(%rbx),%xmm4
mulsd  %xmm1,%xmm4
movsd  %xmm4,0x18(%r14,%rax,8)
movabs $0xc024000000000000,%rcx
mov    %rcx,0x20(%r14,%rax,8)
lea    (%rax,%rax,1),%ecx
movsd  0x10(%rbx),%xmm4
movapd %xmm4,%xmm5
addsd  %xmm4,%xmm5
mulsd  %xmm4,%xmm5
mulsd  %xmm2,%xmm4
addsd  %xmm5,%xmm4
lea    0x1(%rax,%rax,1),%edx
movslq %edx,%rdx
movsd  %xmm4,(%r14,%rdx,8)
movsd  0x8(%rbx),%xmm4
movsd  0x10(%rbx),%xmm5
movsd  0xdd4(%rip),%xmm6
movapd %xmm4,%xmm7
mulsd  %xmm6,%xmm7
mulsd  %xmm2,%xmm4
mulsd  %xmm5,%xmm7
mulsd  0xdc4(%rip),%xmm5
addsd  %xmm4,%xmm7
addsd  %xmm7,%xmm5
movsd  0xdbc(%rip),%xmm4
addsd  %xmm4,%xmm5
movslq %ecx,%rcx
movsd  %xmm5,0x10(%r14,%rcx,8)
movabs $0xc020000000000000,%rdx
mov    %rdx,0x20(%r14,%rcx,8)
lea    (%rax,%rax,2),%ecx
movsd  0x18(%rbx),%xmm5
mulsd  %xmm1,%xmm5
movslq %ecx,%rcx
movsd  %xmm5,0x8(%r14,%rcx,8)
mulsd  0x18(%rbx),%xmm6
movsd  0x8(%rbx),%xmm5
mulsd  %xmm1,%xmm5
addsd  %xmm6,%xmm5
movsd  %xmm5,0x18(%r14,%rcx,8)
movabs $0xc044000000000000,%rdx
mov    %rdx,0x20(%r14,%rcx,8)
lea    0x1(,%rax,4),%ecx
lea    0x2(,%rax,4),%edx
lea    0x3(,%rax,4),%esi
shl    $0x2,%eax
addsd  0x8(%rbx),%xmm0
cltq
movsd  %xmm0,(%r14,%rax,8)
movsd  0x8(%rbx),%xmm0
mulsd  0xd37(%rip),%xmm0
movsd  0x10(%rbx),%xmm5
addsd  (%rbx),%xmm0
movapd %xmm5,%xmm6
mulsd  %xmm5,%xmm6
addsd  %xmm0,%xmm6
mulsd  %xmm2,%xmm5
addsd  %xmm6,%xmm5
movsd  0x18(%rbx),%xmm0
mulsd  %xmm1,%xmm0
addsd  %xmm5,%xmm0
addsd  %xmm3,%xmm0
movslq %ecx,%rax
movsd  %xmm0,(%r14,%rax,8)
movsd  0x8(%rbx),%xmm0
movsd  0x10(%rbx),%xmm3
movapd %xmm0,%xmm5
addsd  %xmm0,%xmm5
mulsd  %xmm2,%xmm0
mulsd  %xmm3,%xmm5
mulsd  0xce6(%rip),%xmm3
addsd  %xmm0,%xmm5
addsd  %xmm5,%xmm3
addsd  %xmm4,%xmm3
movslq %edx,%rax
movsd  %xmm3,(%r14,%rax,8)
movsd  0x18(%rbx),%xmm0
mulsd  0x8(%rbx),%xmm1
addsd  %xmm0,%xmm0
addsd  %xmm0,%xmm1
movslq %esi,%rax
movsd  %xmm1,(%r14,%rax,8)
pop    %rbx
pop    %r14
pop    %rbp
ret

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

LLVM IR (-O2):
define void @jaccombust(double* nocapture %0, double* nocapture writeonly %1, i32 %2, i32 %3, i8* nocapture readnone %4) {
%6 = mul i32 %3, %2
%7 = icmp sgt i32 %6, 0
br i1 %7, label %8, label %12
8: ; preds = %5
%9 = bitcast double* %1 to i8*
%10 = zext i32 %6 to i64
%11 = shl nuw nsw i64 %10, 3
br label %12
12: ; preds = %8, %5
%13 = getelementptr inbounds double, double* %0, i64 1
%14 = load double, double* %13
%15 = fadd double %14, 1.000000e+00
store double %15, double* %1
%16 = load double, double* %0
%17 = getelementptr inbounds double, double* %1, i64 1
store double %16, double* %17
%18 = getelementptr inbounds double, double* %1, i64 4
store double -3.000000e+00, double* %18
%19 = load double, double* %13
%20 = tail call double @llvm.fmuladd.f64(double %19, double 2.000000e+00, double 1.000000e+00)
%21 = sext i32 %2 to i64
%22 = getelementptr inbounds double, double* %1, i64 %21
store double %20, double* %22
%23 = load double, double* %0
%24 = load double, double* %13
%25 = fmul double %24, 5.769000e-06
%26 = tail call double @llvm.fmuladd.f64(double %23, double 2.000000e+00, double %25)
%27 = getelementptr inbounds double, double* %0, i64 2
%28 = load double, double* %27
%29 = tail call double @llvm.fmuladd.f64(double %28, double %28, double %26)
%30 = tail call double @llvm.fmuladd.f64(double %28, double 5.451770e-04, double %29)
%31 = getelementptr inbounds double, double* %0, i64 3
%32 = load double, double* %31
%33 = tail call double @llvm.fmuladd.f64(double %32, double 0x3F01DD448B979AB4, double %30)
%34 = fadd double %33, 0x3E9E2EA56B1A3B7B
%35 = add nsw i32 %2, 1
%36 = sext i32 %35 to i64
%37 = getelementptr inbounds double, double* %1, i64 %36
store double %34, double* %37
%38 = load double, double* %13
%39 = fmul double %38, 2.000000e+00
%40 = load double, double* %27
%41 = fmul double %38, 5.451770e-04
%42 = tail call double @llvm.fmuladd.f64(double %39, double %40, double %41)
%43 = add nsw i32 %2, 2
%44 = sext i32 %43 to i64
%45 = getelementptr inbounds double, double* %1, i64 %44
store double %42, double* %45
%46 = load double, double* %13
%47 = fmul double %46, 0x3F01DD448B979AB4
%48 = add nsw i32 %2, 3
%49 = sext i32 %48 to i64
%50 = getelementptr inbounds double, double* %1, i64 %49
store double %47, double* %50
%51 = add nsw i32 %2, 4
%52 = sext i32 %51 to i64
%53 = getelementptr inbounds double, double* %1, i64 %52
store double -1.000000e+01, double* %53
%54 = shl nsw i32 %2, 1
%55 = load double, double* %27
%56 = fmul double %55, 2.000000e+00
%57 = fmul double %55, 5.451770e-04
%58 = tail call double @llvm.fmuladd.f64(double %56, double %55, double %57)
%59 = or i32 %54, 1
%60 = sext i32 %59 to i64
%61 = getelementptr inbounds double, double* %1, i64 %60
store double %58, double* %61
%62 = load double, double* %13
%63 = fmul double %62, 4.000000e+00
%64 = load double, double* %27
%65 = fmul double %62, 5.451770e-04
%66 = tail call double @llvm.fmuladd.f64(double %63, double %64, double %65)
%67 = tail call double @llvm.fmuladd.f64(double %64, double 7.720000e-01, double %66)
%68 = fadd double %67, 0x3F3AE9180F9EE20D
%69 = add nsw i32 %54, 2
%70 = sext i32 %69 to i64
%71 = getelementptr inbounds double, double* %1, i64 %70
store double %68, double* %71
%72 = add nsw i32 %54, 4
%73 = sext i32 %72 to i64
%74 = getelementptr inbounds double, double* %1, i64 %73
store double -8.000000e+00, double* %74
%75 = mul nsw i32 %2, 3
%76 = load double, double* %31
%77 = fmul double %76, 0x3F01DD448B979AB4
%78 = add nsw i32 %75, 1
%79 = sext i32 %78 to i64
%80 = getelementptr inbounds double, double* %1, i64 %79
store double %77, double* %80
%81 = load double, double* %13
%82 = load double, double* %31
%83 = fmul double %82, 4.000000e+00
%84 = tail call double @llvm.fmuladd.f64(double %81, double 0x3F01DD448B979AB4, double %83)
%85 = add nsw i32 %75, 3
%86 = sext i32 %85 to i64
%87 = getelementptr inbounds double, double* %1, i64 %86
store double %84, double* %87
%88 = add nsw i32 %75, 4
%89 = sext i32 %88 to i64
%90 = getelementptr inbounds double, double* %1, i64 %89
store double -4.000000e+01, double* %90
%91 = shl nsw i32 %2, 2
%92 = load double, double* %13
%93 = fadd double %92, 1.000000e+00
%94 = sext i32 %91 to i64
%95 = getelementptr inbounds double, double* %1, i64 %94
store double %93, double* %95
%96 = load double, double* %0
%97 = load double, double* %13
%98 = tail call double @llvm.fmuladd.f64(double %97, double 1.923000e-06, double %96)
%99 = load double, double* %27
%100 = tail call double @llvm.fmuladd.f64(double %99, double %99, double %98)
%101 = tail call double @llvm.fmuladd.f64(double %99, double 5.451770e-04, double %100)
%102 = load double, double* %31
%103 = tail call double @llvm.fmuladd.f64(double %102, double 0x3F01DD448B979AB4, double %101)
%104 = fadd double %103, 0x3E9E2EA56B1A3B7B
%105 = or i32 %91, 1
%106 = sext i32 %105 to i64
%107 = getelementptr inbounds double, double* %1, i64 %106
store double %104, double* %107
%108 = load double, double* %13
%109 = fmul double %108, 2.000000e+00
%110 = load double, double* %27
%111 = fmul double %108, 5.451770e-04
%112 = tail call double @llvm.fmuladd.f64(double %109, double %110, double %111)
%113 = tail call double @llvm.fmuladd.f64(double %110, double 3.860000e-01, double %112)
%114 = fadd double %113, 0x3F3AE9180F9EE20D
%115 = or i32 %91, 2
%116 = sext i32 %115 to i64
%117 = getelementptr inbounds double, double* %1, i64 %116
store double %114, double* %117
%118 = load double, double* %13
%119 = load double, double* %31
%120 = fmul double %119, 2.000000e+00
%121 = tail call double @llvm.fmuladd.f64(double %118, double 0x3F01DD448B979AB4, double %120)
%122 = or i32 %91, 3
%123 = sext i32 %122 to i64
%124 = getelementptr inbounds double, double* %1, i64 %123
store double %121, double* %124
ret void
}