#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 */
int exp(double);
double log(int);
double pow(double, int);
double sqrt(double);
void fnKernelMixtureArch_C(double *theta, int *N, double *y, int *n,
                           double *prior, double *d) {
  double alpha01, alpha02, alpha1, p, sigma1, sigma2, tmp1, tmp2, tmp;
  int m1, m2;
  for (int j = 0; j < *N; j++) {
    m1 = 4 * j;
    m2 = 2 * j;
    alpha01 = theta[m1];
    alpha02 = theta[m1 + 1];
    alpha1 = theta[m1 + 2];
    p = theta[m1 + 3];
    if (prior[m2] == 1) {
      tmp = 0;
      for (int i = 1; i < *n; i++) {
        sigma1 = sqrt(alpha01 + alpha1 * pow(y[i - 1], 2));
        sigma2 = sqrt(alpha02 + alpha1 * pow(y[i - 1], 2));
        tmp1 = -0.5 * pow(y[i] / sigma1, 2) - log(sigma1);
        tmp2 = -0.5 * pow(y[i] / sigma2, 2) - log(sigma2);
        tmp = tmp + log(exp(log(p) + tmp1) + exp(log(1 - p) + tmp2));
      }
      d[j] = tmp + prior[m2 + 1];
    } else {
      d[j] = prior[m2 + 1];
    }
  }
}


