#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 C_uniform_cdf(double const *);
double fabs(double const);
double C_sumof2uniforms_cdf(const double *p, const double *ax, const double *ay,
                            const int *k) {
  double s = 0.;
  if ((fabs(ax[*k]) > 0.000000000001) && (fabs(ay[*k]) > 0.000000000001)) {
    s += (((*p - ax[*k] - ay[*k] < 0. ? 0. : *p - ax[*k] - ay[*k])) *
          ((*p - ax[*k] - ay[*k] < 0. ? 0. : *p - ax[*k] - ay[*k])));
    s += (((*p + ax[*k] + ay[*k] < 0. ? 0. : *p + ax[*k] + ay[*k])) *
          ((*p + ax[*k] + ay[*k] < 0. ? 0. : *p + ax[*k] + ay[*k])));
    s -= (((*p - ax[*k] + ay[*k] < 0. ? 0. : *p - ax[*k] + ay[*k])) *
          ((*p - ax[*k] + ay[*k] < 0. ? 0. : *p - ax[*k] + ay[*k])));
    s -= (((*p + ax[*k] - ay[*k] < 0. ? 0. : *p + ax[*k] - ay[*k])) *
          ((*p + ax[*k] - ay[*k] < 0. ? 0. : *p + ax[*k] - ay[*k])));
    return (s / (8 * ax[*k] * ay[*k]));
  } else
    return (C_uniform_cdf(p));
}


