#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
double const pow(double, double const);
void nonlinearADR_pqrstEvaluate(
    const int nPoints, const int nSpace, const double M, const double *A,
    const double *B, const double C, const double p_pow, const double q_pow,
    const double r_pow, const double s_pow, const double t_pow, const double t,
    const double *x, const double *u, double *m, double *dm, double *f,
    double *df, double *a, double *da, double *phi, double *dphi, double *r,
    double *dr) {
  int k, I, J;
  const int nSpace2 = nSpace * nSpace;
  double uPlus, tmp_f, tmp_df, tmp_a, tmp_da;
  const double pM1_pow = p_pow - 1.0, qM1_pow = q_pow - 1.0,
               rM1_pow = r_pow - 1.0, sM1_pow = s_pow - 1.0,
               tM1_pow = t_pow - 1.0;
  for (k = 0; k < nPoints; k++) {
    uPlus = u[k] > 0.0 ? u[k] : 0.0;
    m[k] = p_pow > 1.0 ? M * pow(uPlus, p_pow) : M * u[k];
    dm[k] = p_pow > 1.0 ? p_pow * M * pow(uPlus, pM1_pow) : M;
    tmp_f = q_pow > 1.0 ? pow(uPlus, q_pow) : u[k];
    tmp_df = q_pow > 1.0 ? q_pow * pow(uPlus, qM1_pow) : 1.0;
    tmp_a = t_pow > 0.0 ? pow(uPlus, t_pow) : 1.0;
    tmp_da = t_pow > 0.0 ? t_pow * pow(uPlus, tM1_pow) : 0.0;
    for (I = 0; I < nSpace; I++) {
      f[k * nSpace + I] = B[I] * tmp_f;
      df[k * nSpace + I] = B[I] * tmp_df;
      for (J = 0; J < nSpace; J++) {
        a[k * nSpace2 + I * nSpace + J] = A[I * nSpace + J] * tmp_a;
        da[k * nSpace2 + I * nSpace + J] = A[I * nSpace + J] * tmp_da;
      }
    }
    phi[k] = r_pow > 1.0 ? pow(uPlus, r_pow) : u[k];
    dphi[k] = r_pow > 1.0 ? r_pow * pow(uPlus, rM1_pow) : 1.0;
    r[k] = s_pow > 1.0 ? C * pow(uPlus, s_pow) : C * u[k];
    dr[k] = s_pow > 1.0 ? s_pow * C * pow(uPlus, sM1_pow) : C;
  }
}


