#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 */
long double cbrtl(long double);
long double exp2l(long double);
int /*<<< orphan*/ fabsl(long double);
long double fmaxl(long double, long double);
long double fminl(long double, long double);
scalar_t__ isless(int /*<<< orphan*/, long double);
long double j0(double);
long double j1(double);
long double jn(double, double);
long double powl(long double, long double);
long double sqrtl(long double);
int /*<<< orphan*/ strcmp(char *, char *);
long double y0(double);
long double y1(double);
long double yn(double, double);
long double calculate_binary(char *op, long double x, long double y) {
  if ((!strcmp(op, "+")))
    return x + y;
  if ((!strcmp(op, "-")))
    return x - y;
  if ((!strcmp(op, "*")))
    return x * y;
  if ((!strcmp(op, "/")))
    return x / y;
  if ((!strcmp(op, "^")) || (!strcmp(op, "pow"))) {
    if (isless(fabsl(y - 0.5L), 1.0e-12L))
      return sqrtl(x);
    else if (isless(fabsl(y - 1.0L / 3), 1.0e-12L))
      return cbrtl(x);
    else if (isless(fabsl(x - 2.0L), 1.0e-12L))
      return exp2l(y);
    else
      return powl(x, y);
  }
  if ((!strcmp(op, "min")))
    return fminl(x, y);
  if ((!strcmp(op, "max")))
    return fmaxl(x, y);
  if ((!strcmp(op, "bessel_j"))) {
    if (isless(fabsl(x), 1.0e-12L))
      return j0((double)y);
    else if (isless(fabsl(x - 1.0L), 1.0e-12L))
      return j1((double)y);
    else
      return jn((double)x, (double)y);
  }
  if ((!strcmp(op, "bessel_y"))) {
    if (isless(fabsl(x), 1.0e-12L))
      return y0((double)y);
    else if (isless(fabsl(x - 1.0L), 1.0e-12L))
      return y1((double)y);
    else
      return yn((double)x, (double)y);
  }
}


