#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 DBL_EPSILON;
double fabs(double);
double fmax(double, double);
int log(int);
int odrrk(int *n, int *iw, double *gl, double *gu, double *d__, double *e2,
          double *pivmin, double *reltol, double *w, double *werr, int *info) {
  int i__1;
  double d__1, d__2;
  int i__, it;
  double mid, eps, tmp1, tmp2, left, atoli, right;
  int itmax;
  double rtoli, tnorm;
  int negcnt;
  --e2;
  --d__;
  eps = DBL_EPSILON;
  d__1 = fabs(*gl), d__2 = fabs(*gu);
  tnorm = fmax(d__1, d__2);
  rtoli = *reltol;
  atoli = *pivmin * 4.;
  itmax = (int)((log(tnorm + *pivmin) - log(*pivmin)) / log(2.)) + 2;
  *info = -1;
  left = *gl - tnorm * 2. * eps * *n - *pivmin * 4.;
  right = *gu + tnorm * 2. * eps * *n + *pivmin * 4.;
  it = 0;
L10:
  tmp1 = (d__1 = right - left, fabs(d__1));
  d__1 = fabs(right), d__2 = fabs(left);
  tmp2 = fmax(d__1, d__2);
  d__1 = fmax(atoli, *pivmin), d__2 = rtoli * tmp2;
  if (tmp1 < fmax(d__1, d__2)) {
    *info = 0;
    goto L30;
  }
  if (it > itmax) {
    goto L30;
  }
  ++it;
  mid = (left + right) * .5;
  negcnt = 0;
  tmp1 = d__[1] - mid;
  if (fabs(tmp1) < *pivmin) {
    tmp1 = -(*pivmin);
  }
  if (tmp1 <= 0.) {
    ++negcnt;
  }
  i__1 = *n;
  for (i__ = 2; i__ <= i__1; ++i__) {
    tmp1 = d__[i__] - e2[i__ - 1] / tmp1 - mid;
    if (fabs(tmp1) < *pivmin) {
      tmp1 = -(*pivmin);
    }
    if (tmp1 <= 0.) {
      ++negcnt;
    }
  }
  if (negcnt >= *iw) {
    right = mid;
  } else {
    left = mid;
  }
  goto L10;
L30:
  *w = (left + right) * .5;
  *werr = (d__1 = right - left, fabs(d__1)) * .5;
  return 0;
}