x86 assembly (clang, -O0):
<nonlinearADR_pqrstEvaluate>:
push   %rbp
mov    %rsp,%rbp
sub    $0x160,%rsp
mov    0x58(%rbp),%rax
mov    0x50(%rbp),%rax
mov    0x48(%rbp),%rax
mov    0x40(%rbp),%rax
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    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
movsd  %xmm0,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
movsd  %xmm1,-0x28(%rbp)
movsd  %xmm2,-0x30(%rbp)
movsd  %xmm3,-0x38(%rbp)
movsd  %xmm4,-0x40(%rbp)
movsd  %xmm5,-0x48(%rbp)
movsd  %xmm6,-0x50(%rbp)
movsd  %xmm7,-0x58(%rbp)
mov    %r8,-0x60(%rbp)
mov    %r9,-0x68(%rbp)
mov    -0x8(%rbp),%eax
imul   -0x8(%rbp),%eax
mov    %eax,-0x78(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  0xe68(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  0xe4f(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  0xe36(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  0xe1d(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  0xe04(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movl   $0x0,-0x6c(%rbp)
mov    -0x6c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    17e7 <nonlinearADR_pqrstEvaluate+0x6d7>
mov    -0x68(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    124f <nonlinearADR_pqrstEvaluate+0x13f>
mov    -0x68(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
jmp    125f <nonlinearADR_pqrstEvaluate+0x14f>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
jmp    125f <nonlinearADR_pqrstEvaluate+0x14f>
movsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0x80(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  0xd87(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    12bb <nonlinearADR_pqrstEvaluate+0x1ab>
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
call   1030 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0xe0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
jmp    12d5 <nonlinearADR_pqrstEvaluate+0x1c5>
movsd  -0x10(%rbp),%xmm0
mov    -0x68(%rbp),%rax
movslq -0x6c(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xd8(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x30(%rbp),%xmm0
movsd  0xd09(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1341 <nonlinearADR_pqrstEvaluate+0x231>
movsd  -0x30(%rbp),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
movsd  -0xa8(%rbp),%xmm1
ff
call   1030 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0xf0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
jmp    134e <nonlinearADR_pqrstEvaluate+0x23e>
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0xe8(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x38(%rbp),%xmm0
movsd  0xc90(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1396 <nonlinearADR_pqrstEvaluate+0x286>
movsd  -0x80(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm1
call   1030 <pow@plt>
movsd  %xmm0,-0xf8(%rbp)
ff
jmp    13ab <nonlinearADR_pqrstEvaluate+0x29b>
mov    -0x68(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0xf8(%rbp),%xmm0
ff
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  0xc38(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    140d <nonlinearADR_pqrstEvaluate+0x2fd>
movsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
movsd  -0xb0(%rbp),%xmm1
ff
call   1030 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0x108(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
jmp    1422 <nonlinearADR_pqrstEvaluate+0x312>
movsd  0xbeb(%rip),%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
jmp    1422 <nonlinearADR_pqrstEvaluate+0x312>
movsd  -0x100(%rbp),%xmm0
ff
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1460 <nonlinearADR_pqrstEvaluate+0x350>
movsd  -0x80(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm1
call   1030 <pow@plt>
movsd  %xmm0,-0x110(%rbp)
ff
jmp    1475 <nonlinearADR_pqrstEvaluate+0x365>
movsd  0xb98(%rip),%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
jmp    1475 <nonlinearADR_pqrstEvaluate+0x365>
movsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    14d2 <nonlinearADR_pqrstEvaluate+0x3c2>
movsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
movsd  -0xc8(%rbp),%xmm1
ff
call   1030 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0x120(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
jmp    14e2 <nonlinearADR_pqrstEvaluate+0x3d2>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
jmp    14e2 <nonlinearADR_pqrstEvaluate+0x3d2>
movsd  -0x118(%rbp),%xmm0
ff
movsd  %xmm0,-0xa0(%rbp)
ff
movl   $0x0,-0x70(%rbp)
mov    -0x70(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    1609 <nonlinearADR_pqrstEvaluate+0x4f9>
mov    -0x20(%rbp),%rax
movslq -0x70(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mulsd  -0x88(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
mov    -0x6c(%rbp),%ecx
imul   -0x8(%rbp),%ecx
add    -0x70(%rbp),%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%rax
movslq -0x70(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mulsd  -0x90(%rbp),%xmm0
ff
mov    0x28(%rbp),%rax
mov    -0x6c(%rbp),%ecx
imul   -0x8(%rbp),%ecx
add    -0x70(%rbp),%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movl   $0x0,-0x74(%rbp)
mov    -0x74(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    15f6 <nonlinearADR_pqrstEvaluate+0x4e6>
mov    -0x18(%rbp),%rax
mov    -0x70(%rbp),%ecx
imul   -0x8(%rbp),%ecx
add    -0x74(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mulsd  -0x98(%rbp),%xmm0
ff
mov    0x30(%rbp),%rax
mov    -0x6c(%rbp),%ecx
imul   -0x78(%rbp),%ecx
mov    -0x70(%rbp),%edx
imul   -0x8(%rbp),%edx
add    %edx,%ecx
add    -0x74(%rbp),%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x70(%rbp),%ecx
imul   -0x8(%rbp),%ecx
add    -0x74(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mulsd  -0xa0(%rbp),%xmm0
ff
mov    0x38(%rbp),%rax
mov    -0x6c(%rbp),%ecx
imul   -0x78(%rbp),%ecx
mov    -0x70(%rbp),%edx
imul   -0x8(%rbp),%edx
add    %edx,%ecx
add    -0x74(%rbp),%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x74(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x74(%rbp)
jmp    1562 <nonlinearADR_pqrstEvaluate+0x452>
jmp    15fb <nonlinearADR_pqrstEvaluate+0x4eb>
mov    -0x70(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x70(%rbp)
jmp    14f9 <nonlinearADR_pqrstEvaluate+0x3e9>
movsd  -0x40(%rbp),%xmm0
movsd  0x9ea(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    163c <nonlinearADR_pqrstEvaluate+0x52c>
movsd  -0x80(%rbp),%xmm0
movsd  -0x40(%rbp),%xmm1
call   1030 <pow@plt>
movsd  %xmm0,-0x128(%rbp)
ff
jmp    1651 <nonlinearADR_pqrstEvaluate+0x541>
mov    -0x68(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0x128(%rbp),%xmm0
ff
mov    0x40(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x40(%rbp),%xmm0
movsd  0x98d(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    16b8 <nonlinearADR_pqrstEvaluate+0x5a8>
movsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x138(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
movsd  -0xb8(%rbp),%xmm1
ff
call   1030 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0x138(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
jmp    16cd <nonlinearADR_pqrstEvaluate+0x5bd>
movsd  0x940(%rip),%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
jmp    16cd <nonlinearADR_pqrstEvaluate+0x5bd>
movsd  -0x130(%rbp),%xmm0
ff
mov    0x48(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x48(%rbp),%xmm0
movsd  0x911(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1731 <nonlinearADR_pqrstEvaluate+0x621>
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x148(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
movsd  -0x48(%rbp),%xmm1
call   1030 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0x148(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x140(%rbp)
ff
jmp    174b <nonlinearADR_pqrstEvaluate+0x63b>
movsd  -0x28(%rbp),%xmm0
mov    -0x68(%rbp),%rax
movslq -0x6c(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x140(%rbp)
ff
movsd  -0x140(%rbp),%xmm0
ff
mov    0x50(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x48(%rbp),%xmm0
movsd  0x893(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    17b7 <nonlinearADR_pqrstEvaluate+0x6a7>
movsd  -0x48(%rbp),%xmm0
mulsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x158(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
movsd  -0xc0(%rbp),%xmm1
ff
call   1030 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0x158(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x150(%rbp)
ff
jmp    17c4 <nonlinearADR_pqrstEvaluate+0x6b4>
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x150(%rbp)
ff
movsd  -0x150(%rbp),%xmm0
ff
mov    0x58(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x6c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x6c(%rbp)
jmp    120f <nonlinearADR_pqrstEvaluate+0xff>
add    $0x160,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<nonlinearADR_pqrstEvaluate>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x158,%rsp
movsd  %xmm6,0x48(%rsp)
movsd  %xmm4,0x68(%rsp)
movsd  %xmm1,0x60(%rsp)
mov    %rcx,0x150(%rsp)
mov    %rdx,0x28(%rsp)
movsd  %xmm0,0x58(%rsp)
test   %edi,%edi
jle    197a <nonlinearADR_pqrstEvaluate+0x86a>
mov    %r9,%r14
mov    0x1b8(%rsp),%r13
mov    0x1b0(%rsp),%r12
movsd  0xe97(%rip),%xmm0
movapd %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,0xe8(%rsp)
movapd %xmm3,%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,0xe0(%rsp)
movsd  0x68(%rsp),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,0xd8(%rsp)
movapd %xmm5,%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,0xd0(%rsp)
addsd  0x48(%rsp),%xmm0
movsd  %xmm0,0xf0(%rsp)
movsd  0x58(%rsp),%xmm0
mulsd  %xmm2,%xmm0
movsd  %xmm0,0xc8(%rsp)
movsd  0x60(%rsp),%xmm0
mulsd  %xmm5,%xmm0
movsd  %xmm0,0xc0(%rsp)
movslq %esi,%r8
mov    %r8d,%ecx
mov    %r8d,%eax
imul   %eax,%eax
mov    %rax,0x98(%rsp)
lea    0x0(,%rcx,8),%rax
add    %r13,%rax
mov    %ecx,%edx
and    $0xfffffffe,%edx
mov    %rdx,0x120(%rsp)
add    $0xfffffffffffffffe,%rdx
mov    %rdx,0x118(%rsp)
shr    %rdx
add    $0x1,%rdx
mov    %rax,0x130(%rsp)
cmp    %r12,%rax
seta   %r9b
lea    (%r12,%rcx,8),%rax
mov    %rax,0x128(%rsp)
cmp    %r13,%rax
seta   %al
mov    %edi,%edi
mov    %rdi,0x100(%rsp)
mov    %rcx,0x20(%rsp)
and    %r9b,%al
mov    %al,0xf(%rsp)
mov    %rdx,%rax
mov    %rdx,0x110(%rsp)
and    $0xfffffffffffffffe,%rdx
mov    %rdx,0x108(%rsp)
mov    %rcx,%rax
neg    %rax
mov    %rax,0xa8(%rsp)
movsd  0xd81(%rip),%xmm4
lea    -0x1(%rcx),%rax
mov    %rax,0x140(%rsp)
mov    0x28(%rsp),%rax
add    $0x10,%rax
mov    %rax,0xf8(%rsp)
mov    %r8,0xa0(%rsp)
lea    0x0(,%r8,8),%rax
mov    %rax,0x148(%rsp)
movl   $0x2,0x3c(%rsp)
xor    %eax,%eax
mov    %rax,0x78(%rsp)
movl   $0x1,0x38(%rsp)
xor    %ebp,%ebp
movsd  %xmm5,0x88(%rsp)
movsd  %xmm3,0x40(%rsp)
movsd  %xmm2,0x80(%rsp)
mov    %esi,0x1c(%rsp)
mov    %r14,0x90(%rsp)
jmp    138d <nonlinearADR_pqrstEvaluate+0x27d>
xchg   %ax,%ax
movsd  0x10(%rsp),%xmm0
call   1030 <pow@plt>
mulsd  0x60(%rsp),%xmm0
mov    0x1d0(%rsp),%rax
movsd  %xmm0,(%rax,%rbp,8)
movsd  0x10(%rsp),%xmm0
movsd  0xd0(%rsp),%xmm1
call   1030 <pow@plt>
movsd  0xcce(%rip),%xmm4
mulsd  0xc0(%rsp),%xmm0
movsd  0x40(%rsp),%xmm3
movsd  0x80(%rsp),%xmm2
mov    0x1d8(%rsp),%rax
movsd  %xmm0,(%rax,%rbp,8)
add    $0x1,%rbp
mov    0x98(%rsp),%rax
add    %eax,0x3c(%rsp)
mov    0x78(%rsp),%rcx
add    %eax,%ecx
mov    %rcx,0x78(%rsp)
add    %eax,0x38(%rsp)
cmp    0x100(%rsp),%rbp
je     197a <nonlinearADR_pqrstEvaluate+0x86a>
ucomisd %xmm4,%xmm2
movsd  (%r14,%rbp,8),%xmm5
movapd %xmm5,%xmm0
maxsd  0xc6d(%rip),%xmm0
movsd  %xmm0,0x10(%rsp)
jbe    1400 <nonlinearADR_pqrstEvaluate+0x2f0>
movapd %xmm2,%xmm1
call   1030 <pow@plt>
mulsd  0x58(%rsp),%xmm0
mov    0x190(%rsp),%rax
movsd  %xmm0,(%rax,%rbp,8)
movsd  0x10(%rsp),%xmm0
movsd  0xe8(%rsp),%xmm1
call   1030 <pow@plt>
movsd  0xc25(%rip),%xmm4
movsd  0x40(%rsp),%xmm3
mulsd  0xc8(%rsp),%xmm0
jmp    141b <nonlinearADR_pqrstEvaluate+0x30b>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movsd  0x58(%rsp),%xmm1
mulsd  %xmm1,%xmm5
mov    0x190(%rsp),%rax
movsd  %xmm5,(%rax,%rbp,8)
movapd %xmm1,%xmm0
ucomisd %xmm4,%xmm3
mov    0x198(%rsp),%rax
movsd  %xmm0,(%rax,%rbp,8)
jbe    1480 <nonlinearADR_pqrstEvaluate+0x370>
movsd  0x10(%rsp),%xmm0
movapd %xmm3,%xmm1
call   1030 <pow@plt>
movsd  %xmm0,0x30(%rsp)
movsd  0x10(%rsp),%xmm0
movsd  0xe0(%rsp),%xmm1
call   1030 <pow@plt>
movsd  0x30(%rsp),%xmm5
movsd  0xba3(%rip),%xmm4
movapd %xmm0,%xmm6
mulsd  0x40(%rsp),%xmm6
jmp    148a <nonlinearADR_pqrstEvaluate+0x37a>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movsd  (%r14,%rbp,8),%xmm5
movapd %xmm4,%xmm6
mov    0x1c(%rsp),%esi
mov    0x20(%rsp),%rdi
mov    %rbp,0x70(%rsp)
xorpd  %xmm0,%xmm0
movsd  0x48(%rsp),%xmm1
ucomisd %xmm0,%xmm1
movapd %xmm4,%xmm7
jbe    1511 <nonlinearADR_pqrstEvaluate+0x401>
movsd  0x10(%rsp),%xmm0
movsd  0x48(%rsp),%xmm1
movsd  %xmm5,0x30(%rsp)
movsd  %xmm6,0x50(%rsp)
call   1030 <pow@plt>
movaps %xmm0,0xb0(%rsp)
movsd  0x10(%rsp),%xmm0
movsd  0xf0(%rsp),%xmm1
call   1030 <pow@plt>
movapd 0xb0(%rsp),%xmm7
movsd  0x50(%rsp),%xmm6
movsd  0x30(%rsp),%xmm5
movsd  0xb06(%rip),%xmm4
mov    0x20(%rsp),%rdi
mov    0x1c(%rsp),%esi
mulsd  0x48(%rsp),%xmm0
test   %esi,%esi
jle    18b0 <nonlinearADR_pqrstEvaluate+0x7a0>
mov    0x70(%rsp),%rax
mov    %rax,%rcx
imul   0x98(%rsp),%rcx
mov    %rcx,0x50(%rsp)
mov    %rax,%rcx
imul   0xa0(%rsp),%rcx
mov    %rcx,0x30(%rsp)
imul   %esi,%eax
imul   %esi,%eax
mov    %eax,0xb0(%rsp)
movapd %xmm7,%xmm1
unpcklpd %xmm7,%xmm1
movapd %xmm0,%xmm2
unpcklpd %xmm0,%xmm2
mov    0x38(%rsp),%r9d
mov    0x78(%rsp),%r14
mov    0x28(%rsp),%r11
mov    0xf8(%rsp),%rax
mov    0x3c(%rsp),%ebx
xor    %ebp,%ebp
jmp    15a7 <nonlinearADR_pqrstEvaluate+0x497>
nopl   0x0(%rax)
add    $0x1,%rbp
mov    0x1c(%rsp),%esi
add    %esi,%ebx
mov    0x148(%rsp),%rcx
add    %rcx,%rax
add    %rcx,%r11
add    %esi,%r14d
add    %esi,%r9d
cmp    %rdi,%rbp
je     18b0 <nonlinearADR_pqrstEvaluate+0x7a0>
mov    %ebx,%r8d
mov    %rdi,%rbx
mov    %rbp,%r15
imul   0xa0(%rsp),%r15
mov    0x30(%rsp),%rcx
lea    (%rcx,%rbp,1),%rdx
mov    0x150(%rsp),%rcx
movsd  (%rcx,%rbp,8),%xmm3
mulsd  %xmm5,%xmm3
mov    0x1a0(%rsp),%rdi
movsd  %xmm3,(%rdi,%rdx,8)
movsd  (%rcx,%rbp,8),%xmm3
mulsd  %xmm6,%xmm3
mov    0x1a8(%rsp),%rcx
movsd  %xmm3,(%rcx,%rdx,8)
cmp    $0x2,%esi
jae    1610 <nonlinearADR_pqrstEvaluate+0x500>
xor    %esi,%esi
mov    %rbx,%rdi
mov    %r8d,%ebx
jmp    17b0 <nonlinearADR_pqrstEvaluate+0x6a0>
nopl   0x0(%rax,%rax,1)
mov    %ebp,%edx
imul   %ebx,%edx
mov    0x50(%rsp),%rcx
lea    (%rcx,%rdx,1),%esi
mov    0x140(%rsp),%rcx
lea    (%rsi,%rcx,1),%edi
cmp    %esi,%edi
jl     16c4 <nonlinearADR_pqrstEvaluate+0x5b4>
mov    %rcx,%rsi
shr    $0x20,%rsi
mov    $0x0,%esi
mov    0x20(%rsp),%rdi
mov    %r8d,%ebx
jne    17b0 <nonlinearADR_pqrstEvaluate+0x6a0>
lea    (%r15,%rdi,1),%rsi
add    0x50(%rsp),%edx
mov    0x28(%rsp),%rcx
lea    (%rcx,%r15,8),%rdi
lea    (%rcx,%rsi,8),%rsi
movslq %edx,%rdx
lea    (%r12,%rdx,8),%r8
mov    0x128(%rsp),%rcx
lea    (%rcx,%rdx,8),%r10
lea    0x0(%r13,%rdx,8),%rcx
mov    %rcx,0x138(%rsp)
mov    0x130(%rsp),%rcx
lea    (%rcx,%rdx,8),%rdx
cmp    %r10,%rdi
setb   %r10b
cmp    %rsi,%r8
setb   %cl
and    %r10b,%cl
cmp    %rdx,%rdi
setb   %dil
cmp    %rsi,0x138(%rsp)
setb   %dl
and    %dil,%dl
or     %cl,%dl
or     0xf(%rsp),%dl
je     16d3 <nonlinearADR_pqrstEvaluate+0x5c3>
xor    %esi,%esi
mov    0x20(%rsp),%rdi
jmp    17b0 <nonlinearADR_pqrstEvaluate+0x6a0>
xor    %esi,%esi
mov    0x20(%rsp),%rdi
mov    %r8d,%ebx
jmp    17b0 <nonlinearADR_pqrstEvaluate+0x6a0>
cmpq   $0x0,0x118(%rsp)
je     1899 <nonlinearADR_pqrstEvaluate+0x789>
mov    0x108(%rsp),%rdi
mov    %ebx,%edx
xor    %esi,%esi
xchg   %ax,%ax
movupd -0x10(%rax,%rsi,8),%xmm3
mulpd  %xmm1,%xmm3
lea    -0x2(%rdx),%ecx
movslq %ecx,%rcx
movupd %xmm3,(%r12,%rcx,8)
movupd -0x10(%rax,%rsi,8),%xmm3
mulpd  %xmm2,%xmm3
movupd %xmm3,0x0(%r13,%rcx,8)
movupd (%rax,%rsi,8),%xmm3
mulpd  %xmm1,%xmm3
movslq %edx,%rdx
movupd %xmm3,(%r12,%rdx,8)
movupd (%rax,%rsi,8),%xmm3
mulpd  %xmm2,%xmm3
movupd %xmm3,0x0(%r13,%rdx,8)
add    $0x4,%rsi
add    $0x4,%edx
add    $0xfffffffffffffffe,%rdi
jne    16f0 <nonlinearADR_pqrstEvaluate+0x5e0>
testb  $0x1,0x110(%rsp)
01
je     1788 <nonlinearADR_pqrstEvaluate+0x678>
mov    %rsi,%rcx
add    %r15,%rcx
mov    0x28(%rsp),%rdi
movupd (%rdi,%rcx,8),%xmm3
mulpd  %xmm1,%xmm3
lea    (%rsi,%r15,1),%edx
add    0xb0(%rsp),%edx
movslq %edx,%rdx
movupd %xmm3,(%r12,%rdx,8)
movupd (%rdi,%rcx,8),%xmm3
mulpd  %xmm2,%xmm3
movupd %xmm3,0x0(%r13,%rdx,8)
mov    0x120(%rsp),%rcx
mov    %rcx,%rsi
mov    0x20(%rsp),%rdi
cmp    %rdi,%rcx
je     1580 <nonlinearADR_pqrstEvaluate+0x470>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    %rsi,%r8
test   $0x1,%dil
je     17fd <nonlinearADR_pqrstEvaluate+0x6ed>
mov    %r15,%rcx
add    %rsi,%rcx
mov    0x28(%rsp),%rdi
movsd  (%rdi,%rcx,8),%xmm3
mulsd  %xmm7,%xmm3
lea    (%rsi,%r15,1),%edx
add    0xb0(%rsp),%edx
movslq %edx,%rdx
movsd  %xmm3,(%r12,%rdx,8)
movsd  (%rdi,%rcx,8),%xmm3
mov    0x20(%rsp),%rdi
mulsd  %xmm0,%xmm3
movsd  %xmm3,0x0(%r13,%rdx,8)
mov    %rsi,%r8
or     $0x1,%r8
not    %rsi
cmp    0xa8(%rsp),%rsi
je     1580 <nonlinearADR_pqrstEvaluate+0x470>
mov    0xa8(%rsp),%rcx
add    %r8,%rcx
lea    (%r11,%r8,8),%rsi
lea    (%r14,%r8,1),%r10d
add    %r9d,%r8d
mov    $0x1,%r15d
nopw   0x0(%rax,%rax,1)
movsd  -0x8(%rsi,%r15,8),%xmm3
mulsd  %xmm7,%xmm3
movslq %r10d,%r10
movsd  %xmm3,(%r12,%r10,8)
movsd  -0x8(%rsi,%r15,8),%xmm3
mulsd  %xmm0,%xmm3
movsd  %xmm3,0x0(%r13,%r10,8)
movsd  (%rsi,%r15,8),%xmm3
mulsd  %xmm7,%xmm3
movslq %r8d,%r8
movsd  %xmm3,(%r12,%r8,8)
movsd  (%rsi,%r15,8),%xmm3
mulsd  %xmm0,%xmm3
movsd  %xmm3,0x0(%r13,%r8,8)
lea    (%rcx,%r15,1),%rdx
add    $0x2,%rdx
add    $0x2,%r15
add    $0x2,%r10d
add    $0x2,%r8d
cmp    $0x1,%rdx
jne    1830 <nonlinearADR_pqrstEvaluate+0x720>
jmp    1580 <nonlinearADR_pqrstEvaluate+0x470>
xor    %esi,%esi
testb  $0x1,0x110(%rsp)
01
jne    1750 <nonlinearADR_pqrstEvaluate+0x640>
jmp    1788 <nonlinearADR_pqrstEvaluate+0x678>
xchg   %ax,%ax
movsd  0x68(%rsp),%xmm0
ucomisd %xmm4,%xmm0
jbe    1910 <nonlinearADR_pqrstEvaluate+0x800>
movapd %xmm0,%xmm1
movsd  0x10(%rsp),%xmm0
call   1030 <pow@plt>
mov    0x1c0(%rsp),%rax
mov    0x70(%rsp),%rbp
movsd  %xmm0,(%rax,%rbp,8)
movsd  0x10(%rsp),%xmm0
movsd  0xd8(%rsp),%xmm1
call   1030 <pow@plt>
movsd  0x70f(%rip),%xmm4
mulsd  0x68(%rsp),%xmm0
mov    0x90(%rsp),%r14
jmp    1934 <nonlinearADR_pqrstEvaluate+0x824>
nopl   0x0(%rax)
mov    0x90(%rsp),%r14
mov    0x70(%rsp),%rbp
movsd  (%r14,%rbp,8),%xmm0
mov    0x1c0(%rsp),%rax
movsd  %xmm0,(%rax,%rbp,8)
movapd %xmm4,%xmm0
movsd  0x88(%rsp),%xmm1
ucomisd %xmm4,%xmm1
mov    0x1c8(%rsp),%rax
movsd  %xmm0,(%rax,%rbp,8)
ja     1300 <nonlinearADR_pqrstEvaluate+0x1f0>
movsd  (%r14,%rbp,8),%xmm0
movsd  0x60(%rsp),%xmm1
mulsd  %xmm1,%xmm0
mov    0x1d0(%rsp),%rax
movsd  %xmm0,(%rax,%rbp,8)
movapd %xmm1,%xmm0
jmp    1343 <nonlinearADR_pqrstEvaluate+0x233>
add    $0x158,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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