#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 fabs(double);
int /*<<< orphan*/ fprintf(int /*<<< orphan*/, char *, double, double, double);
int /*<<< orphan*/ fputs(char *, int /*<<< orphan*/);
double pow(double, double);
double sinh(double);
double sqrt(double);
int /*<<< orphan*/ stderr;
double corbel_flon(double e, double capn) {
  int iflag = 0, IMAX = 10;
  double corbel_flon_out;
  double a, b, sq, biga, bigb;
  double x, x2;
  double f, fp, dx;
  double diff;
  double a0, a1;
  double b1;
  double a11 = 156.0, a9 = 17160.0, a7 = 1235520.0;
  double a5 = 51891840.0, a3 = 1037836800.0;
  double b11 = 11.0 * a11, b9 = 9.0 * a9, b7 = 7.0 * a7;
  double b5 = 5.0 * a5, b3 = 3.0 * a3;
  if (capn < 0.0) {
    iflag = 1;
    capn = -capn;
  }
  a1 = 6227020800.0 * (1.0 - 1.0 / e);
  a0 = -6227020800.0 * capn / e;
  b1 = a1;
  a = 6.0 * (e - 1.0) / e;
  b = -6.0 * capn / e;
  sq = sqrt(0.25 * b * b + a * a * a / 27.0);
  biga = pow((-0.5 * b + sq), 0.3333333333333333);
  bigb = pow(-(0.5 * b + sq), 0.3333333333333333);
  x = biga + bigb;
  corbel_flon_out = x;
  if (capn < 4.0e-15) {
    goto corbel_flon_normal_ret;
  }
  for (int i = 0; i < IMAX; i++) {
    x2 = x * x;
    f = a0 +
        x * (a1 +
             x2 * (a3 + x2 * (a5 + x2 * (a7 + x2 * (a9 + x2 * (a11 + x2))))));
    fp = b1 +
         x2 * (b3 + x2 * (b5 + x2 * (b7 + x2 * (b9 + x2 * (b11 + 13.0 * x2)))));
    dx = -f / fp;
    corbel_flon_out = x + dx;
    if (fabs(dx) < 4.0e-15) {
      goto corbel_flon_normal_ret;
    }
    x = corbel_flon_out;
  }
  if (iflag == 1) {
    corbel_flon_out = -corbel_flon_out;
    capn = -capn;
  }
  fputs("FLON : RETURNING WITHOUT COMPLETE CONVERGENCE\n", stderr);
  diff = e * sinh(corbel_flon_out) - corbel_flon_out - capn;
  fprintf(stderr, "N: %f, F: %f, ecc * sinh(F) - F - N: %f\n", capn,
          corbel_flon_out, diff);
  return corbel_flon_out;
corbel_flon_normal_ret:
  if (iflag == 1) {
    corbel_flon_out = -corbel_flon_out;
    capn = -capn;
  }
  return corbel_flon_out;
}


