#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 */
typedef scalar_t__ uint;

/* Variables and functions */
int /*<<< orphan*/ DC(double, double *, scalar_t__ *, scalar_t__, double,
                      double, double);
double drand49();
double fabs(double);
double pow(double, double);
void UNIFNOISE(double mean, double stdv, double *output, uint *index, uint Ni,
               double expon, double srate, double dt) {
  uint i;
  if (stdv == 0.) {
    DC(mean, output, index, Ni, expon, srate, dt);
    return;
  }
  if (expon == -1)
    for (i = 0; i < Ni; i++)
      output[(*index)++] =
          fabs(mean + stdv * 3.464101615137754 * (drand49() - 0.5));
  else if (expon == 0)
    for (i = 0; i < Ni; i++)
      output[(*index)++] =
          (((mean + stdv * 3.464101615137754 * (drand49() - 0.5)) > 0)
               ? mean + stdv * 3.464101615137754 * (drand49() - 0.5)
               : 0.);
  else if (expon != 1)
    for (i = 0; i < Ni; i++)
      output[(*index)++] =
          pow(mean + stdv * 3.464101615137754 * (drand49() - 0.5), expon);
  else
    for (i = 0; i < Ni; i++)
      output[(*index)++] = mean + stdv * 3.464101615137754 * (drand49() - 0.5);
  return;
}


