#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 fk_prime(double const, double const, double const, double const,
                double const, double const, double const, double const);
double exact_func_prime(const double p, const double AL, const double AR,
                        const double BL, const double BR, const double pL,
                        const double pR, const double rhoL, const double rhoR,
                        const double aL, const double aR, const double z,
                        const double g) {
  return fk_prime(p, pL, rhoL, AL, BL, aL, z, g) +
         fk_prime(p, pR, rhoR, AR, BR, aR, z, g);
}


x86 assembly (clang, -O0):
<exact_func_prime>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
movsd  0x30(%rbp),%xmm8
movsd  0x28(%rbp),%xmm8
movsd  0x20(%rbp),%xmm8
movsd  0x18(%rbp),%xmm8
movsd  0x10(%rbp),%xmm8
movsd  %xmm0,-0x8(%rbp)
movsd  %xmm1,-0x10(%rbp)
movsd  %xmm2,-0x18(%rbp)
movsd  %xmm3,-0x20(%rbp)
movsd  %xmm4,-0x28(%rbp)
movsd  %xmm5,-0x30(%rbp)
movsd  %xmm6,-0x38(%rbp)
movsd  %xmm7,-0x40(%rbp)
movsd  -0x8(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
movsd  -0x40(%rbp),%xmm2
movsd  -0x10(%rbp),%xmm3
movsd  -0x20(%rbp),%xmm4
movsd  0x18(%rbp),%xmm5
movsd  0x28(%rbp),%xmm6
movsd  0x30(%rbp),%xmm7
call   1030 <fk_prime@plt>
movsd  %xmm0,-0x48(%rbp)
movsd  -0x8(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm1
movsd  0x10(%rbp),%xmm2
movsd  -0x18(%rbp),%xmm3
movsd  -0x28(%rbp),%xmm4
movsd  0x20(%rbp),%xmm5
movsd  0x28(%rbp),%xmm6
movsd  0x30(%rbp),%xmm7
call   1030 <fk_prime@plt>
movaps %xmm0,%xmm1
movsd  -0x48(%rbp),%xmm0
addsd  %xmm1,%xmm0
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<exact_func_prime>:
sub    $0x28,%rsp
movaps %xmm7,%xmm8
movsd  %xmm6,0x18(%rsp)
movaps %xmm5,%xmm9
movsd  %xmm4,0x20(%rsp)
movaps %xmm3,%xmm4
movsd  %xmm2,0x10(%rsp)
movaps %xmm1,%xmm3
movsd  %xmm0,(%rsp)
movsd  0x38(%rsp),%xmm5
movsd  0x48(%rsp),%xmm6
movsd  0x50(%rsp),%xmm7
movaps %xmm9,%xmm1
movaps %xmm8,%xmm2
call   1030 <fk_prime@plt>
movsd  %xmm0,0x8(%rsp)
movsd  (%rsp),%xmm0
movsd  0x18(%rsp),%xmm1
movsd  0x30(%rsp),%xmm2
movsd  0x10(%rsp),%xmm3
movsd  0x20(%rsp),%xmm4
movsd  0x40(%rsp),%xmm5
movsd  0x48(%rsp),%xmm6
movsd  0x50(%rsp),%xmm7
call   1030 <fk_prime@plt>
addsd  0x8(%rsp),%xmm0
add    $0x28,%rsp
ret

LLVM IR (-O0):
define double @exact_func_prime(double %0, double %1, double %2, double %3, double %4, double %5, double %6, double %7, double %8, double %9, double %10, double %11, double %12) {
%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 double
%23 = alloca double
%24 = alloca double
%25 = alloca double
%26 = alloca double
store double %0, double* %14
store double %1, double* %15
store double %2, double* %16
store double %3, double* %17
store double %4, double* %18
store double %5, double* %19
store double %6, double* %20
store double %7, double* %21
store double %8, double* %22
store double %9, double* %23
store double %10, double* %24
store double %11, double* %25
store double %12, double* %26
%27 = load double, double* %14
%28 = load double, double* %19
%29 = load double, double* %21
%30 = load double, double* %15
%31 = load double, double* %17
%32 = load double, double* %23
%33 = load double, double* %25
%34 = load double, double* %26
%35 = call double @fk_prime(double %27, double %28, double %29, double %30, double %31, double %32, double %33, double %34)
%36 = load double, double* %14
%37 = load double, double* %20
%38 = load double, double* %22
%39 = load double, double* %16
%40 = load double, double* %18
%41 = load double, double* %24
%42 = load double, double* %25
%43 = load double, double* %26
%44 = call double @fk_prime(double %36, double %37, double %38, double %39, double %40, double %41, double %42, double %43)
%45 = fadd double %35, %44
ret double %45
}

LLVM IR (-O2):
define double @exact_func_prime(double %0, double %1, double %2, double %3, double %4, double %5, double %6, double %7, double %8, double %9, double %10, double %11, double %12) {
%14 = tail call double @fk_prime(double %0, double %5, double %7, double %1, double %3, double %9, double %11, double %12)
%15 = tail call double @fk_prime(double %0, double %6, double %8, double %2, double %4, double %10, double %11, double %12)
%16 = fadd double %14, %15
ret double %16
}