x86 assembly (clang, -O0):
<C_sumof2uniforms_cdf>:
push   %rbp
mov    %rsp,%rbp
sub    $0x90,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x18(%rbp),%rax
mov    -0x28(%rbp),%rcx
movslq (%rcx),%rcx
movsd  (%rax,%rcx,8),%xmm0
movaps 0xec6(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  0xeaa(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1615 <C_sumof2uniforms_cdf+0x505>
mov    -0x20(%rbp),%rax
mov    -0x28(%rbp),%rcx
movslq (%rcx),%rcx
movsd  (%rax,%rcx,8),%xmm0
movaps 0xe99(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  0xe7d(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1615 <C_sumof2uniforms_cdf+0x505>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x18(%rbp),%rax
mov    -0x28(%rbp),%rcx
movslq (%rcx),%rcx
subsd  (%rax,%rcx,8),%xmm1
mov    -0x20(%rbp),%rax
mov    -0x28(%rbp),%rcx
movslq (%rcx),%rcx
subsd  (%rax,%rcx,8),%xmm1
xorps  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jbe    11cf <C_sumof2uniforms_cdf+0xbf>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x38(%rbp)
jmp    11fc <C_sumof2uniforms_cdf+0xec>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x28(%rbp),%rcx
movslq (%rcx),%rcx
subsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x28(%rbp),%rcx
movslq (%rcx),%rcx
subsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x18(%rbp),%rax
mov    -0x28(%rbp),%rcx
movslq (%rcx),%rcx
subsd  (%rax,%rcx,8),%xmm1
mov    -0x20(%rbp),%rax
mov    -0x28(%rbp),%rcx
movslq (%rcx),%rcx
subsd  (%rax,%rcx,8),%xmm1
xorps  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jbe    1248 <C_sumof2uniforms_cdf+0x138>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x48(%rbp)
jmp    1275 <C_sumof2uniforms_cdf+0x165>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x28(%rbp),%rcx
movslq (%rcx),%rcx
subsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x28(%rbp),%rcx
movslq (%rcx),%rcx
subsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x30(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x18(%rbp),%rax
mov    -0x28(%rbp),%rcx
movslq (%rcx),%rcx
addsd  (%rax,%rcx,8),%xmm1
mov    -0x20(%rbp),%rax
mov    -0x28(%rbp),%rcx
movslq (%rcx),%rcx
addsd  (%rax,%rcx,8),%xmm1
xorps  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jbe    12d3 <C_sumof2uniforms_cdf+0x1c3>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x50(%rbp)
jmp    1300 <C_sumof2uniforms_cdf+0x1f0>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x28(%rbp),%rcx
movslq (%rcx),%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x28(%rbp),%rcx
movslq (%rcx),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x18(%rbp),%rax
mov    -0x28(%rbp),%rcx
movslq (%rcx),%rcx
addsd  (%rax,%rcx,8),%xmm1
mov    -0x20(%rbp),%rax
mov    -0x28(%rbp),%rcx
movslq (%rcx),%rcx
addsd  (%rax,%rcx,8),%xmm1
xorps  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jbe    134c <C_sumof2uniforms_cdf+0x23c>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x60(%rbp)
jmp    1379 <C_sumof2uniforms_cdf+0x269>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x28(%rbp),%rcx
movslq (%rcx),%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x28(%rbp),%rcx
movslq (%rcx),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x58(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x30(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x18(%rbp),%rax
mov    -0x28(%rbp),%rcx
movslq (%rcx),%rcx
subsd  (%rax,%rcx,8),%xmm1
mov    -0x20(%rbp),%rax
mov    -0x28(%rbp),%rcx
movslq (%rcx),%rcx
addsd  (%rax,%rcx,8),%xmm1
xorps  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jbe    13d7 <C_sumof2uniforms_cdf+0x2c7>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x68(%rbp)
jmp    1404 <C_sumof2uniforms_cdf+0x2f4>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x28(%rbp),%rcx
movslq (%rcx),%rcx
subsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x28(%rbp),%rcx
movslq (%rcx),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x18(%rbp),%rax
mov    -0x28(%rbp),%rcx
movslq (%rcx),%rcx
subsd  (%rax,%rcx,8),%xmm1
mov    -0x20(%rbp),%rax
mov    -0x28(%rbp),%rcx
movslq (%rcx),%rcx
addsd  (%rax,%rcx,8),%xmm1
xorps  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jbe    1450 <C_sumof2uniforms_cdf+0x340>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x78(%rbp)
jmp    147d <C_sumof2uniforms_cdf+0x36d>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x28(%rbp),%rcx
movslq (%rcx),%rcx
subsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x28(%rbp),%rcx
movslq (%rcx),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x70(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0x30(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x18(%rbp),%rax
mov    -0x28(%rbp),%rcx
movslq (%rcx),%rcx
addsd  (%rax,%rcx,8),%xmm1
mov    -0x20(%rbp),%rax
mov    -0x28(%rbp),%rcx
movslq (%rcx),%rcx
subsd  (%rax,%rcx,8),%xmm1
xorps  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jbe    14f2 <C_sumof2uniforms_cdf+0x3e2>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x80(%rbp)
jmp    151f <C_sumof2uniforms_cdf+0x40f>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x28(%rbp),%rcx
movslq (%rcx),%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x28(%rbp),%rcx
movslq (%rcx),%rcx
subsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x18(%rbp),%rax
mov    -0x28(%rbp),%rcx
movslq (%rcx),%rcx
addsd  (%rax,%rcx,8),%xmm1
mov    -0x20(%rbp),%rax
mov    -0x28(%rbp),%rcx
movslq (%rcx),%rcx
subsd  (%rax,%rcx,8),%xmm1
xorps  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jbe    1571 <C_sumof2uniforms_cdf+0x461>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
jmp    15a1 <C_sumof2uniforms_cdf+0x491>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x28(%rbp),%rcx
movslq (%rcx),%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x28(%rbp),%rcx
movslq (%rcx),%rcx
subsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0x90(%rbp),%xmm2
ff
movsd  -0x30(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x30(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x28(%rbp),%rcx
movslq (%rcx),%rcx
movsd  0xa16(%rip),%xmm1
mulsd  (%rax,%rcx,8),%xmm1
mov    -0x20(%rbp),%rax
mov    -0x28(%rbp),%rcx
movslq (%rcx),%rcx
mulsd  (%rax,%rcx,8),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1623 <C_sumof2uniforms_cdf+0x513>
mov    -0x10(%rbp),%rdi
call   1030 <C_uniform_cdf@plt>
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
add    $0x90,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<C_sumof2uniforms_cdf>:
movslq (%rcx),%rax
movsd  (%rsi,%rax,8),%xmm1
movapd 0xee0(%rip),%xmm0
andpd  %xmm1,%xmm0
ucomisd 0xee4(%rip),%xmm0
jbe    11c6 <C_sumof2uniforms_cdf+0xb6>
movsd  (%rdx,%rax,8),%xmm2
movapd 0xec1(%rip),%xmm0
andpd  %xmm2,%xmm0
ucomisd 0xec5(%rip),%xmm0
jbe    11c6 <C_sumof2uniforms_cdf+0xb6>
movsd  (%rdi),%xmm3
movapd %xmm3,%xmm0
subsd  %xmm1,%xmm0
movapd %xmm2,%xmm4
addsd  %xmm0,%xmm4
subsd  %xmm2,%xmm0
xorpd  %xmm5,%xmm5
xorpd  %xmm6,%xmm6
maxsd  %xmm0,%xmm6
mulsd  %xmm6,%xmm6
addsd  %xmm5,%xmm6
addsd  %xmm1,%xmm3
movapd %xmm2,%xmm7
addsd  %xmm3,%xmm7
xorpd  %xmm0,%xmm0
maxsd  %xmm7,%xmm0
mulsd  %xmm0,%xmm0
addsd  %xmm6,%xmm0
xorpd  %xmm6,%xmm6
maxsd  %xmm4,%xmm6
mulsd  %xmm6,%xmm6
subsd  %xmm6,%xmm0
subsd  %xmm2,%xmm3
maxsd  %xmm3,%xmm5
mulsd  %xmm5,%xmm5
subsd  %xmm5,%xmm0
mulsd  0xe5b(%rip),%xmm1
mulsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
ret
jmp    1030 <C_uniform_cdf@plt>

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

LLVM IR (-O2):
define double @C_sumof2uniforms_cdf(double* %0, double* nocapture %1, double* nocapture %2, i32* nocapture %3) {
%5 = load i32, i32* %3
%6 = sext i32 %5 to i64
%7 = getelementptr inbounds double, double* %1, i64 %6
%8 = load double, double* %7
%9 = tail call double @llvm.fabs.f64(double %8)
%10 = fcmp ogt double %9, 0x3D719799812DEA11
br i1 %10, label %11, label %41
11: ; preds = %4
%12 = getelementptr inbounds double, double* %2, i64 %6
%13 = load double, double* %12
%14 = tail call double @llvm.fabs.f64(double %13)
%15 = fcmp ogt double %14, 0x3D719799812DEA11
br i1 %15, label %16, label %41
16: ; preds = %11
%17 = load double, double* %0
%18 = fsub double %17, %8
%19 = fsub double %18, %13
%20 = fcmp olt double %19, 0.000000e+00
%21 = select i1 %20, double 0.000000e+00, double %19
%22 = tail call double @llvm.fmuladd.f64(double %21, double %21, double 0.000000e+00)
%23 = fadd double %8, %17
%24 = fadd double %13, %23
%25 = fcmp olt double %24, 0.000000e+00
%26 = select i1 %25, double 0.000000e+00, double %24
%27 = tail call double @llvm.fmuladd.f64(double %26, double %26, double %22)
%28 = fadd double %13, %18
%29 = fcmp olt double %28, 0.000000e+00
%30 = select i1 %29, double 0.000000e+00, double %28
%31 = fneg double %30
%32 = tail call double @llvm.fmuladd.f64(double %31, double %30, double %27)
%33 = fsub double %23, %13
%34 = fcmp olt double %33, 0.000000e+00
%35 = select i1 %34, double 0.000000e+00, double %33
%36 = fneg double %35
%37 = tail call double @llvm.fmuladd.f64(double %36, double %35, double %32)
%38 = fmul double %8, 8.000000e+00
%39 = fmul double %38, %13
%40 = fdiv double %37, %39
br label %43
41: ; preds = %11, %4
%42 = tail call double @C_uniform_cdf(double* %0)
br label %43
43: ; preds = %41, %16
%44 = phi double [ %40, %16 ], [ %42, %41 ]
ret double %44
}