x86 assembly (clang, -O0):
<corbel_flon>:
push   %rbp
mov    %rsp,%rbp
sub    $0x100,%rsp
movsd  %xmm0,-0x10(%rbp)
movsd  %xmm1,-0x18(%rbp)
movl   $0x0,-0x1c(%rbp)
movl   $0xa,-0x20(%rbp)
movsd  0xecd(%rip),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  0xeb5(%rip),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  0xe9d(%rip),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  0xe85(%rip),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  0xe6d(%rip),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  0xe55(%rip),%xmm0
mulsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  0xe35(%rip),%xmm0
mulsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  0xe15(%rip),%xmm0
mulsd  -0xb0(%rbp),%xmm0
ff
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  0xdf5(%rip),%xmm0
mulsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  0xdd5(%rip),%xmm0
mulsd  -0xc0(%rbp),%xmm0
ff
movsd  %xmm0,-0xe8(%rbp)
ff
xorps  %xmm0,%xmm0
ucomisd -0x18(%rbp),%xmm0
jbe    1271 <corbel_flon+0x121>
movl   $0x1,-0x1c(%rbp)
movsd  -0x18(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  0xe17(%rip),%xmm0
divsd  -0x10(%rbp),%xmm0
movsd  0xe0a(%rip),%xmm1
subsd  %xmm0,%xmm1
movsd  0xe0e(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  0xdf2(%rip),%xmm0
mulsd  -0x18(%rbp),%xmm0
divsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x10(%rbp),%xmm1
movsd  0xdbb(%rip),%xmm0
subsd  %xmm0,%xmm1
movsd  0xda7(%rip),%xmm0
mulsd  %xmm1,%xmm0
divsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  0xd89(%rip),%xmm0
mulsd  -0x18(%rbp),%xmm0
divsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  0xd6a(%rip),%xmm0
mulsd  -0x38(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm2
movsd  -0x30(%rbp),%xmm1
mulsd  -0x30(%rbp),%xmm1
mulsd  -0x30(%rbp),%xmm1
movsd  0xd41(%rip),%xmm3
divsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1070 <sqrt@plt>
movsd  %xmm0,-0x40(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x40(%rbp),%xmm1
movsd  0xd11(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  0xcf1(%rip),%xmm1
call   1060 <pow@plt>
movsd  %xmm0,-0x48(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x40(%rbp),%xmm1
movsd  0xcdd(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  0xcae(%rip),%xmm1
call   1060 <pow@plt>
movsd  %xmm0,-0x50(%rbp)
movsd  -0x48(%rbp),%xmm0
addsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  0xc7b(%rip),%xmm0
ucomisd -0x18(%rbp),%xmm0
jbe    13e5 <corbel_flon+0x295>
jmp    169b <corbel_flon+0x54b>
movl   $0x0,-0xec(%rbp)
mov    -0xec(%rbp),%eax
cmp    -0x20(%rbp),%eax
jge    15b7 <corbel_flon+0x467>
movsd  -0x58(%rbp),%xmm0
mulsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x88(%rbp),%xmm1
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x90(%rbp),%xmm3
ff
movsd  -0x60(%rbp),%xmm2
movsd  -0xc0(%rbp),%xmm5
ff
movsd  -0x60(%rbp),%xmm4
movsd  -0xb8(%rbp),%xmm7
ff
movsd  -0x60(%rbp),%xmm6
movsd  -0xb0(%rbp),%xmm9
ff ff
movsd  -0x60(%rbp),%xmm8
movsd  -0xa8(%rbp),%xmm11
ff ff
movsd  -0x60(%rbp),%xmm10
movsd  -0xa0(%rbp),%xmm12
ff ff
addsd  -0x60(%rbp),%xmm12
mulsd  %xmm12,%xmm10
addsd  %xmm11,%xmm10
mulsd  %xmm10,%xmm8
addsd  %xmm9,%xmm8
mulsd  %xmm8,%xmm6
addsd  %xmm7,%xmm6
mulsd  %xmm6,%xmm4
addsd  %xmm5,%xmm4
mulsd  %xmm4,%xmm2
addsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x98(%rbp),%xmm1
ff
movsd  -0x60(%rbp),%xmm0
movsd  -0xe8(%rbp),%xmm3
ff
movsd  -0x60(%rbp),%xmm2
movsd  -0xe0(%rbp),%xmm5
ff
movsd  -0x60(%rbp),%xmm4
movsd  -0xd8(%rbp),%xmm7
ff
movsd  -0x60(%rbp),%xmm6
movsd  -0xd0(%rbp),%xmm9
ff ff
movsd  -0x60(%rbp),%xmm8
movsd  -0xc8(%rbp),%xmm11
ff ff
movsd  -0x60(%rbp),%xmm10
movsd  0xba5(%rip),%xmm12
mulsd  %xmm12,%xmm10
addsd  %xmm11,%xmm10
mulsd  %xmm10,%xmm8
addsd  %xmm9,%xmm8
mulsd  %xmm8,%xmm6
addsd  %xmm7,%xmm6
mulsd  %xmm6,%xmm4
addsd  %xmm5,%xmm4
mulsd  %xmm4,%xmm2
addsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x68(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
divsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x58(%rbp),%xmm0
addsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x78(%rbp),%xmm1
movaps 0xb32(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  0xac6(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1599 <corbel_flon+0x449>
jmp    169b <corbel_flon+0x54b>
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0xec(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xec(%rbp)
jmp    13ef <corbel_flon+0x29f>
cmpl   $0x1,-0x1c(%rbp)
jne    1603 <corbel_flon+0x4b3>
movsd  -0x28(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x18(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x18(%rbp)
mov    0x29d6(%rip),%rax
mov    (%rax),%esi
lea    0xaad(%rip),%rdi
call   1040 <fputs@plt>
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
call   1030 <sinh@plt>
movaps %xmm0,%xmm2
movsd  -0xf8(%rbp),%xmm0
ff
movsd  -0x28(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
subsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    0x2971(%rip),%rax
mov    (%rax),%edi
movsd  -0x18(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
movsd  -0x80(%rbp),%xmm2
lea    0xa68(%rip),%rsi
call   1050 <fprintf@plt>
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    16f1 <corbel_flon+0x5a1>
cmpl   $0x1,-0x1c(%rbp)
jne    16e7 <corbel_flon+0x597>
movsd  -0x28(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x18(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
add    $0x100,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<corbel_flon>:
push   %rbx
sub    $0x40,%rsp
movapd 0xea3(%rip),%xmm2
xorpd  %xmm1,%xmm2
xorpd  %xmm4,%xmm4
movapd %xmm1,%xmm5
cmpltsd %xmm4,%xmm5
andpd  %xmm5,%xmm2
andnpd %xmm1,%xmm5
orpd   %xmm2,%xmm5
movapd %xmm0,%xmm2
addsd  0xe9a(%rip),%xmm2
mulsd  0xeb2(%rip),%xmm2
divsd  %xmm0,%xmm2
movsd  0xeae(%rip),%xmm6
mulsd  %xmm5,%xmm6
movsd  %xmm0,0x20(%rsp)
divsd  %xmm0,%xmm6
movsd  0xea0(%rip),%xmm0
mulsd  %xmm6,%xmm0
movapd %xmm2,%xmm3
mulsd  %xmm2,%xmm3
mulsd  %xmm2,%xmm3
divsd  0xe90(%rip),%xmm3
mulsd  %xmm6,%xmm0
addsd  %xmm3,%xmm0
ucomisd %xmm4,%xmm0
movapd %xmm1,0x10(%rsp)
movapd %xmm5,0x30(%rsp)
movapd %xmm6,(%rsp)
jb     11f0 <corbel_flon+0xa0>
xorps  %xmm1,%xmm1
sqrtsd %xmm0,%xmm1
jmp    11fe <corbel_flon+0xae>
call   1070 <sqrt@plt>
movapd (%rsp),%xmm6
movapd %xmm0,%xmm1
movsd  %xmm1,0x28(%rsp)
movsd  0xe54(%rip),%xmm0
mulsd  %xmm6,%xmm0
addsd  %xmm1,%xmm0
movsd  0xe4c(%rip),%xmm1
call   1060 <pow@plt>
movapd (%rsp),%xmm1
mulsd  0xe42(%rip),%xmm1
movsd  %xmm0,(%rsp)
addsd  0x28(%rsp),%xmm1
xorpd  0xdbf(%rip),%xmm1
movapd %xmm1,%xmm0
movsd  0xe1b(%rip),%xmm1
call   1060 <pow@plt>
movapd %xmm0,%xmm10
addsd  (%rsp),%xmm10
movsd  0xe13(%rip),%xmm5
movapd 0x30(%rsp),%xmm2
ucomisd %xmm2,%xmm5
jbe    12a3 <corbel_flon+0x153>
movapd 0x10(%rsp),%xmm2
movapd 0xd81(%rip),%xmm0
xorpd  %xmm10,%xmm0
xorpd  %xmm1,%xmm1
cmpltsd %xmm1,%xmm2
andpd  %xmm2,%xmm0
andnpd %xmm10,%xmm2
orpd   %xmm0,%xmm2
movapd %xmm2,%xmm0
jmp    148f <corbel_flon+0x33f>
movsd  0x20(%rsp),%xmm0
movsd  0xd6e(%rip),%xmm11
divsd  %xmm0,%xmm11
addsd  0xd68(%rip),%xmm11
mulsd  0xd70(%rip),%xmm2
mulsd  0xd5f(%rip),%xmm11
divsd  %xmm0,%xmm2
mov    $0xa,%eax
movsd  0xdc5(%rip),%xmm14
movsd  0xdc4(%rip),%xmm15
movsd  0xdc3(%rip),%xmm12
movsd  0xdc2(%rip),%xmm13
movsd  0xdc2(%rip),%xmm1
movsd  0xdc2(%rip),%xmm7
movapd 0xcea(%rip),%xmm3
movapd 0xcf2(%rip),%xmm4
xchg   %ax,%ax
movapd %xmm10,%xmm9
mulsd  %xmm10,%xmm9
movapd %xmm9,%xmm8
addsd  0xd48(%rip),%xmm8
mulsd  %xmm9,%xmm8
addsd  0xd42(%rip),%xmm8
mulsd  %xmm9,%xmm8
addsd  0xd3c(%rip),%xmm8
mulsd  %xmm9,%xmm8
addsd  0xd36(%rip),%xmm8
mulsd  %xmm9,%xmm8
addsd  0xd30(%rip),%xmm8
mulsd  %xmm9,%xmm8
movapd %xmm9,%xmm0
mulsd  %xmm14,%xmm0
addsd  %xmm15,%xmm0
mulsd  %xmm9,%xmm0
addsd  %xmm12,%xmm0
mulsd  %xmm9,%xmm0
addsd  %xmm13,%xmm0
mulsd  %xmm9,%xmm0
addsd  %xmm1,%xmm0
mulsd  %xmm9,%xmm0
addsd  %xmm7,%xmm0
mulsd  %xmm9,%xmm0
movapd %xmm5,%xmm6
movapd %xmm11,%xmm5
addsd  %xmm11,%xmm8
mulsd  %xmm10,%xmm8
addsd  %xmm2,%xmm8
xorpd  %xmm3,%xmm8
addsd  %xmm11,%xmm0
divsd  %xmm0,%xmm8
addsd  %xmm8,%xmm10
andpd  %xmm4,%xmm8
ucomisd %xmm8,%xmm6
ja     1271 <corbel_flon+0x121>
movapd %xmm6,%xmm5
add    $0xffffffff,%eax
jne    1320 <corbel_flon+0x1d0>
xorpd  %xmm1,%xmm1
movapd 0x10(%rsp),%xmm3
ucomisd %xmm3,%xmm1
movapd 0xbf2(%rip),%xmm0
movapd %xmm10,%xmm2
xorpd  %xmm0,%xmm2
movapd %xmm3,%xmm4
cmpltsd %xmm1,%xmm4
andpd  %xmm4,%xmm2
andnpd %xmm10,%xmm4
orpd   %xmm2,%xmm4
movapd %xmm4,(%rsp)
jbe    1440 <corbel_flon+0x2f0>
xorpd  0x30(%rsp),%xmm0
movapd %xmm0,0x10(%rsp)
mov    0x2b99(%rip),%rbx
mov    (%rbx),%esi
lea    0xc88(%rip),%rdi
call   1040 <fputs@plt>
movapd (%rsp),%xmm0
call   1030 <sinh@plt>
movsd  0x20(%rsp),%xmm2
mulsd  %xmm0,%xmm2
movapd (%rsp),%xmm1
subsd  %xmm1,%xmm2
movapd 0x10(%rsp),%xmm0
subsd  %xmm0,%xmm2
mov    (%rbx),%edi
lea    0xc82(%rip),%rsi
call   1050 <fprintf@plt>
movapd (%rsp),%xmm0
add    $0x40,%rsp
pop    %rbx
ret

LLVM IR (-O0):
@.str = [47 x i8] c"FLON : RETURNING WITHOUT COMPLETE CONVERGENCE\0A\00"
@stderr = global i32 0
@.str.1 = [41 x i8] c"N: %f, F: %f, ecc * sinh(F) - F - N: %f\0A\00"
define double @corbel_flon(double %0, double %1) {
%3 = alloca double
%4 = alloca double
%5 = alloca double
%6 = alloca i32
%7 = alloca i32
%8 = alloca double
%9 = alloca double
%10 = alloca double
%11 = alloca double
%12 = alloca double
%13 = alloca double
%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
%27 = alloca double
%28 = alloca double
%29 = alloca double
%30 = alloca double
%31 = alloca double
%32 = alloca double
%33 = alloca i32
store double %0, double* %4
store double %1, double* %5
store i32 0, i32* %6
store i32 10, i32* %7
store double 1.560000e+02, double* %23
store double 1.716000e+04, double* %24
store double 1.235520e+06, double* %25
store double 0x4188BE7400000000, double* %26
store double 0x41CEEE1100000000, double* %27
%34 = load double, double* %23
%35 = fmul double 1.100000e+01, %34
store double %35, double* %28
%36 = load double, double* %24
%37 = fmul double 9.000000e+00, %36
store double %37, double* %29
%38 = load double, double* %25
%39 = fmul double 7.000000e+00, %38
store double %39, double* %30
%40 = load double, double* %26
%41 = fmul double 5.000000e+00, %40
store double %41, double* %31
%42 = load double, double* %27
%43 = fmul double 3.000000e+00, %42
store double %43, double* %32
%44 = load double, double* %5
%45 = fcmp olt double %44, 0.000000e+00
br i1 %45, label %46, label %49
46: ; preds = %2
store i32 1, i32* %6
%47 = load double, double* %5
%48 = fneg double %47
store double %48, double* %5
br label %49
49: ; preds = %46, %2
%50 = load double, double* %4
%51 = fdiv double 1.000000e+00, %50
%52 = fsub double 1.000000e+00, %51
%53 = fmul double 0x41F7328CC0000000, %52
store double %53, double* %21
%54 = load double, double* %5
%55 = fmul double 0xC1F7328CC0000000, %54
%56 = load double, double* %4
%57 = fdiv double %55, %56
store double %57, double* %20
%58 = load double, double* %21
store double %58, double* %22
%59 = load double, double* %4
%60 = fsub double %59, 1.000000e+00
%61 = fmul double 6.000000e+00, %60
%62 = load double, double* %4
%63 = fdiv double %61, %62
store double %63, double* %9
%64 = load double, double* %5
%65 = fmul double -6.000000e+00, %64
%66 = load double, double* %4
%67 = fdiv double %65, %66
store double %67, double* %10
%68 = load double, double* %10
%69 = fmul double 2.500000e-01, %68
%70 = load double, double* %10
%71 = load double, double* %9
%72 = load double, double* %9
%73 = fmul double %71, %72
%74 = load double, double* %9
%75 = fmul double %73, %74
%76 = fdiv double %75, 2.700000e+01
%77 = call double @llvm.fmuladd.f64(double %69, double %70, double %76)
%78 = call double @sqrt(double %77)
store double %78, double* %11
%79 = load double, double* %10
%80 = load double, double* %11
%81 = call double @llvm.fmuladd.f64(double -5.000000e-01, double %79, double %80)
%82 = call double @pow(double %81, double 0x3FD5555555555555)
store double %82, double* %12
%83 = load double, double* %10
%84 = load double, double* %11
%85 = call double @llvm.fmuladd.f64(double 5.000000e-01, double %83, double %84)
%86 = fneg double %85
%87 = call double @pow(double %86, double 0x3FD5555555555555)
store double %87, double* %13
%88 = load double, double* %12
%89 = load double, double* %13
%90 = fadd double %88, %89
store double %90, double* %14
%91 = load double, double* %14
store double %91, double* %8
%92 = load double, double* %5
%93 = fcmp olt double %92, 4.000000e-15
br i1 %93, label %94, label %95
94: ; preds = %49
br label %184
95: ; preds = %49
store i32 0, i32* %33
br label %96
96: ; preds = %156, %95
%97 = load i32, i32* %33
%98 = load i32, i32* %7
%99 = icmp slt i32 %97, %98
br i1 %99, label %100, label %159
100: ; preds = %96
%101 = load double, double* %14
%102 = load double, double* %14
%103 = fmul double %101, %102
store double %103, double* %15
%104 = load double, double* %20
%105 = load double, double* %14
%106 = load double, double* %21
%107 = load double, double* %15
%108 = load double, double* %27
%109 = load double, double* %15
%110 = load double, double* %26
%111 = load double, double* %15
%112 = load double, double* %25
%113 = load double, double* %15
%114 = load double, double* %24
%115 = load double, double* %15
%116 = load double, double* %23
%117 = load double, double* %15
%118 = fadd double %116, %117
%119 = call double @llvm.fmuladd.f64(double %115, double %118, double %114)
%120 = call double @llvm.fmuladd.f64(double %113, double %119, double %112)
%121 = call double @llvm.fmuladd.f64(double %111, double %120, double %110)
%122 = call double @llvm.fmuladd.f64(double %109, double %121, double %108)
%123 = call double @llvm.fmuladd.f64(double %107, double %122, double %106)
%124 = call double @llvm.fmuladd.f64(double %105, double %123, double %104)
store double %124, double* %16
%125 = load double, double* %22
%126 = load double, double* %15
%127 = load double, double* %32
%128 = load double, double* %15
%129 = load double, double* %31
%130 = load double, double* %15
%131 = load double, double* %30
%132 = load double, double* %15
%133 = load double, double* %29
%134 = load double, double* %15
%135 = load double, double* %28
%136 = load double, double* %15
%137 = call double @llvm.fmuladd.f64(double 1.300000e+01, double %136, double %135)
%138 = call double @llvm.fmuladd.f64(double %134, double %137, double %133)
%139 = call double @llvm.fmuladd.f64(double %132, double %138, double %131)
%140 = call double @llvm.fmuladd.f64(double %130, double %139, double %129)
%141 = call double @llvm.fmuladd.f64(double %128, double %140, double %127)
%142 = call double @llvm.fmuladd.f64(double %126, double %141, double %125)
store double %142, double* %17
%143 = load double, double* %16
%144 = fneg double %143
%145 = load double, double* %17
%146 = fdiv double %144, %145
store double %146, double* %18
%147 = load double, double* %14
%148 = load double, double* %18
%149 = fadd double %147, %148
store double %149, double* %8
%150 = load double, double* %18
%151 = call double @llvm.fabs.f64(double %150)
%152 = fcmp olt double %151, 4.000000e-15
br i1 %152, label %153, label %154
153: ; preds = %100
br label %184
154: ; preds = %100
%155 = load double, double* %8
store double %155, double* %14
br label %156
156: ; preds = %154
%157 = load i32, i32* %33
%158 = add nsw i32 %157, 1
store i32 %158, i32* %33
br label %96
159: ; preds = %96
%160 = load i32, i32* %6
%161 = icmp eq i32 %160, 1
br i1 %161, label %162, label %167
162: ; preds = %159
%163 = load double, double* %8
%164 = fneg double %163
store double %164, double* %8
%165 = load double, double* %5
%166 = fneg double %165
store double %166, double* %5
br label %167
167: ; preds = %162, %159
%168 = load i32, i32* @stderr
%169 = call i32 @fputs(i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str, i64 0, i64 0), i32 %168)
%170 = load double, double* %4
%171 = load double, double* %8
%172 = call double @sinh(double %171)
%173 = load double, double* %8
%174 = fneg double %173
%175 = call double @llvm.fmuladd.f64(double %170, double %172, double %174)
%176 = load double, double* %5
%177 = fsub double %175, %176
store double %177, double* %19
%178 = load i32, i32* @stderr
%179 = load double, double* %5
%180 = load double, double* %8
%181 = load double, double* %19
%182 = call i32 @fprintf(i32 %178, i8* getelementptr inbounds ([41 x i8], [41 x i8]* @.str.1, i64 0, i64 0), double %179, double %180, double %181)
%183 = load double, double* %8
store double %183, double* %3
br label %194
184: ; preds = %153, %94
%185 = load i32, i32* %6
%186 = icmp eq i32 %185, 1
br i1 %186, label %187, label %192
187: ; preds = %184
%188 = load double, double* %8
%189 = fneg double %188
store double %189, double* %8
%190 = load double, double* %5
%191 = fneg double %190
store double %191, double* %5
br label %192
192: ; preds = %187, %184
%193 = load double, double* %8
store double %193, double* %3
br label %194
194: ; preds = %192, %167
%195 = load double, double* %3
ret double %195
}

LLVM IR (-O2):
@.str = [47 x i8] c"FLON : RETURNING WITHOUT COMPLETE CONVERGENCE\0A\00"
@stderr = global i32 0
@.str.1 = [41 x i8] c"N: %f, F: %f, ecc * sinh(F) - F - N: %f\0A\00"
define double @corbel_flon(double %0, double %1) {
%3 = fcmp olt double %1, 0.000000e+00
%4 = fneg double %1
%5 = select i1 %3, double %4, double %1
%6 = fdiv double 1.000000e+00, %0
%7 = fsub double 1.000000e+00, %6
%8 = fmul double %7, 0x41F7328CC0000000
%9 = fmul double %5, 0xC1F7328CC0000000
%10 = fdiv double %9, %0
%11 = fadd double %0, -1.000000e+00
%12 = fmul double %11, 6.000000e+00
%13 = fdiv double %12, %0
%14 = fmul double %5, -6.000000e+00
%15 = fdiv double %14, %0
%16 = fmul double %15, 2.500000e-01
%17 = fmul double %13, %13
%18 = fmul double %13, %17
%19 = fdiv double %18, 2.700000e+01
%20 = tail call double @llvm.fmuladd.f64(double %16, double %15, double %19)
%21 = tail call double @sqrt(double %20)
%22 = tail call double @llvm.fmuladd.f64(double %15, double -5.000000e-01, double %21)
%23 = tail call double @pow(double %22, double 0x3FD5555555555555)
%24 = tail call double @llvm.fmuladd.f64(double %15, double 5.000000e-01, double %21)
%25 = fneg double %24
%26 = tail call double @pow(double %25, double 0x3FD5555555555555)
%27 = fadd double %23, %26
%28 = fcmp olt double %5, 4.000000e-15
br i1 %28, label %67, label %32
29: ; preds = %32
%30 = add nuw nsw i32 %33, 1
%31 = icmp eq i32 %30, 10
br i1 %31, label %54, label %32
32: ; preds = %2, %29
%33 = phi i32 [ %30, %29 ], [ 0, %2 ]
%34 = phi double [ %51, %29 ], [ %27, %2 ]
%35 = fmul double %34, %34
%36 = fadd double %35, 1.560000e+02
%37 = tail call double @llvm.fmuladd.f64(double %35, double %36, double 1.716000e+04)
%38 = tail call double @llvm.fmuladd.f64(double %35, double %37, double 1.235520e+06)
%39 = tail call double @llvm.fmuladd.f64(double %35, double %38, double 0x4188BE7400000000)
%40 = tail call double @llvm.fmuladd.f64(double %35, double %39, double 0x41CEEE1100000000)
%41 = tail call double @llvm.fmuladd.f64(double %35, double %40, double %8)
%42 = tail call double @llvm.fmuladd.f64(double %34, double %41, double %10)
%43 = tail call double @llvm.fmuladd.f64(double %35, double 1.300000e+01, double 1.716000e+03)
%44 = tail call double @llvm.fmuladd.f64(double %35, double %43, double 1.544400e+05)
%45 = tail call double @llvm.fmuladd.f64(double %35, double %44, double 8.648640e+06)
%46 = tail call double @llvm.fmuladd.f64(double %35, double %45, double 0x41AEEE1100000000)
%47 = tail call double @llvm.fmuladd.f64(double %35, double %46, double 0x41E7328CC0000000)
%48 = tail call double @llvm.fmuladd.f64(double %35, double %47, double %8)
%49 = fneg double %42
%50 = fdiv double %49, %48
%51 = fadd double %34, %50
%52 = tail call double @llvm.fabs.f64(double %50)
%53 = fcmp olt double %52, 4.000000e-15
br i1 %53, label %67, label %29
54: ; preds = %29
%55 = fneg double %51
%56 = fneg double %5
%57 = select i1 %3, double %55, double %51
%58 = select i1 %3, double %56, double %1
%59 = load i32, i32* @stderr
%60 = tail call i32 @fputs(i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str, i64 0, i64 0), i32 %59)
%61 = tail call double @sinh(double %57)
%62 = fneg double %57
%63 = tail call double @llvm.fmuladd.f64(double %0, double %61, double %62)
%64 = fsub double %63, %58
%65 = load i32, i32* @stderr
%66 = tail call i32 @fprintf(i32 %65, i8* getelementptr inbounds ([41 x i8], [41 x i8]* @.str.1, i64 0, i64 0), double %58, double %57, double %64)
br label %71
67: ; preds = %32, %2
%68 = phi double [ %27, %2 ], [ %51, %32 ]
%69 = fneg double %68
%70 = select i1 %3, double %69, double %68
br label %71
71: ; preds = %67, %54
%72 = phi double [ %70, %67 ], [ %57, %54 ]
ret double %72
}