x86 assembly (clang, -O0):
<calculate_binary>:
push   %rbp
mov    %rsp,%rbp
sub    $0xa0,%rsp
fldt   0x20(%rbp)
fldt   0x10(%rbp)
mov    %rdi,-0x18(%rbp)
fstpt  -0x30(%rbp)
fstpt  -0x40(%rbp)
mov    -0x18(%rbp),%rdi
lea    0xe12(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%eax
jne    1234 <calculate_binary+0x44>
fldt   -0x30(%rbp)
fldt   -0x40(%rbp)
faddp  %st,%st(1)
fstpt  -0x10(%rbp)
jmp    15b9 <calculate_binary+0x3c9>
mov    -0x18(%rbp),%rdi
lea    0xdeb(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%eax
jne    125d <calculate_binary+0x6d>
fldt   -0x30(%rbp)
fldt   -0x40(%rbp)
fsubrp %st,%st(1)
fstpt  -0x10(%rbp)
jmp    15b9 <calculate_binary+0x3c9>
mov    -0x18(%rbp),%rdi
lea    0xdc4(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%eax
jne    1286 <calculate_binary+0x96>
fldt   -0x30(%rbp)
fldt   -0x40(%rbp)
fmulp  %st,%st(1)
fstpt  -0x10(%rbp)
jmp    15b9 <calculate_binary+0x3c9>
mov    -0x18(%rbp),%rdi
lea    0xd9d(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%eax
jne    12af <calculate_binary+0xbf>
fldt   -0x30(%rbp)
fldt   -0x40(%rbp)
fdivrp %st,%st(1)
fstpt  -0x10(%rbp)
jmp    15b9 <calculate_binary+0x3c9>
mov    -0x18(%rbp),%rdi
lea    0xd76(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%eax
je     12e1 <calculate_binary+0xf1>
mov    -0x18(%rbp),%rdi
lea    0xd5f(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%eax
jne    13ce <calculate_binary+0x1de>
fldt   -0x40(%rbp)
flds   0xd36(%rip)
faddp  %st,%st(1)
mov    %rsp,%rax
fstpt  (%rax)
call   1040 <fabsl@plt>
mov    %eax,%edi
mov    %rsp,%rax
fldt   0xcff(%rip)
fstpt  (%rax)
call   1100 <isless@plt>
cmp    $0x0,%rax
je     1327 <calculate_binary+0x137>
fldt   -0x30(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   10d0 <sqrtl@plt>
fstpt  -0x10(%rbp)
jmp    15b9 <calculate_binary+0x3c9>
fldt   -0x40(%rbp)
fldt   0xce0(%rip)
faddp  %st,%st(1)
mov    %rsp,%rax
fstpt  (%rax)
call   1040 <fabsl@plt>
mov    %eax,%edi
mov    %rsp,%rax
fldt   0xcb9(%rip)
fstpt  (%rax)
call   1100 <isless@plt>
cmp    $0x0,%rax
je     136d <calculate_binary+0x17d>
fldt   -0x30(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   1090 <cbrtl@plt>
fstpt  -0x10(%rbp)
jmp    15b9 <calculate_binary+0x3c9>
fldt   -0x30(%rbp)
flds   0xcae(%rip)
faddp  %st,%st(1)
mov    %rsp,%rax
fstpt  (%rax)
call   1040 <fabsl@plt>
mov    %eax,%edi
mov    %rsp,%rax
fldt   0xc73(%rip)
fstpt  (%rax)
call   1100 <isless@plt>
cmp    $0x0,%rax
je     13b3 <calculate_binary+0x1c3>
fldt   -0x40(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   1060 <exp2l@plt>
fstpt  -0x10(%rbp)
jmp    15b9 <calculate_binary+0x3c9>
fldt   -0x30(%rbp)
fldt   -0x40(%rbp)
mov    %rsp,%rax
fstpt  0x10(%rax)
fstpt  (%rax)
call   1050 <powl@plt>
fstpt  -0x10(%rbp)
jmp    15b9 <calculate_binary+0x3c9>
mov    -0x18(%rbp),%rdi
lea    0xc5d(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%eax
jne    1402 <calculate_binary+0x212>
fldt   -0x30(%rbp)
fldt   -0x40(%rbp)
mov    %rsp,%rax
fstpt  0x10(%rax)
fstpt  (%rax)
call   1070 <fminl@plt>
fstpt  -0x10(%rbp)
jmp    15b9 <calculate_binary+0x3c9>
mov    -0x18(%rbp),%rdi
lea    0xc2d(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%eax
jne    1436 <calculate_binary+0x246>
fldt   -0x30(%rbp)
fldt   -0x40(%rbp)
mov    %rsp,%rax
fstpt  0x10(%rax)
fstpt  (%rax)
call   10e0 <fmaxl@plt>
fstpt  -0x10(%rbp)
jmp    15b9 <calculate_binary+0x3c9>
mov    -0x18(%rbp),%rdi
lea    0xbfd(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%eax
jne    14fa <calculate_binary+0x30a>
fldt   -0x30(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   1040 <fabsl@plt>
mov    %eax,%edi
mov    %rsp,%rax
fldt   0xb99(%rip)
fstpt  (%rax)
call   1100 <isless@plt>
cmp    $0x0,%rax
je     1490 <calculate_binary+0x2a0>
fldt   -0x40(%rbp)
fstpl  -0x60(%rbp)
movsd  -0x60(%rbp),%xmm0
call   10b0 <j0@plt>
fstpt  -0x10(%rbp)
jmp    15b9 <calculate_binary+0x3c9>
fldt   -0x30(%rbp)
fld1
fchs
faddp  %st,%st(1)
mov    %rsp,%rax
fstpt  (%rax)
call   1040 <fabsl@plt>
mov    %eax,%edi
mov    %rsp,%rax
fldt   0xb52(%rip)
fstpt  (%rax)
call   1100 <isless@plt>
cmp    $0x0,%rax
je     14d7 <calculate_binary+0x2e7>
fldt   -0x40(%rbp)
fstpl  -0x58(%rbp)
movsd  -0x58(%rbp),%xmm0
call   1030 <j1@plt>
fstpt  -0x10(%rbp)
jmp    15b9 <calculate_binary+0x3c9>
fldt   -0x30(%rbp)
fstpl  -0x48(%rbp)
movsd  -0x48(%rbp),%xmm0
fldt   -0x40(%rbp)
fstpl  -0x50(%rbp)
movsd  -0x50(%rbp),%xmm1
call   10c0 <jn@plt>
fstpt  -0x10(%rbp)
jmp    15b9 <calculate_binary+0x3c9>
mov    -0x18(%rbp),%rdi
lea    0xb42(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%eax
jne    15b9 <calculate_binary+0x3c9>
fldt   -0x30(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   1040 <fabsl@plt>
mov    %eax,%edi
mov    %rsp,%rax
fldt   0xad5(%rip)
fstpt  (%rax)
call   1100 <isless@plt>
cmp    $0x0,%rax
je     1554 <calculate_binary+0x364>
fldt   -0x40(%rbp)
fstpl  -0x80(%rbp)
movsd  -0x80(%rbp),%xmm0
call   10f0 <y0@plt>
fstpt  -0x10(%rbp)
jmp    15b9 <calculate_binary+0x3c9>
fldt   -0x30(%rbp)
fld1
fchs
faddp  %st,%st(1)
mov    %rsp,%rax
fstpt  (%rax)
call   1040 <fabsl@plt>
mov    %eax,%edi
mov    %rsp,%rax
fldt   0xa8e(%rip)
fstpt  (%rax)
call   1100 <isless@plt>
cmp    $0x0,%rax
je     159b <calculate_binary+0x3ab>
fldt   -0x40(%rbp)
fstpl  -0x78(%rbp)
movsd  -0x78(%rbp),%xmm0
call   10a0 <y1@plt>
fstpt  -0x10(%rbp)
jmp    15b9 <calculate_binary+0x3c9>
fldt   -0x30(%rbp)
fstpl  -0x68(%rbp)
movsd  -0x68(%rbp),%xmm0
fldt   -0x40(%rbp)
fstpl  -0x70(%rbp)
movsd  -0x70(%rbp),%xmm1
call   1110 <yn@plt>
fstpt  -0x10(%rbp)
fldt   -0x10(%rbp)
add    $0xa0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<calculate_binary>:
push   %rbx
sub    $0x90,%rsp
mov    %rdi,%rbx
fldt   0xb0(%rsp)
fstpt  0x38(%rsp)
fldt   0xa0(%rsp)
fstpt  0x2c(%rsp)
lea    0xe10(%rip),%rsi
call   1080 <strcmp@plt>
test   %eax,%eax
je     1350 <calculate_binary+0x160>
fldt   0x2c(%rsp)
fstp   %st(0)
fldt   0x38(%rsp)
fstp   %st(0)
lea    0xdf2(%rip),%rsi
mov    %rbx,%rdi
call   1080 <strcmp@plt>
test   %eax,%eax
je     135c <calculate_binary+0x16c>
lea    0xddd(%rip),%rsi
mov    %rbx,%rdi
call   1080 <strcmp@plt>
test   %eax,%eax
je     1368 <calculate_binary+0x178>
lea    0xdc8(%rip),%rsi
mov    %rbx,%rdi
call   1080 <strcmp@plt>
test   %eax,%eax
je     13af <calculate_binary+0x1bf>
lea    0xdb3(%rip),%rsi
mov    %rbx,%rdi
call   1080 <strcmp@plt>
test   %eax,%eax
je     1374 <calculate_binary+0x184>
lea    0xd9e(%rip),%rsi
mov    %rbx,%rdi
call   1080 <strcmp@plt>
test   %eax,%eax
je     1374 <calculate_binary+0x184>
lea    0xd8b(%rip),%rsi
mov    %rbx,%rdi
call   1080 <strcmp@plt>
test   %eax,%eax
je     13f7 <calculate_binary+0x207>
lea    0xd78(%rip),%rsi
mov    %rbx,%rdi
call   1080 <strcmp@plt>
test   %eax,%eax
je     140d <calculate_binary+0x21d>
lea    0xd65(%rip),%rsi
mov    %rbx,%rdi
call   1080 <strcmp@plt>
test   %eax,%eax
je     1459 <calculate_binary+0x269>
lea    0xd57(%rip),%rsi
mov    %rbx,%rdi
call   1080 <strcmp@plt>
fldz
test   %eax,%eax
jne    13b9 <calculate_binary+0x1c9>
fstp   %st(0)
fldt   0x2c(%rsp)
fstpt  (%rsp)
call   1040 <fabsl@plt>
fldt   0xcea(%rip)
fld    %st(0)
fstpt  0x44(%rsp)
fstpt  (%rsp)
mov    %eax,%edi
call   1100 <isless@plt>
test   %rax,%rax
je     14f4 <calculate_binary+0x304>
fldt   0x38(%rsp)
fstpl  0x88(%rsp)
movsd  0x88(%rsp),%xmm0
add    $0x90,%rsp
pop    %rbx
jmp    10f0 <y0@plt>
fldt   0x38(%rsp)
fldt   0x2c(%rsp)
faddp  %st,%st(1)
jmp    13b9 <calculate_binary+0x1c9>
fldt   0x38(%rsp)
fldt   0x2c(%rsp)
fsubp  %st,%st(1)
jmp    13b9 <calculate_binary+0x1c9>
fldt   0x38(%rsp)
fldt   0x2c(%rsp)
fmulp  %st,%st(1)
jmp    13b9 <calculate_binary+0x1c9>
fldt   0x38(%rsp)
fadds  0xca2(%rip)
fstpt  (%rsp)
call   1040 <fabsl@plt>
fldt   0xc74(%rip)
fld    %st(0)
fstpt  0x44(%rsp)
fstpt  (%rsp)
mov    %eax,%edi
call   1100 <isless@plt>
test   %rax,%rax
je     13c2 <calculate_binary+0x1d2>
fldt   0x2c(%rsp)
fstpt  (%rsp)
call   10d0 <sqrtl@plt>
jmp    13b9 <calculate_binary+0x1c9>
fldt   0x38(%rsp)
fldt   0x2c(%rsp)
fdivp  %st,%st(1)
add    $0x90,%rsp
pop    %rbx
ret
fldt   0xc48(%rip)
fldt   0x38(%rsp)
faddp  %st,%st(1)
fstpt  (%rsp)
call   1040 <fabsl@plt>
fldt   0x44(%rsp)
fstpt  (%rsp)
mov    %eax,%edi
call   1100 <isless@plt>
test   %rax,%rax
je     1423 <calculate_binary+0x233>
fldt   0x2c(%rsp)
fstpt  (%rsp)
call   1090 <cbrtl@plt>
jmp    13b9 <calculate_binary+0x1c9>
fldt   0x38(%rsp)
fstpt  0x10(%rsp)
fldt   0x2c(%rsp)
fstpt  (%rsp)
call   1070 <fminl@plt>
jmp    13b9 <calculate_binary+0x1c9>
fldt   0x38(%rsp)
fstpt  0x10(%rsp)
fldt   0x2c(%rsp)
fstpt  (%rsp)
call   10e0 <fmaxl@plt>
jmp    13b9 <calculate_binary+0x1c9>
fldt   0x2c(%rsp)
fadds  0xbf7(%rip)
fstpt  (%rsp)
call   1040 <fabsl@plt>
fldt   0x44(%rsp)
fstpt  (%rsp)
mov    %eax,%edi
call   1100 <isless@plt>
test   %rax,%rax
je     149b <calculate_binary+0x2ab>
fldt   0x38(%rsp)
fstpt  (%rsp)
call   1060 <exp2l@plt>
jmp    13b9 <calculate_binary+0x1c9>
fldt   0x2c(%rsp)
fstpt  (%rsp)
call   1040 <fabsl@plt>
fldt   0xb95(%rip)
fld    %st(0)
fstpt  0x44(%rsp)
fstpt  (%rsp)
mov    %eax,%edi
call   1100 <isless@plt>
test   %rax,%rax
je     14b4 <calculate_binary+0x2c4>
fldt   0x38(%rsp)
fstpl  0x68(%rsp)
movsd  0x68(%rsp),%xmm0
add    $0x90,%rsp
pop    %rbx
jmp    10b0 <j0@plt>
fldt   0x38(%rsp)
fstpt  0x10(%rsp)
fldt   0x2c(%rsp)
fstpt  (%rsp)
call   1050 <powl@plt>
jmp    13b9 <calculate_binary+0x1c9>
fld1
fchs
fldt   0x2c(%rsp)
faddp  %st,%st(1)
fstpt  (%rsp)
call   1040 <fabsl@plt>
fldt   0x44(%rsp)
fstpt  (%rsp)
mov    %eax,%edi
call   1100 <isless@plt>
test   %rax,%rax
je     153a <calculate_binary+0x34a>
fldt   0x38(%rsp)
fstpl  0x60(%rsp)
movsd  0x60(%rsp),%xmm0
add    $0x90,%rsp
pop    %rbx
jmp    1030 <j1@plt>
fld1
fchs
fldt   0x2c(%rsp)
faddp  %st,%st(1)
fstpt  (%rsp)
call   1040 <fabsl@plt>
fldt   0x44(%rsp)
fstpt  (%rsp)
mov    %eax,%edi
call   1100 <isless@plt>
test   %rax,%rax
je     1563 <calculate_binary+0x373>
fldt   0x38(%rsp)
fstpl  0x80(%rsp)
movsd  0x80(%rsp),%xmm0
add    $0x90,%rsp
pop    %rbx
jmp    10a0 <y1@plt>
fldt   0x2c(%rsp)
fstpl  0x58(%rsp)
movsd  0x58(%rsp),%xmm0
fldt   0x38(%rsp)
fstpl  0x50(%rsp)
movsd  0x50(%rsp),%xmm1
add    $0x90,%rsp
pop    %rbx
jmp    10c0 <jn@plt>
fldt   0x2c(%rsp)
fstpl  0x78(%rsp)
movsd  0x78(%rsp),%xmm0
fldt   0x38(%rsp)
fstpl  0x70(%rsp)
movsd  0x70(%rsp),%xmm1
add    $0x90,%rsp
pop    %rbx
jmp    1110 <yn@plt>

LLVM IR (-O0):
@.str = [2 x i8] c"+\00"
@.str.1 = [2 x i8] c"-\00"
@.str.2 = [2 x i8] c"*\00"
@.str.3 = [2 x i8] c"/\00"
@.str.4 = [2 x i8] c"^\00"
@.str.5 = [4 x i8] c"pow\00"
@.str.6 = [4 x i8] c"min\00"
@.str.7 = [4 x i8] c"max\00"
@.str.8 = [9 x i8] c"bessel_j\00"
@.str.9 = [9 x i8] c"bessel_y\00"
define x86_fp80 @calculate_binary(i8* %0, x86_fp80 %1, x86_fp80 %2) {
%4 = alloca x86_fp80
%5 = alloca i8*
%6 = alloca x86_fp80
%7 = alloca x86_fp80
store i8* %0, i8** %5
store x86_fp80 %1, x86_fp80* %6
store x86_fp80 %2, x86_fp80* %7
%8 = load i8*, i8** %5
%9 = call i32 @strcmp(i8* %8, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%10 = icmp ne i32 %9, 0
br i1 %10, label %15, label %11
11: ; preds = %3
%12 = load x86_fp80, x86_fp80* %6
%13 = load x86_fp80, x86_fp80* %7
%14 = fadd x86_fp80 %12, %13
store x86_fp80 %14, x86_fp80* %4
br label %152
15: ; preds = %3
%16 = load i8*, i8** %5
%17 = call i32 @strcmp(i8* %16, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
%18 = icmp ne i32 %17, 0
br i1 %18, label %23, label %19
19: ; preds = %15
%20 = load x86_fp80, x86_fp80* %6
%21 = load x86_fp80, x86_fp80* %7
%22 = fsub x86_fp80 %20, %21
store x86_fp80 %22, x86_fp80* %4
br label %152
23: ; preds = %15
%24 = load i8*, i8** %5
%25 = call i32 @strcmp(i8* %24, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.2, i64 0, i64 0))
%26 = icmp ne i32 %25, 0
br i1 %26, label %31, label %27
27: ; preds = %23
%28 = load x86_fp80, x86_fp80* %6
%29 = load x86_fp80, x86_fp80* %7
%30 = fmul x86_fp80 %28, %29
store x86_fp80 %30, x86_fp80* %4
br label %152
31: ; preds = %23
%32 = load i8*, i8** %5
%33 = call i32 @strcmp(i8* %32, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0))
%34 = icmp ne i32 %33, 0
br i1 %34, label %39, label %35
35: ; preds = %31
%36 = load x86_fp80, x86_fp80* %6
%37 = load x86_fp80, x86_fp80* %7
%38 = fdiv x86_fp80 %36, %37
store x86_fp80 %38, x86_fp80* %4
br label %152
39: ; preds = %31
%40 = load i8*, i8** %5
%41 = call i32 @strcmp(i8* %40, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.4, i64 0, i64 0))
%42 = icmp ne i32 %41, 0
br i1 %42, label %43, label %47
43: ; preds = %39
%44 = load i8*, i8** %5
%45 = call i32 @strcmp(i8* %44, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0))
%46 = icmp ne i32 %45, 0
br i1 %46, label %78, label %47
47: ; preds = %43, %39
%48 = load x86_fp80, x86_fp80* %7
%49 = fsub x86_fp80 %48, 0xK3FFE8000000000000000
%50 = call i32 @fabsl(x86_fp80 %49)
%51 = call i64 @isless(i32 %50, x86_fp80 0xK3FD78CBCCC096F5088CC)
%52 = icmp ne i64 %51, 0
br i1 %52, label %53, label %56
53: ; preds = %47
%54 = load x86_fp80, x86_fp80* %6
%55 = call x86_fp80 @sqrtl(x86_fp80 %54)
store x86_fp80 %55, x86_fp80* %4
br label %152
56: ; preds = %47
%57 = load x86_fp80, x86_fp80* %7
%58 = fsub x86_fp80 %57, 0xK3FFDAAAAAAAAAAAAAAAB
%59 = call i32 @fabsl(x86_fp80 %58)
%60 = call i64 @isless(i32 %59, x86_fp80 0xK3FD78CBCCC096F5088CC)
%61 = icmp ne i64 %60, 0
br i1 %61, label %62, label %65
62: ; preds = %56
%63 = load x86_fp80, x86_fp80* %6
%64 = call x86_fp80 @cbrtl(x86_fp80 %63)
store x86_fp80 %64, x86_fp80* %4
br label %152
65: ; preds = %56
%66 = load x86_fp80, x86_fp80* %6
%67 = fsub x86_fp80 %66, 0xK40008000000000000000
%68 = call i32 @fabsl(x86_fp80 %67)
%69 = call i64 @isless(i32 %68, x86_fp80 0xK3FD78CBCCC096F5088CC)
%70 = icmp ne i64 %69, 0
br i1 %70, label %71, label %74
71: ; preds = %65
%72 = load x86_fp80, x86_fp80* %7
%73 = call x86_fp80 @exp2l(x86_fp80 %72)
store x86_fp80 %73, x86_fp80* %4
br label %152
74: ; preds = %65
%75 = load x86_fp80, x86_fp80* %6
%76 = load x86_fp80, x86_fp80* %7
%77 = call x86_fp80 @powl(x86_fp80 %75, x86_fp80 %76)
store x86_fp80 %77, x86_fp80* %4
br label %152
78: ; preds = %43
%79 = load i8*, i8** %5
%80 = call i32 @strcmp(i8* %79, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.6, i64 0, i64 0))
%81 = icmp ne i32 %80, 0
br i1 %81, label %86, label %82
82: ; preds = %78
%83 = load x86_fp80, x86_fp80* %6
%84 = load x86_fp80, x86_fp80* %7
%85 = call x86_fp80 @llvm.minnum.f80(x86_fp80 %83, x86_fp80 %84)
store x86_fp80 %85, x86_fp80* %4
br label %152
86: ; preds = %78
%87 = load i8*, i8** %5
%88 = call i32 @strcmp(i8* %87, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.7, i64 0, i64 0))
%89 = icmp ne i32 %88, 0
br i1 %89, label %94, label %90
90: ; preds = %86
%91 = load x86_fp80, x86_fp80* %6
%92 = load x86_fp80, x86_fp80* %7
%93 = call x86_fp80 @llvm.maxnum.f80(x86_fp80 %91, x86_fp80 %92)
store x86_fp80 %93, x86_fp80* %4
br label %152
94: ; preds = %86
%95 = load i8*, i8** %5
%96 = call i32 @strcmp(i8* %95, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.8, i64 0, i64 0))
%97 = icmp ne i32 %96, 0
br i1 %97, label %123, label %98
98: ; preds = %94
%99 = load x86_fp80, x86_fp80* %6
%100 = call i32 @fabsl(x86_fp80 %99)
%101 = call i64 @isless(i32 %100, x86_fp80 0xK3FD78CBCCC096F5088CC)
%102 = icmp ne i64 %101, 0
br i1 %102, label %103, label %107
103: ; preds = %98
%104 = load x86_fp80, x86_fp80* %7
%105 = fptrunc x86_fp80 %104 to double
%106 = call x86_fp80 @j0(double %105)
store x86_fp80 %106, x86_fp80* %4
br label %152
107: ; preds = %98
%108 = load x86_fp80, x86_fp80* %6
%109 = fsub x86_fp80 %108, 0xK3FFF8000000000000000
%110 = call i32 @fabsl(x86_fp80 %109)
%111 = call i64 @isless(i32 %110, x86_fp80 0xK3FD78CBCCC096F5088CC)
%112 = icmp ne i64 %111, 0
br i1 %112, label %113, label %117
113: ; preds = %107
%114 = load x86_fp80, x86_fp80* %7
%115 = fptrunc x86_fp80 %114 to double
%116 = call x86_fp80 @j1(double %115)
store x86_fp80 %116, x86_fp80* %4
br label %152
117: ; preds = %107
%118 = load x86_fp80, x86_fp80* %6
%119 = fptrunc x86_fp80 %118 to double
%120 = load x86_fp80, x86_fp80* %7
%121 = fptrunc x86_fp80 %120 to double
%122 = call x86_fp80 @jn(double %119, double %121)
store x86_fp80 %122, x86_fp80* %4
br label %152
123: ; preds = %94
%124 = load i8*, i8** %5
%125 = call i32 @strcmp(i8* %124, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.9, i64 0, i64 0))
%126 = icmp ne i32 %125, 0
br i1 %126, label %152, label %127
127: ; preds = %123
%128 = load x86_fp80, x86_fp80* %6
%129 = call i32 @fabsl(x86_fp80 %128)
%130 = call i64 @isless(i32 %129, x86_fp80 0xK3FD78CBCCC096F5088CC)
%131 = icmp ne i64 %130, 0
br i1 %131, label %132, label %136
132: ; preds = %127
%133 = load x86_fp80, x86_fp80* %7
%134 = fptrunc x86_fp80 %133 to double
%135 = call x86_fp80 @y0(double %134)
store x86_fp80 %135, x86_fp80* %4
br label %152
136: ; preds = %127
%137 = load x86_fp80, x86_fp80* %6
%138 = fsub x86_fp80 %137, 0xK3FFF8000000000000000
%139 = call i32 @fabsl(x86_fp80 %138)
%140 = call i64 @isless(i32 %139, x86_fp80 0xK3FD78CBCCC096F5088CC)
%141 = icmp ne i64 %140, 0
br i1 %141, label %142, label %146
142: ; preds = %136
%143 = load x86_fp80, x86_fp80* %7
%144 = fptrunc x86_fp80 %143 to double
%145 = call x86_fp80 @y1(double %144)
store x86_fp80 %145, x86_fp80* %4
br label %152
146: ; preds = %136
%147 = load x86_fp80, x86_fp80* %6
%148 = fptrunc x86_fp80 %147 to double
%149 = load x86_fp80, x86_fp80* %7
%150 = fptrunc x86_fp80 %149 to double
%151 = call x86_fp80 @yn(double %148, double %150)
store x86_fp80 %151, x86_fp80* %4
br label %152
152: ; preds = %11, %19, %27, %35, %53, %62, %71, %74, %82, %90, %103, %113, %117, %132, %142, %146, %123
%153 = load x86_fp80, x86_fp80* %4
ret x86_fp80 %153
}

LLVM IR (-O2):
@.str = [2 x i8] c"+\00"
@.str.1 = [2 x i8] c"-\00"
@.str.2 = [2 x i8] c"*\00"
@.str.3 = [2 x i8] c"/\00"
@.str.4 = [2 x i8] c"^\00"
@.str.5 = [4 x i8] c"pow\00"
@.str.6 = [4 x i8] c"min\00"
@.str.7 = [4 x i8] c"max\00"
@.str.8 = [9 x i8] c"bessel_j\00"
@.str.9 = [9 x i8] c"bessel_y\00"
define x86_fp80 @calculate_binary(i8* nocapture %0, x86_fp80 %1, x86_fp80 %2) {
%4 = tail call i32 @strcmp(i8* dereferenceable(1) %0, i8* dereferenceable(2) getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%5 = icmp eq i32 %4, 0
br i1 %5, label %6, label %8
6: ; preds = %3
%7 = fadd x86_fp80 %1, %2
br label %106
8: ; preds = %3
%9 = tail call i32 @strcmp(i8* dereferenceable(1) %0, i8* dereferenceable(2) getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
%10 = icmp eq i32 %9, 0
br i1 %10, label %11, label %13
11: ; preds = %8
%12 = fsub x86_fp80 %1, %2
br label %106
13: ; preds = %8
%14 = tail call i32 @strcmp(i8* dereferenceable(1) %0, i8* dereferenceable(2) getelementptr inbounds ([2 x i8], [2 x i8]* @.str.2, i64 0, i64 0))
%15 = icmp eq i32 %14, 0
br i1 %15, label %16, label %18
16: ; preds = %13
%17 = fmul x86_fp80 %1, %2
br label %106
18: ; preds = %13
%19 = tail call i32 @strcmp(i8* dereferenceable(1) %0, i8* dereferenceable(2) getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0))
%20 = icmp eq i32 %19, 0
br i1 %20, label %21, label %23
21: ; preds = %18
%22 = fdiv x86_fp80 %1, %2
br label %106
23: ; preds = %18
%24 = tail call i32 @strcmp(i8* dereferenceable(1) %0, i8* dereferenceable(2) getelementptr inbounds ([2 x i8], [2 x i8]* @.str.4, i64 0, i64 0))
%25 = icmp eq i32 %24, 0
br i1 %25, label %29, label %26
26: ; preds = %23
%27 = tail call i32 @strcmp(i8* dereferenceable(1) %0, i8* dereferenceable(4) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0))
%28 = icmp eq i32 %27, 0
br i1 %28, label %29, label %52
29: ; preds = %26, %23
%30 = fadd x86_fp80 %2, 0xKBFFE8000000000000000
%31 = tail call i32 @fabsl(x86_fp80 %30)
%32 = tail call i64 @isless(i32 %31, x86_fp80 0xK3FD78CBCCC096F5088CC)
%33 = icmp eq i64 %32, 0
br i1 %33, label %36, label %34
34: ; preds = %29
%35 = tail call x86_fp80 @sqrtl(x86_fp80 %1)
br label %106
36: ; preds = %29
%37 = fadd x86_fp80 %2, 0xKBFFDAAAAAAAAAAAAAAAB
%38 = tail call i32 @fabsl(x86_fp80 %37)
%39 = tail call i64 @isless(i32 %38, x86_fp80 0xK3FD78CBCCC096F5088CC)
%40 = icmp eq i64 %39, 0
br i1 %40, label %43, label %41
41: ; preds = %36
%42 = tail call x86_fp80 @cbrtl(x86_fp80 %1)
br label %106
43: ; preds = %36
%44 = fadd x86_fp80 %1, 0xKC0008000000000000000
%45 = tail call i32 @fabsl(x86_fp80 %44)
%46 = tail call i64 @isless(i32 %45, x86_fp80 0xK3FD78CBCCC096F5088CC)
%47 = icmp eq i64 %46, 0
br i1 %47, label %50, label %48
48: ; preds = %43
%49 = tail call x86_fp80 @exp2l(x86_fp80 %2)
br label %106
50: ; preds = %43
%51 = tail call x86_fp80 @powl(x86_fp80 %1, x86_fp80 %2)
br label %106
52: ; preds = %26
%53 = tail call i32 @strcmp(i8* dereferenceable(1) %0, i8* dereferenceable(4) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.6, i64 0, i64 0))
%54 = icmp eq i32 %53, 0
br i1 %54, label %55, label %57
55: ; preds = %52
%56 = tail call x86_fp80 @llvm.minnum.f80(x86_fp80 %1, x86_fp80 %2)
br label %106
57: ; preds = %52
%58 = tail call i32 @strcmp(i8* dereferenceable(1) %0, i8* dereferenceable(4) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.7, i64 0, i64 0))
%59 = icmp eq i32 %58, 0
br i1 %59, label %60, label %62
60: ; preds = %57
%61 = tail call x86_fp80 @llvm.maxnum.f80(x86_fp80 %1, x86_fp80 %2)
br label %106
62: ; preds = %57
%63 = tail call i32 @strcmp(i8* dereferenceable(1) %0, i8* dereferenceable(9) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.8, i64 0, i64 0))
%64 = icmp eq i32 %63, 0
br i1 %64, label %65, label %84
65: ; preds = %62
%66 = tail call i32 @fabsl(x86_fp80 %1)
%67 = tail call i64 @isless(i32 %66, x86_fp80 0xK3FD78CBCCC096F5088CC)
%68 = icmp eq i64 %67, 0
br i1 %68, label %72, label %69
69: ; preds = %65
%70 = fptrunc x86_fp80 %2 to double
%71 = tail call x86_fp80 @j0(double %70)
br label %106
72: ; preds = %65
%73 = fadd x86_fp80 %1, 0xKBFFF8000000000000000
%74 = tail call i32 @fabsl(x86_fp80 %73)
%75 = tail call i64 @isless(i32 %74, x86_fp80 0xK3FD78CBCCC096F5088CC)
%76 = icmp eq i64 %75, 0
br i1 %76, label %80, label %77
77: ; preds = %72
%78 = fptrunc x86_fp80 %2 to double
%79 = tail call x86_fp80 @j1(double %78)
br label %106
80: ; preds = %72
%81 = fptrunc x86_fp80 %1 to double
%82 = fptrunc x86_fp80 %2 to double
%83 = tail call x86_fp80 @jn(double %81, double %82)
br label %106
84: ; preds = %62
%85 = tail call i32 @strcmp(i8* dereferenceable(1) %0, i8* dereferenceable(9) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.9, i64 0, i64 0))
%86 = icmp eq i32 %85, 0
br i1 %86, label %87, label %106
87: ; preds = %84
%88 = tail call i32 @fabsl(x86_fp80 %1)
%89 = tail call i64 @isless(i32 %88, x86_fp80 0xK3FD78CBCCC096F5088CC)
%90 = icmp eq i64 %89, 0
br i1 %90, label %94, label %91
91: ; preds = %87
%92 = fptrunc x86_fp80 %2 to double
%93 = tail call x86_fp80 @y0(double %92)
br label %106
94: ; preds = %87
%95 = fadd x86_fp80 %1, 0xKBFFF8000000000000000
%96 = tail call i32 @fabsl(x86_fp80 %95)
%97 = tail call i64 @isless(i32 %96, x86_fp80 0xK3FD78CBCCC096F5088CC)
%98 = icmp eq i64 %97, 0
br i1 %98, label %102, label %99
99: ; preds = %94
%100 = fptrunc x86_fp80 %2 to double
%101 = tail call x86_fp80 @y1(double %100)
br label %106
102: ; preds = %94
%103 = fptrunc x86_fp80 %1 to double
%104 = fptrunc x86_fp80 %2 to double
%105 = tail call x86_fp80 @yn(double %103, double %104)
br label %106
106: ; preds = %6, %11, %16, %21, %34, %41, %48, %50, %55, %60, %69, %77, %80, %91, %99, %102, %84
%107 = phi x86_fp80 [ undef, %84 ], [ %93, %91 ], [ %101, %99 ], [ %105, %102 ], [ %71, %69 ], [ %79, %77 ], [ %83, %80 ], [ %61, %60 ], [ %56, %55 ], [ %35, %34 ], [ %42, %41 ], [ %49, %48 ], [ %51, %50 ], [ %22, %21 ], [ %17, %16 ], [ %12, %11 ], [ %7, %6 ]
ret x86_fp80 %107
}