x86 assembly (clang, -O0):
<odrrk>:
push   %rbp
mov    %rsp,%rbp
sub    $0xb0,%rsp
mov    0x30(%rbp),%rax
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
mov    -0x30(%rbp),%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,-0x30(%rbp)
mov    -0x28(%rbp),%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,-0x28(%rbp)
mov    0x2e82(%rip),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
movaps 0xea2(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movaps 0xe8a(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x40(%rbp),%xmm3
movsd  -0x48(%rbp),%xmm2
movaps %xmm2,%xmm4
movaps %xmm3,%xmm0
cmpunordsd %xmm0,%xmm0
movaps %xmm0,%xmm1
pand   %xmm4,%xmm1
maxsd  %xmm3,%xmm2
pandn  %xmm2,%xmm0
por    %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    0x18(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0xe15(%rip),%xmm0
mulsd  (%rax),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0xa0(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
addsd  (%rax),%xmm0
cvttsd2si %xmm0,%edi
call   1030 <log@plt>
mov    %eax,-0xac(%rbp)
mov    0x10(%rbp),%rax
cvttsd2si (%rax),%edi
call   1030 <log@plt>
mov    %eax,%ecx
mov    -0xac(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0xa8(%rbp)
mov    $0x2,%edi
call   1030 <log@plt>
mov    %eax,%ecx
mov    -0xa8(%rbp),%eax
cltd
idiv   %ecx
add    $0x2,%eax
mov    %eax,-0x8c(%rbp)
mov    0x30(%rbp),%rax
movl   $0xffffffff,(%rax)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0xda0(%rip),%xmm1
mulsd  -0xa0(%rbp),%xmm1
ff
mulsd  -0x60(%rbp),%xmm1
mov    -0x8(%rbp),%rax
cvtsi2sdl (%rax),%xmm2
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  0xd3d(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0xd28(%rip),%xmm1
mulsd  -0xa0(%rbp),%xmm1
ff
mulsd  -0x60(%rbp),%xmm1
mov    -0x8(%rbp),%rax
cvtsi2sdl (%rax),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0xcf3(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movl   $0x0,-0x50(%rbp)
movsd  -0x88(%rbp),%xmm0
ff
subsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
movaps 0xcde(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x88(%rbp),%xmm0
ff
movaps 0xcc6(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x78(%rbp),%xmm0
movaps 0xcb1(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x40(%rbp),%xmm3
movsd  -0x48(%rbp),%xmm2
movaps %xmm2,%xmm4
movaps %xmm3,%xmm0
cmpunordsd %xmm0,%xmm0
movaps %xmm0,%xmm1
pand   %xmm4,%xmm1
maxsd  %xmm3,%xmm2
pandn  %xmm2,%xmm0
por    %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x80(%rbp),%xmm3
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm2
movaps %xmm2,%xmm4
movaps %xmm3,%xmm0
cmpunordsd %xmm0,%xmm0
movaps %xmm0,%xmm1
pand   %xmm4,%xmm1
maxsd  %xmm3,%xmm2
pandn  %xmm2,%xmm0
por    %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x98(%rbp),%xmm0
ff
mulsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x68(%rbp),%xmm1
movsd  -0x40(%rbp),%xmm4
movsd  -0x48(%rbp),%xmm3
movaps %xmm3,%xmm5
movaps %xmm4,%xmm0
cmpunordsd %xmm0,%xmm0
movaps %xmm0,%xmm2
pand   %xmm5,%xmm2
maxsd  %xmm4,%xmm3
pandn  %xmm3,%xmm0
por    %xmm2,%xmm0
ucomisd %xmm1,%xmm0
jbe    142d <odrrk+0x31d>
mov    0x30(%rbp),%rax
movl   $0x0,(%rax)
jmp    15df <odrrk+0x4cf>
mov    -0x50(%rbp),%eax
cmp    -0x8c(%rbp),%eax
jle    1441 <odrrk+0x331>
jmp    15df <odrrk+0x4cf>
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
movsd  -0x78(%rbp),%xmm0
addsd  -0x88(%rbp),%xmm0
ff
movsd  0xbb1(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movl   $0x0,-0xa4(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm0
subsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm1
movaps 0xb8f(%rip),%xmm0
pand   %xmm0,%xmm1
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm0
ucomisd %xmm1,%xmm0
jbe    14cb <odrrk+0x3bb>
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x68(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x68(%rbp),%xmm0
jb     14e8 <odrrk+0x3d8>
mov    -0xa4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xa4(%rbp)
mov    -0x8(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x34(%rbp)
movl   $0x2,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
cmp    -0x34(%rbp),%eax
jg     15ac <odrrk+0x49c>
mov    -0x28(%rbp),%rax
movslq -0x4c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x30(%rbp),%rax
mov    -0x4c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
divsd  -0x68(%rbp),%xmm1
subsd  %xmm1,%xmm0
subsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm1
movaps 0xade(%rip),%xmm0
pand   %xmm0,%xmm1
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm0
ucomisd %xmm1,%xmm0
jbe    157c <odrrk+0x46c>
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x68(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x68(%rbp),%xmm0
jb     1599 <odrrk+0x489>
mov    -0xa4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xa4(%rbp)
jmp    159e <odrrk+0x48e>
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
jmp    14f8 <odrrk+0x3e8>
mov    -0xa4(%rbp),%eax
mov    -0x10(%rbp),%rcx
cmp    (%rcx),%eax
jl     15d0 <odrrk+0x4c0>
movsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
jmp    15da <odrrk+0x4ca>
movsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
jmp    1324 <odrrk+0x214>
movsd  -0x78(%rbp),%xmm0
addsd  -0x88(%rbp),%xmm0
ff
movsd  0xa1c(%rip),%xmm1
mulsd  %xmm1,%xmm0
mov    0x20(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x88(%rbp),%xmm0
ff
subsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
movaps 0xa02(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  0x9e6(%rip),%xmm1
mulsd  %xmm1,%xmm0
mov    0x28(%rbp),%rax
movsd  %xmm0,(%rax)
xor    %eax,%eax
add    $0xb0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<odrrk>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x48,%rsp
mov    %r9,%r14
mov    %r8,%rbx
mov    %rcx,0x10(%rsp)
mov    %rdx,%r13
mov    %rsi,%r15
mov    %rdi,0x18(%rsp)
mov    0x80(%rsp),%r12
mov    0x88(%rsp),%rax
mov    0x2e9d(%rip),%rsi
movsd  (%rdx),%xmm0
movapd 0xea9(%rip),%xmm2
andpd  %xmm2,%xmm0
movsd  (%rcx),%xmm1
andpd  %xmm2,%xmm1
movapd %xmm0,%xmm3
cmpunordsd %xmm0,%xmm3
movapd %xmm3,%xmm2
andpd  %xmm1,%xmm2
maxsd  %xmm0,%xmm1
andnpd %xmm1,%xmm3
orpd   %xmm2,%xmm3
movsd  (%rax),%xmm0
movsd  %xmm0,0x8(%rsp)
movsd  (%r12),%xmm1
movapd %xmm3,%xmm0
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edi
mulsd  0xe7c(%rip),%xmm1
movapd %xmm1,0x20(%rsp)
addsd  %xmm3,%xmm3
mulsd  (%rsi),%xmm3
movapd %xmm3,0x30(%rsp)
call   1030 <log@plt>
mov    %eax,%ebp
cvttsd2si (%r12),%edi
call   1030 <log@plt>
sub    %eax,%ebp
mov    $0x2,%edi
call   1030 <log@plt>
movapd 0x20(%rsp),%xmm14
movsd  0x8(%rsp),%xmm13
movapd 0xe13(%rip),%xmm12
mov    0xa0(%rsp),%r8
mov    %eax,%ecx
mov    %ebp,%eax
cltd
idiv   %ecx
add    $0x2,%eax
movl   $0xffffffff,(%r8)
movsd  0x0(%r13),%xmm9
mov    0x18(%rsp),%rcx
mov    (%rcx),%ecx
cvtsi2sd %ecx,%xmm10
mulsd  0x30(%rsp),%xmm10
subsd  %xmm10,%xmm9
movsd  (%r12),%xmm2
movapd 0xdde(%rip),%xmm3
xorpd  %xmm2,%xmm3
movsd  0xde2(%rip),%xmm0
mulsd  %xmm2,%xmm0
subsd  %xmm0,%xmm9
mov    0x10(%rsp),%rdx
addsd  (%rdx),%xmm10
addsd  %xmm0,%xmm10
movapd %xmm2,%xmm4
maxsd  %xmm14,%xmm4
cmpunordsd %xmm14,%xmm14
movapd %xmm14,%xmm5
andnpd %xmm4,%xmm5
andpd  %xmm2,%xmm14
orpd   %xmm5,%xmm14
lea    0x1(%rcx),%edx
test   %eax,%eax
mov    $0xffffffff,%esi
cmovns %eax,%esi
add    $0x1,%esi
add    $0xfffffffffffffffe,%rdx
xor    %eax,%eax
movsd  0xd91(%rip),%xmm8
movapd 0xd60(%rip),%xmm11
xorpd  %xmm6,%xmm6
jmp    12b8 <odrrk+0x1a8>
cs nopw 0x0(%rax,%rax,1)
movapd %xmm7,%xmm9
add    $0x1,%eax
movapd %xmm10,%xmm4
subsd  %xmm9,%xmm4
andpd  %xmm12,%xmm4
movapd %xmm10,%xmm1
andpd  %xmm12,%xmm1
movapd %xmm9,%xmm0
andpd  %xmm12,%xmm0
movapd %xmm1,%xmm7
cmpunordsd %xmm1,%xmm7
movapd %xmm7,%xmm5
andpd  %xmm0,%xmm5
maxsd  %xmm1,%xmm0
andnpd %xmm0,%xmm7
orpd   %xmm5,%xmm7
mulsd  %xmm13,%xmm7
movapd %xmm14,%xmm0
cmpunordsd %xmm14,%xmm0
movapd %xmm0,%xmm1
andpd  %xmm7,%xmm1
maxsd  %xmm14,%xmm7
andnpd %xmm7,%xmm0
orpd   %xmm1,%xmm0
ucomisd %xmm4,%xmm0
ja     13dc <odrrk+0x2cc>
cmp    %esi,%eax
je     13e3 <odrrk+0x2d3>
movapd %xmm9,%xmm7
addsd  %xmm10,%xmm7
mulsd  %xmm8,%xmm7
movsd  (%rbx),%xmm0
subsd  %xmm7,%xmm0
movapd %xmm0,%xmm4
andpd  %xmm11,%xmm4
cmpltsd %xmm2,%xmm4
movapd %xmm4,%xmm1
andnpd %xmm0,%xmm1
andpd  %xmm3,%xmm4
orpd   %xmm1,%xmm4
xor    %edi,%edi
ucomisd %xmm4,%xmm6
setae  %dil
cmp    $0x2,%ecx
jl     13c6 <odrrk+0x2b6>
xor    %ebp,%ebp
cs nopw 0x0(%rax,%rax,1)
nop
movsd  0x8(%rbx,%rbp,8),%xmm0
movsd  (%r14,%rbp,8),%xmm1
divsd  %xmm4,%xmm1
subsd  %xmm1,%xmm0
subsd  %xmm7,%xmm0
movapd %xmm0,%xmm4
andpd  %xmm11,%xmm4
cmpltsd %xmm2,%xmm4
movapd %xmm4,%xmm1
andnpd %xmm0,%xmm1
andpd  %xmm3,%xmm4
orpd   %xmm1,%xmm4
ucomisd %xmm4,%xmm6
sbb    $0xffffffff,%edi
add    $0x1,%rbp
cmp    %rbp,%rdx
jne    1380 <odrrk+0x270>
cmp    (%r15),%edi
jl     12b0 <odrrk+0x1a0>
movapd %xmm7,%xmm10
add    $0x1,%eax
jmp    12b8 <odrrk+0x1a8>
movl   $0x0,(%r8)
addsd  %xmm10,%xmm9
mulsd  %xmm8,%xmm9
mov    0x90(%rsp),%rax
movsd  %xmm9,(%rax)
mulsd  %xmm8,%xmm4
mov    0x98(%rsp),%rax
movsd  %xmm4,(%rax)
xor    %eax,%eax
add    $0x48,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@DBL_EPSILON = global double 0.000000e+00
define i32 @odrrk(i32* %0, i32* %1, double* %2, double* %3, double* %4, double* %5, double* %6, double* %7, double* %8, double* %9, i32* %10) {
%12 = alloca i32*
%13 = alloca i32*
%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 i32*
%23 = alloca i32
%24 = alloca double
%25 = alloca double
%26 = alloca i32
%27 = alloca i32
%28 = alloca double
%29 = alloca double
%30 = alloca double
%31 = alloca double
%32 = alloca double
%33 = alloca double
%34 = alloca double
%35 = alloca i32
%36 = alloca double
%37 = alloca double
%38 = alloca i32
store i32* %0, i32** %12
store i32* %1, i32** %13
store double* %2, double** %14
store double* %3, double** %15
store double* %4, double** %16
store double* %5, double** %17
store double* %6, double** %18
store double* %7, double** %19
store double* %8, double** %20
store double* %9, double** %21
store i32* %10, i32** %22
%39 = load double*, double** %17
%40 = getelementptr inbounds double, double* %39, i32 -1
store double* %40, double** %17
%41 = load double*, double** %16
%42 = getelementptr inbounds double, double* %41, i32 -1
store double* %42, double** %16
%43 = load double, double* @DBL_EPSILON
store double %43, double* %29
%44 = load double*, double** %14
%45 = load double, double* %44
%46 = call double @llvm.fabs.f64(double %45)
store double %46, double* %24
%47 = load double*, double** %15
%48 = load double, double* %47
%49 = call double @llvm.fabs.f64(double %48)
store double %49, double* %25
%50 = load double, double* %24
%51 = load double, double* %25
%52 = call double @llvm.maxnum.f64(double %50, double %51)
store double %52, double* %37
%53 = load double*, double** %19
%54 = load double, double* %53
store double %54, double* %36
%55 = load double*, double** %18
%56 = load double, double* %55
%57 = fmul double %56, 4.000000e+00
store double %57, double* %33
%58 = load double, double* %37
%59 = load double*, double** %18
%60 = load double, double* %59
%61 = fadd double %58, %60
%62 = fptosi double %61 to i32
%63 = call i32 @log(i32 %62)
%64 = load double*, double** %18
%65 = load double, double* %64
%66 = fptosi double %65 to i32
%67 = call i32 @log(i32 %66)
%68 = sub nsw i32 %63, %67
%69 = call i32 @log(i32 2)
%70 = sdiv i32 %68, %69
%71 = add nsw i32 %70, 2
store i32 %71, i32* %35
%72 = load i32*, i32** %22
store i32 -1, i32* %72
%73 = load double*, double** %14
%74 = load double, double* %73
%75 = load double, double* %37
%76 = fmul double %75, 2.000000e+00
%77 = load double, double* %29
%78 = fmul double %76, %77
%79 = load i32*, i32** %12
%80 = load i32, i32* %79
%81 = sitofp i32 %80 to double
%82 = fneg double %78
%83 = call double @llvm.fmuladd.f64(double %82, double %81, double %74)
%84 = load double*, double** %18
%85 = load double, double* %84
%86 = fneg double %85
%87 = call double @llvm.fmuladd.f64(double %86, double 4.000000e+00, double %83)
store double %87, double* %32
%88 = load double*, double** %15
%89 = load double, double* %88
%90 = load double, double* %37
%91 = fmul double %90, 2.000000e+00
%92 = load double, double* %29
%93 = fmul double %91, %92
%94 = load i32*, i32** %12
%95 = load i32, i32* %94
%96 = sitofp i32 %95 to double
%97 = call double @llvm.fmuladd.f64(double %93, double %96, double %89)
%98 = load double*, double** %18
%99 = load double, double* %98
%100 = call double @llvm.fmuladd.f64(double %99, double 4.000000e+00, double %97)
store double %100, double* %34
store i32 0, i32* %27
br label %101
101: ; preds = %212, %11
%102 = load double, double* %34
%103 = load double, double* %32
%104 = fsub double %102, %103
store double %104, double* %24
%105 = load double, double* %24
%106 = call double @llvm.fabs.f64(double %105)
store double %106, double* %30
%107 = load double, double* %34
%108 = call double @llvm.fabs.f64(double %107)
store double %108, double* %24
%109 = load double, double* %32
%110 = call double @llvm.fabs.f64(double %109)
store double %110, double* %25
%111 = load double, double* %24
%112 = load double, double* %25
%113 = call double @llvm.maxnum.f64(double %111, double %112)
store double %113, double* %31
%114 = load double, double* %33
%115 = load double*, double** %18
%116 = load double, double* %115
%117 = call double @llvm.maxnum.f64(double %114, double %116)
store double %117, double* %24
%118 = load double, double* %36
%119 = load double, double* %31
%120 = fmul double %118, %119
store double %120, double* %25
%121 = load double, double* %30
%122 = load double, double* %24
%123 = load double, double* %25
%124 = call double @llvm.maxnum.f64(double %122, double %123)
%125 = fcmp olt double %121, %124
br i1 %125, label %126, label %128
126: ; preds = %101
%127 = load i32*, i32** %22
store i32 0, i32* %127
br label %213
128: ; preds = %101
%129 = load i32, i32* %27
%130 = load i32, i32* %35
%131 = icmp sgt i32 %129, %130
br i1 %131, label %132, label %133
132: ; preds = %128
br label %213
133: ; preds = %128
%134 = load i32, i32* %27
%135 = add nsw i32 %134, 1
store i32 %135, i32* %27
%136 = load double, double* %32
%137 = load double, double* %34
%138 = fadd double %136, %137
%139 = fmul double %138, 5.000000e-01
store double %139, double* %28
store i32 0, i32* %38
%140 = load double*, double** %16
%141 = getelementptr inbounds double, double* %140, i64 1
%142 = load double, double* %141
%143 = load double, double* %28
%144 = fsub double %142, %143
store double %144, double* %30
%145 = load double, double* %30
%146 = call double @llvm.fabs.f64(double %145)
%147 = load double*, double** %18
%148 = load double, double* %147
%149 = fcmp olt double %146, %148
br i1 %149, label %150, label %154
150: ; preds = %133
%151 = load double*, double** %18
%152 = load double, double* %151
%153 = fneg double %152
store double %153, double* %30
br label %154
154: ; preds = %150, %133
%155 = load double, double* %30
%156 = fcmp ole double %155, 0.000000e+00
br i1 %156, label %157, label %160
157: ; preds = %154
%158 = load i32, i32* %38
%159 = add nsw i32 %158, 1
store i32 %159, i32* %38
br label %160
160: ; preds = %157, %154
%161 = load i32*, i32** %12
%162 = load i32, i32* %161
store i32 %162, i32* %23
store i32 2, i32* %26
br label %163
163: ; preds = %200, %160
%164 = load i32, i32* %26
%165 = load i32, i32* %23
%166 = icmp sle i32 %164, %165
br i1 %166, label %167, label %203
167: ; preds = %163
%168 = load double*, double** %16
%169 = load i32, i32* %26
%170 = sext i32 %169 to i64
%171 = getelementptr inbounds double, double* %168, i64 %170
%172 = load double, double* %171
%173 = load double*, double** %17
%174 = load i32, i32* %26
%175 = sub nsw i32 %174, 1
%176 = sext i32 %175 to i64
%177 = getelementptr inbounds double, double* %173, i64 %176
%178 = load double, double* %177
%179 = load double, double* %30
%180 = fdiv double %178, %179
%181 = fsub double %172, %180
%182 = load double, double* %28
%183 = fsub double %181, %182
store double %183, double* %30
%184 = load double, double* %30
%185 = call double @llvm.fabs.f64(double %184)
%186 = load double*, double** %18
%187 = load double, double* %186
%188 = fcmp olt double %185, %187
br i1 %188, label %189, label %193
189: ; preds = %167
%190 = load double*, double** %18
%191 = load double, double* %190
%192 = fneg double %191
store double %192, double* %30
br label %193
193: ; preds = %189, %167
%194 = load double, double* %30
%195 = fcmp ole double %194, 0.000000e+00
br i1 %195, label %196, label %199
196: ; preds = %193
%197 = load i32, i32* %38
%198 = add nsw i32 %197, 1
store i32 %198, i32* %38
br label %199
199: ; preds = %196, %193
br label %200
200: ; preds = %199
%201 = load i32, i32* %26
%202 = add nsw i32 %201, 1
store i32 %202, i32* %26
br label %163
203: ; preds = %163
%204 = load i32, i32* %38
%205 = load i32*, i32** %13
%206 = load i32, i32* %205
%207 = icmp sge i32 %204, %206
br i1 %207, label %208, label %210
208: ; preds = %203
%209 = load double, double* %28
store double %209, double* %34
br label %212
210: ; preds = %203
%211 = load double, double* %28
store double %211, double* %32
br label %212
212: ; preds = %210, %208
br label %101
213: ; preds = %132, %126
%214 = load double, double* %32
%215 = load double, double* %34
%216 = fadd double %214, %215
%217 = fmul double %216, 5.000000e-01
%218 = load double*, double** %20
store double %217, double* %218
%219 = load double, double* %34
%220 = load double, double* %32
%221 = fsub double %219, %220
store double %221, double* %24
%222 = load double, double* %24
%223 = call double @llvm.fabs.f64(double %222)
%224 = fmul double %223, 5.000000e-01
%225 = load double*, double** %21
store double %224, double* %225
ret i32 0
}

LLVM IR (-O2):
@DBL_EPSILON = global double 0.000000e+00
define i32 @odrrk(i32* nocapture %0, i32* nocapture %1, double* nocapture %2, double* nocapture %3, double* nocapture %4, double* nocapture %5, double* nocapture %6, double* nocapture %7, double* nocapture writeonly %8, double* nocapture writeonly %9, i32* nocapture writeonly %10) {
%12 = getelementptr inbounds double, double* %5, i64 -1
%13 = getelementptr inbounds double, double* %4, i64 -1
%14 = load double, double* @DBL_EPSILON
%15 = load double, double* %2
%16 = tail call double @llvm.fabs.f64(double %15)
%17 = load double, double* %3
%18 = tail call double @llvm.fabs.f64(double %17)
%19 = tail call double @llvm.maxnum.f64(double %16, double %18)
%20 = load double, double* %7
%21 = load double, double* %6
%22 = fmul double %21, 4.000000e+00
%23 = fadd double %19, %21
%24 = fptosi double %23 to i32
%25 = tail call i32 @log(i32 %24)
%26 = load double, double* %6
%27 = fptosi double %26 to i32
%28 = tail call i32 @log(i32 %27)
%29 = sub nsw i32 %25, %28
%30 = tail call i32 @log(i32 2)
%31 = sdiv i32 %29, %30
%32 = add i32 %31, 2
store i32 -1, i32* %10
%33 = load double, double* %2
%34 = fmul double %19, 2.000000e+00
%35 = fmul double %14, %34
%36 = load i32, i32* %0
%37 = sitofp i32 %36 to double
%38 = fneg double %35
%39 = tail call double @llvm.fmuladd.f64(double %38, double %37, double %33)
%40 = load double, double* %6
%41 = fneg double %40
%42 = tail call double @llvm.fmuladd.f64(double %41, double 4.000000e+00, double %39)
%43 = load double, double* %3
%44 = tail call double @llvm.fmuladd.f64(double %35, double %37, double %43)
%45 = tail call double @llvm.fmuladd.f64(double %40, double 4.000000e+00, double %44)
%46 = tail call double @llvm.maxnum.f64(double %22, double %40)
%47 = icmp slt i32 %36, 2
%48 = add i32 %36, 1
%49 = call i32 @llvm.smax.i32(i32 %32, i32 -1)
%50 = add i32 %49, 1
%51 = zext i32 %48 to i64
br label %52
52: ; preds = %98, %11
%53 = phi i32 [ 0, %11 ], [ %68, %98 ]
%54 = phi double [ %42, %11 ], [ %102, %98 ]
%55 = phi double [ %45, %11 ], [ %103, %98 ]
%56 = fsub double %55, %54
%57 = tail call double @llvm.fabs.f64(double %56)
%58 = tail call double @llvm.fabs.f64(double %55)
%59 = tail call double @llvm.fabs.f64(double %54)
%60 = tail call double @llvm.maxnum.f64(double %58, double %59)
%61 = fmul double %20, %60
%62 = tail call double @llvm.maxnum.f64(double %46, double %61)
%63 = fcmp olt double %57, %62
br i1 %63, label %64, label %65
64: ; preds = %52
store i32 0, i32* %10
br label %104
65: ; preds = %52
%66 = icmp eq i32 %53, %50
br i1 %66, label %104, label %67
67: ; preds = %65
%68 = add nuw i32 %53, 1
%69 = fadd double %54, %55
%70 = fmul double %69, 5.000000e-01
%71 = load double, double* %4
%72 = fsub double %71, %70
%73 = tail call double @llvm.fabs.f64(double %72)
%74 = fcmp olt double %73, %40
%75 = select i1 %74, double %41, double %72
%76 = fcmp ole double %75, 0.000000e+00
%77 = zext i1 %76 to i32
br i1 %47, label %98, label %78
78: ; preds = %67, %78
%79 = phi i64 [ %96, %78 ], [ 2, %67 ]
%80 = phi i32 [ %95, %78 ], [ %77, %67 ]
%81 = phi double [ %92, %78 ], [ %75, %67 ]
%82 = getelementptr inbounds double, double* %13, i64 %79
%83 = load double, double* %82
%84 = add nsw i64 %79, -1
%85 = getelementptr inbounds double, double* %12, i64 %84
%86 = load double, double* %85
%87 = fdiv double %86, %81
%88 = fsub double %83, %87
%89 = fsub double %88, %70
%90 = tail call double @llvm.fabs.f64(double %89)
%91 = fcmp olt double %90, %40
%92 = select i1 %91, double %41, double %89
%93 = fcmp ole double %92, 0.000000e+00
%94 = zext i1 %93 to i32
%95 = add nuw nsw i32 %80, %94
%96 = add nuw nsw i64 %79, 1
%97 = icmp eq i64 %96, %51
br i1 %97, label %98, label %78
98: ; preds = %78, %67
%99 = phi i32 [ %77, %67 ], [ %95, %78 ]
%100 = load i32, i32* %1
%101 = icmp slt i32 %99, %100
%102 = select i1 %101, double %70, double %54
%103 = select i1 %101, double %55, double %70
br label %52
104: ; preds = %65, %64
%105 = fadd double %54, %55
%106 = fmul double %105, 5.000000e-01
store double %106, double* %8
%107 = fmul double %57, 5.000000e-01
store double %107, double* %9
ret i32 0
}