x86 assembly (clang, -O0):
<fnKernelMixtureArch_C>:
push   %rbp
mov    %rsp,%rbp
sub    $0xd0,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
movl   $0x0,-0x84(%rbp)
mov    -0x84(%rbp),%eax
mov    -0x10(%rbp),%rcx
cmp    (%rcx),%eax
jge    14a6 <fnKernelMixtureArch_C+0x366>
mov    -0x84(%rbp),%eax
shl    $0x2,%eax
mov    %eax,-0x7c(%rbp)
mov    -0x84(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x80(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x7c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x7c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x7c(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x7c(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x28(%rbp),%rax
movslq -0x80(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  0xdfd(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    146b <fnKernelMixtureArch_C+0x32b>
jp     146b <fnKernelMixtureArch_C+0x32b>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x78(%rbp)
movl   $0x1,-0x88(%rbp)
mov    -0x88(%rbp),%eax
mov    -0x20(%rbp),%rcx
cmp    (%rcx),%eax
jge    143f <fnKernelMixtureArch_C+0x2ff>
movsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
mov    -0x18(%rbp),%rax
mov    -0x88(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    $0x2,%edi
call   1050 <pow@plt>
movsd  -0xc8(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0xc0(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1060 <sqrt@plt>
movsd  %xmm0,-0x58(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
mov    -0x18(%rbp),%rax
mov    -0x88(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    $0x2,%edi
call   1050 <pow@plt>
movsd  -0xb8(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0xb0(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1060 <sqrt@plt>
movsd  %xmm0,-0x60(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x88(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
divsd  -0x58(%rbp),%xmm0
mov    $0x2,%edi
call   1050 <pow@plt>
movsd  %xmm0,-0xa8(%rbp)
ff
cvttsd2si -0x58(%rbp),%edi
call   1040 <log@plt>
movaps %xmm0,%xmm1
movsd  -0xa8(%rbp),%xmm0
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  0xcba(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x88(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
divsd  -0x60(%rbp),%xmm0
mov    $0x2,%edi
call   1050 <pow@plt>
movsd  %xmm0,-0xa0(%rbp)
ff
cvttsd2si -0x60(%rbp),%edi
call   1040 <log@plt>
movaps %xmm0,%xmm1
movsd  -0xa0(%rbp),%xmm0
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  0xc52(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
cvttsd2si -0x50(%rbp),%edi
call   1040 <log@plt>
addsd  -0x68(%rbp),%xmm0
call   1030 <exp@plt>
mov    %eax,-0x94(%rbp)
movsd  0xc0e(%rip),%xmm0
subsd  -0x50(%rbp),%xmm0
cvttsd2si %xmm0,%edi
call   1040 <log@plt>
addsd  -0x70(%rbp),%xmm0
call   1030 <exp@plt>
mov    -0x94(%rbp),%edi
add    %eax,%edi
call   1040 <log@plt>
movaps %xmm0,%xmm1
movsd  -0x90(%rbp),%xmm0
ff
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x88(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x88(%rbp)
jmp    1225 <fnKernelMixtureArch_C+0xe5>
movsd  -0x78(%rbp),%xmm0
mov    -0x28(%rbp),%rax
mov    -0x80(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    -0x30(%rbp),%rax
movslq -0x84(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    148d <fnKernelMixtureArch_C+0x34d>
mov    -0x28(%rbp),%rax
mov    -0x80(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x30(%rbp),%rax
movslq -0x84(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    1492 <fnKernelMixtureArch_C+0x352>
mov    -0x84(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x84(%rbp)
jmp    116d <fnKernelMixtureArch_C+0x2d>
add    $0xd0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<fnKernelMixtureArch_C>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x68,%rsp
mov    %rcx,0x18(%rsp)
mov    %rdi,0x38(%rsp)
mov    %rsi,0x40(%rsp)
mov    (%rsi),%eax
test   %eax,%eax
jle    13c3 <fnKernelMixtureArch_C+0x283>
mov    %rdx,%rbx
xor    %r15d,%r15d
movsd  0xe8b(%rip),%xmm1
mov    %r9,0x30(%rsp)
mov    %r8,0x28(%rsp)
jmp    11d2 <fnKernelMixtureArch_C+0x92>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    0x40(%rsp),%rax
mov    (%rax),%eax
mov    0x30(%rsp),%r9
mov    0x28(%rsp),%r8
movsd  0xe57(%rip),%xmm1
mov    0x48(%rsp),%rdx
shl    $0x3,%rdx
or     $0x8,%rdx
addsd  (%r8,%rdx,1),%xmm0
movsd  %xmm0,(%r9,%r15,8)
add    $0x1,%r15
movslq %eax,%rcx
cmp    %rcx,%r15
jge    13c3 <fnKernelMixtureArch_C+0x283>
lea    (%r15,%r15,1),%rdx
mov    %r15,%rcx
shl    $0x4,%rcx
movsd  (%r8,%rcx,1),%xmm0
ucomisd %xmm1,%xmm0
jne    13b0 <fnKernelMixtureArch_C+0x270>
jp     13b0 <fnKernelMixtureArch_C+0x270>
xorpd  %xmm0,%xmm0
mov    0x18(%rsp),%rcx
cmpl   $0x2,(%rcx)
jl     11ae <fnKernelMixtureArch_C+0x6e>
mov    %rdx,0x48(%rsp)
mov    %r15,%rax
shl    $0x5,%rax
mov    0x38(%rsp),%rcx
movsd  (%rcx,%rax,1),%xmm0
movsd  %xmm0,0x58(%rsp)
movsd  0x8(%rcx,%rax,1),%xmm0
movsd  %xmm0,0x50(%rsp)
movsd  0x10(%rcx,%rax,1),%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  0x18(%rcx,%rax,1),%xmm0
cvttsd2si %xmm0,%r13d
subsd  %xmm0,%xmm1
cvttsd2si %xmm1,%r14d
xorpd  %xmm0,%xmm0
mov    $0x1,%r12d
jmp    133b <fnKernelMixtureArch_C+0x1fb>
nopl   0x0(%rax,%rax,1)
call   1060 <sqrt@plt>
movsd  %xmm0,0x8(%rsp)
movsd  (%rbx,%r12,8),%xmm0
divsd  (%rsp),%xmm0
mov    $0x2,%edi
call   1050 <pow@plt>
movsd  %xmm0,0x10(%rsp)
cvttsd2si (%rsp),%edi
call   1040 <log@plt>
movsd  0xd70(%rip),%xmm2
movsd  0x10(%rsp),%xmm1
mulsd  %xmm2,%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,0x10(%rsp)
movsd  (%rbx,%r12,8),%xmm0
divsd  0x8(%rsp),%xmm0
mov    $0x2,%edi
call   1050 <pow@plt>
movsd  %xmm0,(%rsp)
cvttsd2si 0x8(%rsp),%edi
call   1040 <log@plt>
movsd  (%rsp),%xmm1
mulsd  0xd29(%rip),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,(%rsp)
mov    %r13d,%edi
call   1040 <log@plt>
addsd  0x10(%rsp),%xmm0
call   1030 <exp@plt>
mov    %eax,%ebp
mov    %r14d,%edi
call   1040 <log@plt>
addsd  (%rsp),%xmm0
call   1030 <exp@plt>
add    %eax,%ebp
mov    %ebp,%edi
call   1040 <log@plt>
movsd  0x60(%rsp),%xmm1
addsd  %xmm0,%xmm1
movapd %xmm1,%xmm0
add    $0x1,%r12
mov    0x18(%rsp),%rax
movslq (%rax),%rax
cmp    %rax,%r12
jge    1190 <fnKernelMixtureArch_C+0x50>
movsd  %xmm0,0x60(%rsp)
movsd  -0x8(%rbx,%r12,8),%xmm0
mov    $0x2,%edi
call   1050 <pow@plt>
mulsd  0x20(%rsp),%xmm0
addsd  0x58(%rsp),%xmm0
ucomisd 0xcaa(%rip),%xmm0
jb     1370 <fnKernelMixtureArch_C+0x230>
sqrtsd %xmm0,%xmm0
jmp    1375 <fnKernelMixtureArch_C+0x235>
xchg   %ax,%ax
call   1060 <sqrt@plt>
movsd  %xmm0,(%rsp)
movsd  -0x8(%rbx,%r12,8),%xmm0
mov    $0x2,%edi
call   1050 <pow@plt>
mulsd  0x20(%rsp),%xmm0
addsd  0x50(%rsp),%xmm0
ucomisd 0xc71(%rip),%xmm0
jb     1260 <fnKernelMixtureArch_C+0x120>
sqrtsd %xmm0,%xmm0
jmp    1265 <fnKernelMixtureArch_C+0x125>
xchg   %ax,%ax
shl    $0x3,%rdx
or     $0x8,%rdx
movsd  (%r8,%rdx,1),%xmm0
jmp    11bc <fnKernelMixtureArch_C+0x7c>
add    $0x68,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define void @fnKernelMixtureArch_C(double* nocapture %0, i32* nocapture %1, double* nocapture %2, i32* nocapture %3, double* nocapture %4, double* nocapture writeonly %5) {
%7 = load i32, i32* %1
%8 = icmp sgt i32 %7, 0
br i1 %8, label %10, label %9
9: ; preds = %91, %6
ret void
10: ; preds = %6, %91
%11 = phi i32 [ %93, %91 ], [ %7, %6 ]
%12 = phi i32 [ %94, %91 ], [ %7, %6 ]
%13 = phi i64 [ %96, %91 ], [ 0, %6 ]
%14 = shl nsw i64 %13, 2
%15 = shl nuw nsw i64 %13, 1
%16 = getelementptr inbounds double, double* %0, i64 %14
%17 = load double, double* %16
%18 = or i64 %14, 1
%19 = getelementptr inbounds double, double* %0, i64 %18
%20 = load double, double* %19
%21 = or i64 %14, 2
%22 = getelementptr inbounds double, double* %0, i64 %21
%23 = load double, double* %22
%24 = or i64 %14, 3
%25 = getelementptr inbounds double, double* %0, i64 %24
%26 = load double, double* %25
%27 = getelementptr inbounds double, double* %4, i64 %15
%28 = load double, double* %27
%29 = fcmp oeq double %28, 1.000000e+00
br i1 %29, label %30, label %87
30: ; preds = %10
%31 = load i32, i32* %3
%32 = icmp sgt i32 %31, 1
br i1 %32, label %33, label %39
33: ; preds = %30
%34 = fptosi double %26 to i32
%35 = fsub double 1.000000e+00, %26
%36 = fptosi double %35 to i32
br label %46
37: ; preds = %46
%38 = load i32, i32* %1
br label %39
39: ; preds = %37, %30
%40 = phi i32 [ %11, %30 ], [ %38, %37 ]
%41 = phi double [ 0.000000e+00, %30 ], [ %82, %37 ]
%42 = or i64 %15, 1
%43 = getelementptr inbounds double, double* %4, i64 %42
%44 = load double, double* %43
%45 = fadd double %41, %44
br label %91
46: ; preds = %33, %46
%47 = phi i64 [ 1, %33 ], [ %83, %46 ]
%48 = phi double [ 0.000000e+00, %33 ], [ %82, %46 ]
%49 = add nsw i64 %47, -1
%50 = getelementptr inbounds double, double* %2, i64 %49
%51 = load double, double* %50
%52 = tail call double @pow(double %51, i32 2)
%53 = tail call double @llvm.fmuladd.f64(double %23, double %52, double %17)
%54 = tail call double @sqrt(double %53)
%55 = load double, double* %50
%56 = tail call double @pow(double %55, i32 2)
%57 = tail call double @llvm.fmuladd.f64(double %23, double %56, double %20)
%58 = tail call double @sqrt(double %57)
%59 = getelementptr inbounds double, double* %2, i64 %47
%60 = load double, double* %59
%61 = fdiv double %60, %54
%62 = tail call double @pow(double %61, i32 2)
%63 = fptosi double %54 to i32
%64 = tail call double @log(i32 %63)
%65 = fneg double %64
%66 = tail call double @llvm.fmuladd.f64(double %62, double -5.000000e-01, double %65)
%67 = load double, double* %59
%68 = fdiv double %67, %58
%69 = tail call double @pow(double %68, i32 2)
%70 = fptosi double %58 to i32
%71 = tail call double @log(i32 %70)
%72 = fneg double %71
%73 = tail call double @llvm.fmuladd.f64(double %69, double -5.000000e-01, double %72)
%74 = tail call double @log(i32 %34)
%75 = fadd double %66, %74
%76 = tail call i32 @exp(double %75)
%77 = tail call double @log(i32 %36)
%78 = fadd double %73, %77
%79 = tail call i32 @exp(double %78)
%80 = add nsw i32 %79, %76
%81 = tail call double @log(i32 %80)
%82 = fadd double %48, %81
%83 = add nuw nsw i64 %47, 1
%84 = load i32, i32* %3
%85 = sext i32 %84 to i64
%86 = icmp slt i64 %83, %85
br i1 %86, label %46, label %37
87: ; preds = %10
%88 = or i64 %15, 1
%89 = getelementptr inbounds double, double* %4, i64 %88
%90 = load double, double* %89
br label %91
91: ; preds = %39, %87
%92 = phi double [ %45, %39 ], [ %90, %87 ]
%93 = phi i32 [ %40, %39 ], [ %11, %87 ]
%94 = phi i32 [ %40, %39 ], [ %12, %87 ]
%95 = getelementptr inbounds double, double* %5, i64 %13
store double %92, double* %95
%96 = add nuw nsw i64 %13, 1
%97 = sext i32 %94 to i64
%98 = icmp slt i64 %96, %97
br i1 %98, label %10, label %9
}