x86 assembly (clang, -O0):
<UNIFNOISE>:
push   %rbp
mov    %rsp,%rbp
sub    $0xa0,%rsp
movsd  %xmm0,-0x8(%rbp)
movsd  %xmm1,-0x10(%rbp)
mov    %rdi,-0x18(%rbp)
mov    %rsi,-0x20(%rbp)
mov    %rdx,-0x28(%rbp)
movsd  %xmm2,-0x30(%rbp)
movsd  %xmm3,-0x38(%rbp)
movsd  %xmm4,-0x40(%rbp)
movsd  -0x10(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    11a2 <UNIFNOISE+0x72>
jp     11a2 <UNIFNOISE+0x72>
movsd  -0x8(%rbp),%xmm0
mov    -0x18(%rbp),%rdi
mov    -0x20(%rbp),%rsi
mov    -0x28(%rbp),%rdx
movsd  -0x30(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm3
call   1030 <DC@plt>
jmp    14ca <UNIFNOISE+0x39a>
movsd  -0x30(%rbp),%xmm0
movsd  0xe51(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    1254 <UNIFNOISE+0x124>
jp     1254 <UNIFNOISE+0x124>
movq   $0x0,-0x48(%rbp)
mov    -0x48(%rbp),%rax
cmp    -0x28(%rbp),%rax
jge    124f <UNIFNOISE+0x11f>
movsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  0xe31(%rip),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    $0x0,%al
call   1050 <drand49@plt>
movsd  -0x58(%rbp),%xmm1
movaps %xmm0,%xmm2
movsd  -0x50(%rbp),%xmm0
movsd  0xe03(%rip),%xmm3
subsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movaps 0xe00(%rip),%xmm1
pand   %xmm1,%xmm0
mov    -0x18(%rbp),%rax
mov    -0x20(%rbp),%rdx
mov    (%rdx),%rcx
mov    %rcx,%rsi
add    $0x1,%rsi
mov    %rsi,(%rdx)
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x48(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x48(%rbp)
jmp    11c7 <UNIFNOISE+0x97>
jmp    14c5 <UNIFNOISE+0x395>
movsd  -0x30(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1363 <UNIFNOISE+0x233>
jp     1363 <UNIFNOISE+0x233>
movq   $0x0,-0x48(%rbp)
mov    -0x48(%rbp),%rax
cmp    -0x28(%rbp),%rax
jge    135e <UNIFNOISE+0x22e>
movsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  0xd84(%rip),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    $0x0,%al
call   1050 <drand49@plt>
movsd  -0x68(%rbp),%xmm1
movaps %xmm0,%xmm2
movsd  -0x60(%rbp),%xmm0
movsd  0xd56(%rip),%xmm3
subsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1321 <UNIFNOISE+0x1f1>
movsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  0xd33(%rip),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    $0x0,%al
call   1050 <drand49@plt>
movsd  -0x80(%rbp),%xmm1
movaps %xmm0,%xmm2
movsd  -0x78(%rbp),%xmm0
movsd  0xd05(%rip),%xmm3
subsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
jmp    132e <UNIFNOISE+0x1fe>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x70(%rbp)
jmp    132e <UNIFNOISE+0x1fe>
movsd  -0x70(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x20(%rbp),%rdx
mov    (%rdx),%rcx
mov    %rcx,%rsi
add    $0x1,%rsi
mov    %rsi,(%rdx)
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x48(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x48(%rbp)
jmp    1274 <UNIFNOISE+0x144>
jmp    14c0 <UNIFNOISE+0x390>
movsd  -0x30(%rbp),%xmm0
movsd  0xc98(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    1385 <UNIFNOISE+0x255>
jp     1385 <UNIFNOISE+0x255>
jmp    1425 <UNIFNOISE+0x2f5>
movq   $0x0,-0x48(%rbp)
mov    -0x48(%rbp),%rax
cmp    -0x28(%rbp),%rax
jge    1420 <UNIFNOISE+0x2f0>
movsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  0xc68(%rip),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    $0x0,%al
call   1050 <drand49@plt>
movsd  -0x90(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x88(%rbp),%xmm0
ff
movsd  0xc31(%rip),%xmm3
subsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x30(%rbp),%xmm1
call   1040 <pow@plt>
mov    -0x18(%rbp),%rax
mov    -0x20(%rbp),%rdx
mov    (%rdx),%rcx
mov    %rcx,%rsi
add    $0x1,%rsi
mov    %rsi,(%rdx)
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x48(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x48(%rbp)
jmp    138d <UNIFNOISE+0x25d>
jmp    14bb <UNIFNOISE+0x38b>
movq   $0x0,-0x48(%rbp)
mov    -0x48(%rbp),%rax
cmp    -0x28(%rbp),%rax
jge    14b6 <UNIFNOISE+0x386>
movsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  0xbc8(%rip),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    $0x0,%al
call   1050 <drand49@plt>
movsd  -0xa0(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x98(%rbp),%xmm0
ff
movsd  0xb91(%rip),%xmm3
subsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
mov    -0x20(%rbp),%rdx
mov    (%rdx),%rcx
mov    %rcx,%rsi
add    $0x1,%rsi
mov    %rsi,(%rdx)
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x48(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x48(%rbp)
jmp    142d <UNIFNOISE+0x2fd>
jmp    14bb <UNIFNOISE+0x38b>
jmp    14c0 <UNIFNOISE+0x390>
jmp    14c5 <UNIFNOISE+0x395>
jmp    14ca <UNIFNOISE+0x39a>
add    $0xa0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<UNIFNOISE>:
push   %r15
push   %r14
push   %rbx
sub    $0x20,%rsp
mov    %rdx,%rbx
mov    %rsi,%r14
mov    %rdi,%r15
xorpd  %xmm5,%xmm5
ucomisd %xmm5,%xmm1
jne    116e <UNIFNOISE+0x3e>
jp     116e <UNIFNOISE+0x3e>
mov    %r15,%rdi
mov    %r14,%rsi
mov    %rbx,%rdx
movaps %xmm2,%xmm1
movaps %xmm3,%xmm2
movaps %xmm4,%xmm3
add    $0x20,%rsp
pop    %rbx
pop    %r14
pop    %r15
jmp    1030 <DC@plt>
ucomisd 0xe8a(%rip),%xmm2
jne    11f7 <UNIFNOISE+0xc7>
jp     11f7 <UNIFNOISE+0xc7>
test   %rbx,%rbx
movsd  %xmm1,0x8(%rsp)
jle    11ed <UNIFNOISE+0xbd>
movapd %xmm0,%xmm2
movsd  0x8(%rsp),%xmm0
mulsd  0xe79(%rip),%xmm0
movsd  %xmm0,0x8(%rsp)
movsd  %xmm2,0x10(%rsp)
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
xor    %eax,%eax
call   1050 <drand49@plt>
movsd  0x10(%rsp),%xmm2
addsd  0xe53(%rip),%xmm0
mulsd  0x8(%rsp),%xmm0
addsd  %xmm2,%xmm0
andpd  0xe49(%rip),%xmm0
mov    (%r14),%rax
lea    0x1(%rax),%rcx
mov    %rcx,(%r14)
movlpd %xmm0,(%r15,%rax,8)
add    $0xffffffffffffffff,%rbx
jne    11b0 <UNIFNOISE+0x80>
add    $0x20,%rsp
pop    %rbx
pop    %r14
pop    %r15
ret
xorpd  %xmm3,%xmm3
ucomisd %xmm3,%xmm2
jne    127c <UNIFNOISE+0x14c>
jp     127c <UNIFNOISE+0x14c>
test   %rbx,%rbx
jle    11ed <UNIFNOISE+0xbd>
mulsd  0xe00(%rip),%xmm1
movsd  %xmm0,0x10(%rsp)
movsd  %xmm1,0x8(%rsp)
jmp    1236 <UNIFNOISE+0x106>
xchg   %ax,%ax
mov    (%r14),%rax
lea    0x1(%rax),%rcx
mov    %rcx,(%r14)
movsd  %xmm0,(%r15,%rax,8)
add    $0xffffffffffffffff,%rbx
je     11ed <UNIFNOISE+0xbd>
xor    %eax,%eax
call   1050 <drand49@plt>
movapd %xmm0,%xmm1
addsd  0xdcf(%rip),%xmm1
mulsd  0x8(%rsp),%xmm1
addsd  0x10(%rsp),%xmm1
xorpd  %xmm0,%xmm0
ucomisd %xmm0,%xmm1
jbe    1220 <UNIFNOISE+0xf0>
xor    %eax,%eax
call   1050 <drand49@plt>
addsd  0xdaa(%rip),%xmm0
mulsd  0x8(%rsp),%xmm0
addsd  0x10(%rsp),%xmm0
jmp    1220 <UNIFNOISE+0xf0>
ucomisd 0xd84(%rip),%xmm2
movsd  %xmm1,0x8(%rsp)
jne    128e <UNIFNOISE+0x15e>
jnp    1301 <UNIFNOISE+0x1d1>
test   %rbx,%rbx
movsd  %xmm0,0x10(%rsp)
movsd  %xmm2,0x18(%rsp)
jle    11ed <UNIFNOISE+0xbd>
movsd  0x8(%rsp),%xmm0
mulsd  0xd5f(%rip),%xmm0
movsd  %xmm0,0x8(%rsp)
nopw   0x0(%rax,%rax,1)
xor    %eax,%eax
call   1050 <drand49@plt>
addsd  0xd49(%rip),%xmm0
mulsd  0x8(%rsp),%xmm0
addsd  0x10(%rsp),%xmm0
movsd  0x18(%rsp),%xmm1
call   1040 <pow@plt>
mov    (%r14),%rax
lea    0x1(%rax),%rcx
mov    %rcx,(%r14)
movsd  %xmm0,(%r15,%rax,8)
add    $0xffffffffffffffff,%rbx
jne    12c0 <UNIFNOISE+0x190>
jmp    11ed <UNIFNOISE+0xbd>
test   %rbx,%rbx
jle    11ed <UNIFNOISE+0xbd>
movapd %xmm0,%xmm2
movsd  0x8(%rsp),%xmm0
mulsd  0xcf4(%rip),%xmm0
movsd  %xmm0,0x8(%rsp)
movsd  %xmm2,0x10(%rsp)
nopl   0x0(%rax,%rax,1)
xor    %eax,%eax
call   1050 <drand49@plt>
movsd  0x10(%rsp),%xmm2
addsd  0xcd3(%rip),%xmm0
mulsd  0x8(%rsp),%xmm0
addsd  %xmm2,%xmm0
mov    (%r14),%rax
lea    0x1(%rax),%rcx
mov    %rcx,(%r14)
movsd  %xmm0,(%r15,%rax,8)
add    $0xffffffffffffffff,%rbx
jne    1330 <UNIFNOISE+0x200>
jmp    11ed <UNIFNOISE+0xbd>

LLVM IR (-O0):
define void @UNIFNOISE(double %0, double %1, double* %2, i64* %3, i64 %4, double %5, double %6, double %7) {
%9 = alloca double
%10 = alloca double
%11 = alloca double*
%12 = alloca i64*
%13 = alloca i64
%14 = alloca double
%15 = alloca double
%16 = alloca double
%17 = alloca i64
store double %0, double* %9
store double %1, double* %10
store double* %2, double** %11
store i64* %3, i64** %12
store i64 %4, i64* %13
store double %5, double* %14
store double %6, double* %15
store double %7, double* %16
%18 = load double, double* %10
%19 = fcmp oeq double %18, 0.000000e+00
br i1 %19, label %20, label %29
20: ; preds = %8
%21 = load double, double* %9
%22 = load double*, double** %11
%23 = load i64*, i64** %12
%24 = load i64, i64* %13
%25 = load double, double* %14
%26 = load double, double* %15
%27 = load double, double* %16
%28 = call i32 @DC(double %21, double* %22, i64* %23, i64 %24, double %25, double %26, double %27)
br label %139
29: ; preds = %8
%30 = load double, double* %14
%31 = fcmp oeq double %30, -1.000000e+00
br i1 %31, label %32, label %54
32: ; preds = %29
store i64 0, i64* %17
br label %33
33: ; preds = %50, %32
%34 = load i64, i64* %17
%35 = load i64, i64* %13
%36 = icmp slt i64 %34, %35
br i1 %36, label %37, label %53
37: ; preds = %33
%38 = load double, double* %9
%39 = load double, double* %10
%40 = fmul double %39, 0x400BB67AE8584CA9
%41 = call double (...) @drand49()
%42 = fsub double %41, 5.000000e-01
%43 = call double @llvm.fmuladd.f64(double %40, double %42, double %38)
%44 = call double @llvm.fabs.f64(double %43)
%45 = load double*, double** %11
%46 = load i64*, i64** %12
%47 = load i64, i64* %46
%48 = add nsw i64 %47, 1
store i64 %48, i64* %46
%49 = getelementptr inbounds double, double* %45, i64 %47
store double %44, double* %49
br label %50
50: ; preds = %37
%51 = load i64, i64* %17
%52 = add nsw i64 %51, 1
store i64 %52, i64* %17
br label %33
53: ; preds = %33
br label %138
54: ; preds = %29
%55 = load double, double* %14
%56 = fcmp oeq double %55, 0.000000e+00
br i1 %56, label %57, label %89
57: ; preds = %54
store i64 0, i64* %17
br label %58
58: ; preds = %85, %57
%59 = load i64, i64* %17
%60 = load i64, i64* %13
%61 = icmp slt i64 %59, %60
br i1 %61, label %62, label %88
62: ; preds = %58
%63 = load double, double* %9
%64 = load double, double* %10
%65 = fmul double %64, 0x400BB67AE8584CA9
%66 = call double (...) @drand49()
%67 = fsub double %66, 5.000000e-01
%68 = call double @llvm.fmuladd.f64(double %65, double %67, double %63)
%69 = fcmp ogt double %68, 0.000000e+00
br i1 %69, label %70, label %77
70: ; preds = %62
%71 = load double, double* %9
%72 = load double, double* %10
%73 = fmul double %72, 0x400BB67AE8584CA9
%74 = call double (...) @drand49()
%75 = fsub double %74, 5.000000e-01
%76 = call double @llvm.fmuladd.f64(double %73, double %75, double %71)
br label %78
77: ; preds = %62
br label %78
78: ; preds = %77, %70
%79 = phi double [ %76, %70 ], [ 0.000000e+00, %77 ]
%80 = load double*, double** %11
%81 = load i64*, i64** %12
%82 = load i64, i64* %81
%83 = add nsw i64 %82, 1
store i64 %83, i64* %81
%84 = getelementptr inbounds double, double* %80, i64 %82
store double %79, double* %84
br label %85
85: ; preds = %78
%86 = load i64, i64* %17
%87 = add nsw i64 %86, 1
store i64 %87, i64* %17
br label %58
88: ; preds = %58
br label %137
89: ; preds = %54
%90 = load double, double* %14
%91 = fcmp une double %90, 1.000000e+00
br i1 %91, label %92, label %115
92: ; preds = %89
store i64 0, i64* %17
br label %93
93: ; preds = %111, %92
%94 = load i64, i64* %17
%95 = load i64, i64* %13
%96 = icmp slt i64 %94, %95
br i1 %96, label %97, label %114
97: ; preds = %93
%98 = load double, double* %9
%99 = load double, double* %10
%100 = fmul double %99, 0x400BB67AE8584CA9
%101 = call double (...) @drand49()
%102 = fsub double %101, 5.000000e-01
%103 = call double @llvm.fmuladd.f64(double %100, double %102, double %98)
%104 = load double, double* %14
%105 = call double @pow(double %103, double %104)
%106 = load double*, double** %11
%107 = load i64*, i64** %12
%108 = load i64, i64* %107
%109 = add nsw i64 %108, 1
store i64 %109, i64* %107
%110 = getelementptr inbounds double, double* %106, i64 %108
store double %105, double* %110
br label %111
111: ; preds = %97
%112 = load i64, i64* %17
%113 = add nsw i64 %112, 1
store i64 %113, i64* %17
br label %93
114: ; preds = %93
br label %136
115: ; preds = %89
store i64 0, i64* %17
br label %116
116: ; preds = %132, %115
%117 = load i64, i64* %17
%118 = load i64, i64* %13
%119 = icmp slt i64 %117, %118
br i1 %119, label %120, label %135
120: ; preds = %116
%121 = load double, double* %9
%122 = load double, double* %10
%123 = fmul double %122, 0x400BB67AE8584CA9
%124 = call double (...) @drand49()
%125 = fsub double %124, 5.000000e-01
%126 = call double @llvm.fmuladd.f64(double %123, double %125, double %121)
%127 = load double*, double** %11
%128 = load i64*, i64** %12
%129 = load i64, i64* %128
%130 = add nsw i64 %129, 1
store i64 %130, i64* %128
%131 = getelementptr inbounds double, double* %127, i64 %129
store double %126, double* %131
br label %132
132: ; preds = %120
%133 = load i64, i64* %17
%134 = add nsw i64 %133, 1
store i64 %134, i64* %17
br label %116
135: ; preds = %116
br label %136
136: ; preds = %135, %114
br label %137
137: ; preds = %136, %88
br label %138
138: ; preds = %137, %53
br label %139
139: ; preds = %138, %20
ret void
}

LLVM IR (-O2):
define void @UNIFNOISE(double %0, double %1, double* %2, i64* %3, i64 %4, double %5, double %6, double %7) {
%9 = fcmp oeq double %1, 0.000000e+00
br i1 %9, label %10, label %12
10: ; preds = %8
%11 = tail call i32 @DC(double %0, double* %2, i64* %3, i64 %4, double %5, double %6, double %7)
br label %82
12: ; preds = %8
%13 = fcmp oeq double %5, -1.000000e+00
br i1 %13, label %14, label %29
14: ; preds = %12
%15 = icmp sgt i64 %4, 0
br i1 %15, label %16, label %82
16: ; preds = %14
%17 = fmul double %1, 0x400BB67AE8584CA9
br label %18
18: ; preds = %16, %18
%19 = phi i64 [ 0, %16 ], [ %27, %18 ]
%20 = tail call double (...) @drand49()
%21 = fadd double %20, -5.000000e-01
%22 = tail call double @llvm.fmuladd.f64(double %17, double %21, double %0)
%23 = tail call double @llvm.fabs.f64(double %22)
%24 = load i64, i64* %3
%25 = add nsw i64 %24, 1
store i64 %25, i64* %3
%26 = getelementptr inbounds double, double* %2, i64 %24
store double %23, double* %26
%27 = add nuw nsw i64 %19, 1
%28 = icmp eq i64 %27, %4
br i1 %28, label %82, label %18
29: ; preds = %12
%30 = fcmp oeq double %5, 0.000000e+00
br i1 %30, label %31, label %52
31: ; preds = %29
%32 = icmp sgt i64 %4, 0
br i1 %32, label %33, label %82
33: ; preds = %31
%34 = fmul double %1, 0x400BB67AE8584CA9
br label %35
35: ; preds = %33, %45
%36 = phi i64 [ 0, %33 ], [ %50, %45 ]
%37 = tail call double (...) @drand49()
%38 = fadd double %37, -5.000000e-01
%39 = tail call double @llvm.fmuladd.f64(double %34, double %38, double %0)
%40 = fcmp ogt double %39, 0.000000e+00
br i1 %40, label %41, label %45
41: ; preds = %35
%42 = tail call double (...) @drand49()
%43 = fadd double %42, -5.000000e-01
%44 = tail call double @llvm.fmuladd.f64(double %34, double %43, double %0)
br label %45
45: ; preds = %35, %41
%46 = phi double [ %44, %41 ], [ 0.000000e+00, %35 ]
%47 = load i64, i64* %3
%48 = add nsw i64 %47, 1
store i64 %48, i64* %3
%49 = getelementptr inbounds double, double* %2, i64 %47
store double %46, double* %49
%50 = add nuw nsw i64 %36, 1
%51 = icmp eq i64 %50, %4
br i1 %51, label %82, label %35
52: ; preds = %29
%53 = fcmp une double %5, 1.000000e+00
%54 = icmp sgt i64 %4, 0
br i1 %53, label %58, label %55
55: ; preds = %52
br i1 %54, label %56, label %82
56: ; preds = %55
%57 = fmul double %1, 0x400BB67AE8584CA9
br label %72
58: ; preds = %52
br i1 %54, label %59, label %82
59: ; preds = %58
%60 = fmul double %1, 0x400BB67AE8584CA9
br label %61
61: ; preds = %59, %61
%62 = phi i64 [ 0, %59 ], [ %70, %61 ]
%63 = tail call double (...) @drand49()
%64 = fadd double %63, -5.000000e-01
%65 = tail call double @llvm.fmuladd.f64(double %60, double %64, double %0)
%66 = tail call double @pow(double %65, double %5)
%67 = load i64, i64* %3
%68 = add nsw i64 %67, 1
store i64 %68, i64* %3
%69 = getelementptr inbounds double, double* %2, i64 %67
store double %66, double* %69
%70 = add nuw nsw i64 %62, 1
%71 = icmp eq i64 %70, %4
br i1 %71, label %82, label %61
72: ; preds = %56, %72
%73 = phi i64 [ 0, %56 ], [ %80, %72 ]
%74 = tail call double (...) @drand49()
%75 = fadd double %74, -5.000000e-01
%76 = tail call double @llvm.fmuladd.f64(double %57, double %75, double %0)
%77 = load i64, i64* %3
%78 = add nsw i64 %77, 1
store i64 %78, i64* %3
%79 = getelementptr inbounds double, double* %2, i64 %77
store double %76, double* %79
%80 = add nuw nsw i64 %73, 1
%81 = icmp eq i64 %80, %4
br i1 %81, label %82, label %72
82: ; preds = %72, %61, %45, %18, %55, %58, %31, %14, %10
ret void
}