#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 a;
double b;
int /*<<< orphan*/ free(double *);
scalar_t__ malloc(int);
double phi(double);
double grh(double z) {
  double pnorms(double), phi(double), a, b;
  extern int mm;
  extern double *ww, *xx, rs, r1, r32;
  int i, k;
  double tem, sum, tem2, *t;
  t = (double *)malloc((mm + 1) * sizeof(double));
  for (i = 1; i <= mm; i++) {
    a = (ww[i] - rs * z) / r1;
    b = (xx[i] - rs * z) / r1;
    t[i] = pnorms(b) - pnorms(a);
  }
  for (k = 1, sum = 0.; k <= mm; k++) {
    for (i = 1, tem = 1.; i <= mm; i++) {
      if (i != k) {
        tem *= t[i];
      } else {
        a = (ww[i] - rs * z) / r1;
        b = (xx[i] - rs * z) / r1;
        tem2 = phi(b) * (xx[i] - z / rs) - phi(a) * (ww[i] - z / rs);
        tem2 *= .5 / r32;
        tem *= tem2;
      }
    }
    sum += tem;
  }
  tem = sum * phi(z);
  free(t);
  return (tem);
}


x86 assembly (clang, -O0):
<grh>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
movsd  %xmm0,-0x8(%rbp)
mov    0x2ea4(%rip),%rax
mov    (%rax),%eax
add    $0x1,%eax
cltq
shl    $0x3,%rax
mov    %eax,%edi
call   1060 <malloc@plt>
mov    %rax,-0x40(%rbp)
movl   $0x1,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
mov    0x2e7d(%rip),%rcx
cmp    (%rcx),%eax
jg     1267 <grh+0x127>
mov    0x2e3e(%rip),%rax
mov    (%rax),%rax
movslq -0x1c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    0x2e1b(%rip),%rax
movsd  (%rax),%xmm0
movsd  -0x8(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x2e24(%rip),%rax
divsd  (%rax),%xmm0
movsd  %xmm0,-0x10(%rbp)
mov    0x2df4(%rip),%rax
mov    (%rax),%rax
movslq -0x1c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    0x2dc9(%rip),%rax
movsd  (%rax),%xmm0
movsd  -0x8(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x2dd2(%rip),%rax
divsd  (%rax),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
call   1040 <pnorms@plt>
movsd  %xmm0,-0x48(%rbp)
movsd  -0x10(%rbp),%xmm0
call   1040 <pnorms@plt>
movaps %xmm0,%xmm1
movsd  -0x48(%rbp),%xmm0
subsd  %xmm1,%xmm0
mov    -0x40(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1171 <grh+0x31>
movl   $0x1,-0x20(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x20(%rbp),%eax
mov    0x2d78(%rip),%rcx
cmp    (%rcx),%eax
jg     1477 <grh+0x337>
movl   $0x1,-0x1c(%rbp)
movsd  0xd69(%rip),%xmm0
movsd  %xmm0,-0x28(%rbp)
mov    -0x1c(%rbp),%eax
mov    0x2d52(%rip),%rcx
cmp    (%rcx),%eax
jg     145a <grh+0x31a>
mov    -0x1c(%rbp),%eax
cmp    -0x20(%rbp),%eax
je     12d6 <grh+0x196>
mov    -0x40(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mulsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
jmp    1447 <grh+0x307>
mov    0x2ceb(%rip),%rax
mov    (%rax),%rax
movslq -0x1c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    0x2cc8(%rip),%rax
movsd  (%rax),%xmm0
movsd  -0x8(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x2cd1(%rip),%rax
divsd  (%rax),%xmm0
movsd  %xmm0,-0x10(%rbp)
mov    0x2ca1(%rip),%rax
mov    (%rax),%rax
movslq -0x1c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    0x2c76(%rip),%rax
movsd  (%rax),%xmm0
movsd  -0x8(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x2c7f(%rip),%rax
divsd  (%rax),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
call   1050 <phi@plt>
movsd  %xmm0,-0x50(%rbp)
mov    0x2c40(%rip),%rax
mov    (%rax),%rax
movslq -0x1c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x8(%rbp),%xmm1
mov    0x2c10(%rip),%rax
divsd  (%rax),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x10(%rbp),%xmm0
call   1050 <phi@plt>
movsd  -0x58(%rbp),%xmm2
movaps %xmm0,%xmm1
movsd  -0x50(%rbp),%xmm0
mov    0x2bf5(%rip),%rax
mov    (%rax),%rax
movslq -0x1c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm3
movsd  -0x8(%rbp),%xmm4
mov    0x2bcd(%rip),%rax
divsd  (%rax),%xmm4
subsd  %xmm4,%xmm3
mulsd  %xmm3,%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  0xbe5(%rip),%xmm0
mov    0x2b96(%rip),%rax
divsd  (%rax),%xmm0
mulsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
mulsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
jmp    144c <grh+0x30c>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    129c <grh+0x15c>
movsd  -0x28(%rbp),%xmm0
addsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    1276 <grh+0x136>
movsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x8(%rbp),%xmm0
call   1050 <phi@plt>
movaps %xmm0,%xmm1
movsd  -0x60(%rbp),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
mov    -0x40(%rbp),%rdi
call   1030 <free@plt>
movsd  -0x28(%rbp),%xmm0
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<grh>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x38,%rsp
movsd  %xmm0,0x8(%rsp)
mov    0x2e9d(%rip),%r15
mov    (%r15),%eax
lea    0x8(,%rax,8),%edi
call   1060 <malloc@plt>
mov    %rax,%rbp
xorpd  %xmm0,%xmm0
movsd  %xmm0,0x10(%rsp)
cmpl   $0x0,(%r15)
jle    13c5 <grh+0x285>
mov    %rbp,%r14
xor    %ebp,%ebp
mov    0x2e3b(%rip),%r13
mov    0x2e24(%rip),%rdi
movapd 0xe64(%rip),%xmm1
mov    0x2e4d(%rip),%rsi
mov    0x2e26(%rip),%rdx
nopw   0x0(%rax,%rax,1)
mov    0x0(%r13),%rax
movsd  (%rdi),%xmm0
xorpd  %xmm1,%xmm0
mulsd  0x8(%rsp),%xmm0
movsd  0x8(%rax,%rbp,8),%xmm2
addsd  %xmm0,%xmm2
movsd  (%rsi),%xmm1
divsd  %xmm1,%xmm2
movsd  %xmm2,0x20(%rsp)
mov    (%rdx),%rax
addsd  0x8(%rax,%rbp,8),%xmm0
divsd  %xmm1,%xmm0
mov    %rdx,%rbx
call   1040 <pnorms@plt>
movsd  %xmm0,0x18(%rsp)
movsd  0x20(%rsp),%xmm0
call   1040 <pnorms@plt>
mov    %rbx,%rdx
mov    0x2dae(%rip),%rdi
mov    0x2ddf(%rip),%rsi
movapd 0xde7(%rip),%xmm1
movsd  0x18(%rsp),%xmm2
subsd  %xmm0,%xmm2
movsd  %xmm2,0x8(%r14,%rbp,8)
movslq (%r15),%rax
add    $0x1,%rbp
cmp    %rax,%rbp
jl     11b0 <grh+0x70>
test   %eax,%eax
movsd  0x8(%rsp),%xmm3
mov    %r14,%rbp
jle    13cb <grh+0x28b>
xorpd  %xmm0,%xmm0
movsd  %xmm0,0x10(%rsp)
mov    $0x1,%r13d
xor    %r14d,%r14d
jmp    1295 <grh+0x155>
movsd  0xda8(%rip),%xmm2
movsd  0x10(%rsp),%xmm0
addsd  %xmm2,%xmm0
movsd  %xmm0,0x10(%rsp)
lea    0x1(%r13),%r8
mov    %rbp,%rcx
movslq %eax,%rbp
add    $0x1,%r14
cmp    %rbp,%r13
mov    %rcx,%rbp
mov    %r8,%r13
jge    13cb <grh+0x28b>
test   %eax,%eax
jle    1260 <grh+0x120>
xor    %r15d,%r15d
movsd  0xd6c(%rip),%xmm2
jmp    13b3 <grh+0x273>
nopl   0x0(%rax)
mov    0x2d11(%rip),%r12
mov    (%r12),%rax
movsd  (%rdi),%xmm0
xorpd  %xmm1,%xmm0
mulsd  %xmm3,%xmm0
movsd  (%rax,%r13,8),%xmm3
addsd  %xmm0,%xmm3
movsd  (%rsi),%xmm1
divsd  %xmm1,%xmm3
movsd  %xmm3,0x30(%rsp)
mov    (%rdx),%rax
addsd  (%rax,%r13,8),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm2,0x20(%rsp)
call   1050 <phi@plt>
movsd  %xmm0,0x18(%rsp)
mov    (%rbx),%rax
movsd  (%rax,%r13,8),%xmm1
movsd  0x8(%rsp),%xmm0
mov    0x2ca5(%rip),%rax
divsd  (%rax),%xmm0
subsd  %xmm0,%xmm1
movsd  %xmm1,0x28(%rsp)
movsd  0x30(%rsp),%xmm0
call   1050 <phi@plt>
mov    %rbx,%rdx
mov    0x2c82(%rip),%rdi
mov    0x2cb3(%rip),%rsi
movsd  0x8(%rsp),%xmm3
mov    (%r12),%rax
movsd  (%rax,%r13,8),%xmm1
movapd %xmm3,%xmm2
divsd  (%rdi),%xmm2
subsd  %xmm2,%xmm1
movsd  0x20(%rsp),%xmm2
mulsd  %xmm0,%xmm1
movsd  0x28(%rsp),%xmm0
mulsd  0x18(%rsp),%xmm0
subsd  %xmm1,%xmm0
movapd %xmm0,%xmm4
movapd 0xc81(%rip),%xmm1
movsd  0xc91(%rip),%xmm0
mov    0x2c32(%rip),%rax
divsd  (%rax),%xmm0
mulsd  %xmm4,%xmm0
mov    0x2c5b(%rip),%rax
mov    (%rax),%eax
mulsd  %xmm0,%xmm2
movslq %eax,%rcx
add    $0x1,%r15
cmp    %rcx,%r15
jge    1268 <grh+0x128>
cmp    %r15,%r14
je     12b0 <grh+0x170>
movsd  0x8(%rbp,%r15,8),%xmm0
jmp    139f <grh+0x25f>
movsd  0x8(%rsp),%xmm3
movapd %xmm3,%xmm0
call   1050 <phi@plt>
mulsd  0x10(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
mov    %rbp,%rdi
call   1030 <free@plt>
movsd  0x8(%rsp),%xmm0
add    $0x38,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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