#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 pow(double, int);
void dcs_pair_production_range(double Z, double m, double K, double *qmin,
                               double *qmax) {
  if (qmax != NULL) {
    const double sqrte = 1.6487212707;
    const double Z13 = pow(Z, 1. / 3.);
    *qmax = K + m * (1. - 0.75 * sqrte * Z13);
  }
  if (qmin != NULL)
    *qmin = 4. * 0.510998910E-03;
}


x86 assembly (clang, -O0):
<dcs_pair_production_range>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
movsd  %xmm0,-0x8(%rbp)
movsd  %xmm1,-0x10(%rbp)
movsd  %xmm2,-0x18(%rbp)
mov    %rdi,-0x20(%rbp)
mov    %rsi,-0x28(%rbp)
cmpq   $0x0,-0x28(%rbp)
je     118f <dcs_pair_production_range+0x7f>
movsd  0xece(%rip),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x8(%rbp),%xmm0
xor    %edi,%edi
call   1030 <pow@plt>
movsd  %xmm0,-0x38(%rbp)
movsd  -0x18(%rbp),%xmm1
movsd  -0x10(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm2
movsd  0xe91(%rip),%xmm3
mulsd  %xmm3,%xmm2
movsd  0xe8d(%rip),%xmm3
addsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
cmpq   $0x0,-0x20(%rbp)
je     11aa <dcs_pair_production_range+0x9a>
mov    -0x20(%rbp),%rax
movsd  0xe72(%rip),%xmm0
movsd  %xmm0,(%rax)
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<dcs_pair_production_range>:
push   %r14
push   %rbx
sub    $0x18,%rsp
mov    %rdi,%r14
test   %rsi,%rsi
je     1159 <dcs_pair_production_range+0x49>
mov    %rsi,%rbx
xor    %edi,%edi
movsd  %xmm2,0x10(%rsp)
movsd  %xmm1,0x8(%rsp)
call   1030 <pow@plt>
mulsd  0xec3(%rip),%xmm0
addsd  0xec3(%rip),%xmm0
movsd  0x8(%rsp),%xmm1
mulsd  %xmm0,%xmm1
addsd  0x10(%rsp),%xmm1
movsd  %xmm1,(%rbx)
test   %r14,%r14
je     116b <dcs_pair_production_range+0x5b>
movabs $0x3f60be91cda9b5d6,%rax
be 60 3f
mov    %rax,(%r14)
add    $0x18,%rsp
pop    %rbx
pop    %r14
ret

LLVM IR (-O0):
define void @dcs_pair_production_range(double %0, double %1, double %2, double* %3, double* %4) {
%6 = alloca double
%7 = alloca double
%8 = alloca double
%9 = alloca double*
%10 = alloca double*
%11 = alloca double
%12 = alloca double
store double %0, double* %6
store double %1, double* %7
store double %2, double* %8
store double* %3, double** %9
store double* %4, double** %10
%13 = load double*, double** %10
%14 = icmp ne double* %13, null
br i1 %14, label %15, label %24
15: ; preds = %5
store double 0x3FFA61298E1E045B, double* %11
%16 = load double, double* %6
%17 = call double @pow(double %16, i32 0)
store double %17, double* %12
%18 = load double, double* %8
%19 = load double, double* %7
%20 = load double, double* %12
%21 = call double @llvm.fmuladd.f64(double 0xBFF3C8DF2A968344, double %20, double 1.000000e+00)
%22 = call double @llvm.fmuladd.f64(double %19, double %21, double %18)
%23 = load double*, double** %10
store double %22, double* %23
br label %24
24: ; preds = %15, %5
%25 = load double*, double** %9
%26 = icmp ne double* %25, null
br i1 %26, label %27, label %29
27: ; preds = %24
%28 = load double*, double** %9
store double 0x3F60BE91CDA9B5D6, double* %28
br label %29
29: ; preds = %27, %24
ret void
}

LLVM IR (-O2):
define void @dcs_pair_production_range(double %0, double %1, double %2, double* writeonly %3, double* writeonly %4) {
%6 = icmp eq double* %4, null
br i1 %6, label %11, label %7
7: ; preds = %5
%8 = tail call double @pow(double %0, i32 0)
%9 = tail call double @llvm.fmuladd.f64(double %8, double 0xBFF3C8DF2A968344, double 1.000000e+00)
%10 = tail call double @llvm.fmuladd.f64(double %1, double %9, double %2)
store double %10, double* %4
br label %11
11: ; preds = %7, %5
%12 = icmp eq double* %3, null
br i1 %12, label %14, label %13
13: ; preds = %11
store double 0x3F60BE91CDA9B5D6, double* %3
br label %14
14: ; preds = %13, %11
ret void
}