#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);
double grmhd_disp_df(double, double, double, double, double, double, double,
                     double, double);
double grmhd_disp_f(double, double, double, double, double, double, double,
                    double, double);
int /*<<< orphan*/ printf(char *, ...);
int solve_grmhd_disp(double *V, double v0, double va, double vb, int mode,
                     double C1, double C2, double C3, double C4, double bei,
                     double vi, double b0, double bi, const double *x) {
  double ACC = 1.0e-10;
  int MAX_ITER = 25;
  int i = 0;
  double v, v1, dv, f, df;
  int err = 0;
  v1 = v0;
  if (mode > 0) {
    double fa, fb;
    if (mode == 1 || mode == 2 || mode == 3) {
      fb = grmhd_disp_f(vb, C1, C2, C3, C4, bei, vi, b0, bi);
      if (mode == 1 && fb > 0)
        mode = 0;
      else if (mode == 2 && fb < 0)
        mode = 0;
      else if (mode == 3 && fb > 0)
        mode = 0;
    }
    if (mode == 2 || mode == 3 || mode == 4) {
      fa = grmhd_disp_f(va, C1, C2, C3, C4, bei, vi, b0, bi);
      if (mode == 2 && fa > 0)
        mode = 0;
      else if (mode == 3 && fa < 0)
        mode = 0;
      else if (mode == 4 && fa > 0)
        mode = 0;
    }
  }
  do {
    v = v1;
    f = grmhd_disp_f(v, C1, C2, C3, C4, bei, vi, b0, bi);
    df = grmhd_disp_df(v, C1, C2, C3, C4, bei, vi, b0, bi);
    if ((mode == 1 || mode == 3) && df < 0.0) {
      if (f > 0)
        va = v;
      else if (f < 0)
        vb = v;
    } else if ((mode == 2 || mode == 4) && df > 0.0) {
      if (f < 0)
        va = v;
      else if (f > 0)
        vb = v;
    }
    dv = -f / df;
    v1 = v + dv;
    if ((mode == 2 || mode == 3 || mode == 4) && v1 < va) {
      v1 = 0.5 * (v + va);
      if (0 && x[0] < 0.4)
        printf("Hit left bound\n");
    }
    if ((mode == 1 || mode == 2 || mode == 3) && v1 > vb) {
      v1 = 0.5 * (v + vb);
      if (0 && x[0] < 0.4)
        printf("Hit right bound\n");
    }
    if (mode == 4 && df < 0.0) {
      v1 = v + 0.5 * fabs(v);
      if (0 && x[0] < 0.4)
        printf("Jumping off to the right\n");
    }
    if (mode == 1 && df > 0.0) {
      v1 = v - 0.5 * fabs(v);
      if (0 && x[0] < 0.4)
        printf("Jumping off to the left\n");
    }
    if (0 && x[0] < 0.4)
      printf("   %d: %.10lg %.10lg (%.10lg %.10lg)\n", i, v, dv, f, df);
    i++;
  } while (fabs(dv) > ACC && i < MAX_ITER);
  if (i == MAX_ITER && ACC < fabs(dv) && (0 || 0) && x[0] < 0.4) {
    printf("grmhd_disp did not converge: v0=%.16lg v1=%.16lg dv=%.16lg\n", v0,
           v1, dv);
    printf("  (f df) = (%.16lg %.16lg)\n", f, df);
    printf("  C1=%.16lg C2=%.16lg C3=%.16lg C4=%.16lg\n", C1, C2, C3, C4);
    printf("  bei=%.16lg vi=%.16lg b0=%.16lg bi=%.16lg\n", bei, vi, b0, bi);
    printf("  va=%.16lg vb=%.16lg\n", va, vb);
    err = 1;
  }
  *V = v1;
  return err;
}


x86 assembly (clang, -O0):
<solve_grmhd_disp>:
push   %rbp
mov    %rsp,%rbp
sub    $0xc0,%rsp
movsd  0x20(%rbp),%xmm8
movsd  0x18(%rbp),%xmm8
movsd  0x10(%rbp),%xmm8
mov    %rdi,-0x8(%rbp)
movsd  %xmm0,-0x10(%rbp)
movsd  %xmm1,-0x18(%rbp)
movsd  %xmm2,-0x20(%rbp)
mov    %esi,-0x24(%rbp)
movsd  %xmm3,-0x30(%rbp)
movsd  %xmm4,-0x38(%rbp)
movsd  %xmm5,-0x40(%rbp)
movsd  %xmm6,-0x48(%rbp)
movsd  %xmm7,-0x50(%rbp)
mov    %rdx,-0x58(%rbp)
movsd  0xe78(%rip),%xmm0
movsd  %xmm0,-0x60(%rbp)
movl   $0x19,-0x64(%rbp)
movl   $0x0,-0x68(%rbp)
movl   $0x0,-0x94(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
cmpl   $0x0,-0x24(%rbp)
jle    138a <solve_grmhd_disp+0x25a>
cmpl   $0x1,-0x24(%rbp)
je     11d7 <solve_grmhd_disp+0xa7>
cmpl   $0x2,-0x24(%rbp)
je     11d7 <solve_grmhd_disp+0xa7>
cmpl   $0x3,-0x24(%rbp)
jne    129f <solve_grmhd_disp+0x16f>
movsd  -0x20(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm3
movsd  -0x48(%rbp),%xmm4
movsd  -0x50(%rbp),%xmm5
movsd  0x10(%rbp),%xmm6
movsd  0x18(%rbp),%xmm7
movsd  0x20(%rbp),%xmm8
movsd  %xmm8,(%rsp)
call   1030 <grmhd_disp_f@plt>
movsd  %xmm0,-0xa8(%rbp)
ff
cmpl   $0x1,-0x24(%rbp)
jne    1243 <solve_grmhd_disp+0x113>
movsd  -0xa8(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1243 <solve_grmhd_disp+0x113>
movl   $0x0,-0x24(%rbp)
jmp    129a <solve_grmhd_disp+0x16a>
cmpl   $0x2,-0x24(%rbp)
jne    126a <solve_grmhd_disp+0x13a>
xorps  %xmm0,%xmm0
ucomisd -0xa8(%rbp),%xmm0
ff
jbe    126a <solve_grmhd_disp+0x13a>
movl   $0x0,-0x24(%rbp)
jmp    1295 <solve_grmhd_disp+0x165>
cmpl   $0x3,-0x24(%rbp)
jne    1290 <solve_grmhd_disp+0x160>
movsd  -0xa8(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1290 <solve_grmhd_disp+0x160>
movl   $0x0,-0x24(%rbp)
jmp    1295 <solve_grmhd_disp+0x165>
jmp    129a <solve_grmhd_disp+0x16a>
jmp    129f <solve_grmhd_disp+0x16f>
cmpl   $0x2,-0x24(%rbp)
je     12bd <solve_grmhd_disp+0x18d>
cmpl   $0x3,-0x24(%rbp)
je     12bd <solve_grmhd_disp+0x18d>
cmpl   $0x4,-0x24(%rbp)
jne    1385 <solve_grmhd_disp+0x255>
movsd  -0x18(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm3
movsd  -0x48(%rbp),%xmm4
movsd  -0x50(%rbp),%xmm5
movsd  0x10(%rbp),%xmm6
movsd  0x18(%rbp),%xmm7
movsd  0x20(%rbp),%xmm8
movsd  %xmm8,(%rsp)
call   1030 <grmhd_disp_f@plt>
movsd  %xmm0,-0xa0(%rbp)
ff
cmpl   $0x2,-0x24(%rbp)
jne    1329 <solve_grmhd_disp+0x1f9>
movsd  -0xa0(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1329 <solve_grmhd_disp+0x1f9>
movl   $0x0,-0x24(%rbp)
jmp    1380 <solve_grmhd_disp+0x250>
cmpl   $0x3,-0x24(%rbp)
jne    1350 <solve_grmhd_disp+0x220>
xorps  %xmm0,%xmm0
ucomisd -0xa0(%rbp),%xmm0
ff
jbe    1350 <solve_grmhd_disp+0x220>
movl   $0x0,-0x24(%rbp)
jmp    137b <solve_grmhd_disp+0x24b>
cmpl   $0x4,-0x24(%rbp)
jne    1376 <solve_grmhd_disp+0x246>
movsd  -0xa0(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1376 <solve_grmhd_disp+0x246>
movl   $0x0,-0x24(%rbp)
jmp    137b <solve_grmhd_disp+0x24b>
jmp    1380 <solve_grmhd_disp+0x250>
jmp    1385 <solve_grmhd_disp+0x255>
jmp    138a <solve_grmhd_disp+0x25a>
jmp    138f <solve_grmhd_disp+0x25f>
movsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm3
movsd  -0x48(%rbp),%xmm4
movsd  -0x50(%rbp),%xmm5
movsd  0x10(%rbp),%xmm6
movsd  0x18(%rbp),%xmm7
movsd  0x20(%rbp),%xmm8
movsd  %xmm8,(%rsp)
call   1030 <grmhd_disp_f@plt>
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm3
movsd  -0x48(%rbp),%xmm4
movsd  -0x50(%rbp),%xmm5
movsd  0x10(%rbp),%xmm6
movsd  0x18(%rbp),%xmm7
movsd  0x20(%rbp),%xmm8
movsd  %xmm8,(%rsp)
call   1050 <grmhd_disp_df@plt>
movsd  %xmm0,-0x90(%rbp)
ff
cmpl   $0x1,-0x24(%rbp)
je     142f <solve_grmhd_disp+0x2ff>
cmpl   $0x3,-0x24(%rbp)
jne    1489 <solve_grmhd_disp+0x359>
xorps  %xmm0,%xmm0
ucomisd -0x90(%rbp),%xmm0
ff
jbe    1489 <solve_grmhd_disp+0x359>
movsd  -0x88(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1464 <solve_grmhd_disp+0x334>
movsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x18(%rbp)
jmp    1484 <solve_grmhd_disp+0x354>
xorps  %xmm0,%xmm0
ucomisd -0x88(%rbp),%xmm0
ff
jbe    147f <solve_grmhd_disp+0x34f>
movsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
jmp    1484 <solve_grmhd_disp+0x354>
jmp    1500 <solve_grmhd_disp+0x3d0>
cmpl   $0x2,-0x24(%rbp)
je     149d <solve_grmhd_disp+0x36d>
cmpl   $0x4,-0x24(%rbp)
jne    14fb <solve_grmhd_disp+0x3cb>
movsd  -0x90(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    14fb <solve_grmhd_disp+0x3cb>
xorps  %xmm0,%xmm0
ucomisd -0x88(%rbp),%xmm0
ff
jbe    14d2 <solve_grmhd_disp+0x3a2>
movsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x18(%rbp)
jmp    14f6 <solve_grmhd_disp+0x3c6>
movsd  -0x88(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    14f1 <solve_grmhd_disp+0x3c1>
movsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
jmp    14f6 <solve_grmhd_disp+0x3c6>
jmp    14fb <solve_grmhd_disp+0x3cb>
jmp    1500 <solve_grmhd_disp+0x3d0>
movsd  -0x88(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
divsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x80(%rbp)
movsd  -0x70(%rbp),%xmm0
addsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
cmpl   $0x2,-0x24(%rbp)
je     1559 <solve_grmhd_disp+0x429>
cmpl   $0x3,-0x24(%rbp)
je     1559 <solve_grmhd_disp+0x429>
cmpl   $0x4,-0x24(%rbp)
jne    1588 <solve_grmhd_disp+0x458>
movsd  -0x78(%rbp),%xmm1
movsd  -0x18(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    1588 <solve_grmhd_disp+0x458>
movsd  -0x70(%rbp),%xmm1
addsd  -0x18(%rbp),%xmm1
movsd  0xa89(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
cmpl   $0x1,-0x24(%rbp)
je     15a6 <solve_grmhd_disp+0x476>
cmpl   $0x2,-0x24(%rbp)
je     15a6 <solve_grmhd_disp+0x476>
cmpl   $0x3,-0x24(%rbp)
jne    15d1 <solve_grmhd_disp+0x4a1>
movsd  -0x78(%rbp),%xmm0
ucomisd -0x20(%rbp),%xmm0
jbe    15d1 <solve_grmhd_disp+0x4a1>
movsd  -0x70(%rbp),%xmm1
addsd  -0x20(%rbp),%xmm1
movsd  0xa40(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
cmpl   $0x4,-0x24(%rbp)
jne    1616 <solve_grmhd_disp+0x4e6>
xorps  %xmm0,%xmm0
ucomisd -0x90(%rbp),%xmm0
ff
jbe    1616 <solve_grmhd_disp+0x4e6>
movsd  -0x70(%rbp),%xmm1
movsd  -0x70(%rbp),%xmm0
movaps 0xa23(%rip),%xmm2
pand   %xmm2,%xmm0
movsd  0x9ff(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
cmpl   $0x1,-0x24(%rbp)
jne    165f <solve_grmhd_disp+0x52f>
movsd  -0x90(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    165f <solve_grmhd_disp+0x52f>
movsd  -0x70(%rbp),%xmm1
movsd  -0x70(%rbp),%xmm0
movaps 0x9da(%rip),%xmm2
pand   %xmm2,%xmm0
movsd  0x9be(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x68(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x68(%rbp)
movsd  -0x80(%rbp),%xmm0
movaps 0x9ac(%rip),%xmm1
pand   %xmm1,%xmm0
xor    %eax,%eax
ucomisd -0x60(%rbp),%xmm0
mov    %al,-0xa9(%rbp)
jbe    169a <solve_grmhd_disp+0x56a>
mov    -0x68(%rbp),%eax
cmp    -0x64(%rbp),%eax
setl   %al
mov    %al,-0xa9(%rbp)
mov    -0xa9(%rbp),%al
test   $0x1,%al
jne    138f <solve_grmhd_disp+0x25f>
mov    -0x68(%rbp),%eax
cmp    -0x64(%rbp),%eax
jne    1799 <solve_grmhd_disp+0x669>
movsd  -0x60(%rbp),%xmm1
movsd  -0x80(%rbp),%xmm0
movaps 0x95b(%rip),%xmm2
pand   %xmm2,%xmm0
ucomisd %xmm1,%xmm0
jbe    1799 <solve_grmhd_disp+0x669>
xor    %eax,%eax
test   $0x1,%al
jne    16e2 <solve_grmhd_disp+0x5b2>
jmp    1799 <solve_grmhd_disp+0x669>
mov    -0x58(%rbp),%rax
movsd  0x92a(%rip),%xmm0
ucomisd (%rax),%xmm0
jbe    1799 <solve_grmhd_disp+0x669>
movsd  -0x10(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm1
movsd  -0x80(%rbp),%xmm2
lea    0x922(%rip),%rdi
mov    $0x3,%al
call   1040 <printf@plt>
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0x90(%rbp),%xmm1
ff
lea    0x940(%rip),%rdi
mov    $0x2,%al
call   1040 <printf@plt>
movsd  -0x30(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm1
movsd  -0x40(%rbp),%xmm2
movsd  -0x48(%rbp),%xmm3
lea    0x93a(%rip),%rdi
mov    $0x4,%al
call   1040 <printf@plt>
movsd  -0x50(%rbp),%xmm0
movsd  0x10(%rbp),%xmm1
movsd  0x18(%rbp),%xmm2
movsd  0x20(%rbp),%xmm3
lea    0x943(%rip),%rdi
mov    $0x4,%al
call   1040 <printf@plt>
movsd  -0x18(%rbp),%xmm0
movsd  -0x20(%rbp),%xmm1
lea    0x957(%rip),%rdi
mov    $0x2,%al
call   1040 <printf@plt>
movl   $0x1,-0x94(%rbp)
movsd  -0x78(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x94(%rbp),%eax
add    $0xc0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<solve_grmhd_disp>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x78,%rsp
movsd  %xmm7,0x58(%rsp)
movsd  %xmm6,0x50(%rsp)
movsd  %xmm5,0x48(%rsp)
movsd  %xmm4,0x40(%rsp)
movsd  %xmm3,0x38(%rsp)
mov    %esi,%r15d
movsd  %xmm2,0x28(%rsp)
movsd  %xmm1,0x30(%rsp)
movapd %xmm0,%xmm3
mov    %rdi,0x70(%rsp)
test   %esi,%esi
jle    128b <solve_grmhd_disp+0x16b>
lea    -0x1(%r15),%eax
cmp    $0x2,%eax
ja     1211 <solve_grmhd_disp+0xf1>
movapd %xmm3,0x10(%rsp)
movsd  0xc0(%rsp),%xmm0
movsd  %xmm0,(%rsp)
movsd  0x28(%rsp),%xmm0
movsd  0x38(%rsp),%xmm1
movsd  0x40(%rsp),%xmm2
movsd  0x48(%rsp),%xmm3
movsd  0x50(%rsp),%xmm4
movsd  0x58(%rsp),%xmm5
movsd  0xb0(%rsp),%xmm6
movsd  0xb8(%rsp),%xmm7
call   1030 <grmhd_disp_f@plt>
xor    %ebx,%ebx
cmp    $0x1,%r15d
jne    11de <solve_grmhd_disp+0xbe>
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
ja     1283 <solve_grmhd_disp+0x163>
cmp    $0x2,%r15d
movapd 0x10(%rsp),%xmm3
jne    11f8 <solve_grmhd_disp+0xd8>
xorpd  %xmm1,%xmm1
ucomisd %xmm0,%xmm1
ja     128e <solve_grmhd_disp+0x16e>
xor    %eax,%eax
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
cmovbe %r15d,%eax
cmp    $0x3,%r15d
cmovne %r15d,%eax
mov    %eax,%r15d
lea    -0x2(%r15),%eax
cmp    $0x2,%eax
ja     128b <solve_grmhd_disp+0x16b>
movapd %xmm3,0x10(%rsp)
movsd  0xc0(%rsp),%xmm0
movsd  %xmm0,(%rsp)
movsd  0x30(%rsp),%xmm0
movsd  0x38(%rsp),%xmm1
movsd  0x40(%rsp),%xmm2
movsd  0x48(%rsp),%xmm3
movsd  0x50(%rsp),%xmm4
movsd  0x58(%rsp),%xmm5
movsd  0xb0(%rsp),%xmm6
movsd  0xb8(%rsp),%xmm7
call   1030 <grmhd_disp_f@plt>
xor    %ebx,%ebx
cmp    $0x2,%r15d
jne    1547 <solve_grmhd_disp+0x427>
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1547 <solve_grmhd_disp+0x427>
movapd 0x10(%rsp),%xmm3
jmp    128e <solve_grmhd_disp+0x16e>
mov    %r15d,%ebx
mov    %ebx,%ebp
and    $0xfffffffd,%ebp
lea    -0x2(%rbx),%r15d
test   $0xfffffffd,%r15d
sete   %r12b
lea    -0x1(%rbx),%r13d
xor    %r14d,%r14d
nopl   0x0(%rax)
movapd %xmm3,0x10(%rsp)
movsd  0xc0(%rsp),%xmm0
movsd  %xmm0,(%rsp)
movapd %xmm3,%xmm0
movsd  0x38(%rsp),%xmm1
movsd  0x40(%rsp),%xmm2
movsd  0x48(%rsp),%xmm3
movsd  0x50(%rsp),%xmm4
movsd  0x58(%rsp),%xmm5
movsd  0xb0(%rsp),%xmm6
movsd  0xb8(%rsp),%xmm7
call   1030 <grmhd_disp_f@plt>
movapd %xmm0,0x60(%rsp)
movsd  0xc0(%rsp),%xmm0
movsd  %xmm0,(%rsp)
movapd 0x10(%rsp),%xmm0
movsd  0x38(%rsp),%xmm1
movsd  0x40(%rsp),%xmm2
movsd  0x48(%rsp),%xmm3
movsd  0x50(%rsp),%xmm4
movsd  0x58(%rsp),%xmm5
movsd  0xb0(%rsp),%xmm6
movsd  0xb8(%rsp),%xmm7
call   1040 <grmhd_disp_df@plt>
xorpd  %xmm5,%xmm5
cmp    $0x1,%ebp
jne    1390 <solve_grmhd_disp+0x270>
ucomisd %xmm0,%xmm5
jbe    1390 <solve_grmhd_disp+0x270>
movapd 0x60(%rsp),%xmm6
ucomisd %xmm5,%xmm6
ja     13aa <solve_grmhd_disp+0x28a>
ucomisd %xmm6,%xmm5
jbe    13e7 <solve_grmhd_disp+0x2c7>
movapd 0x10(%rsp),%xmm8
movsd  %xmm8,0x28(%rsp)
movapd 0xc8d(%rip),%xmm7
jmp    1420 <solve_grmhd_disp+0x300>
nopl   0x0(%rax,%rax,1)
ucomisd %xmm5,%xmm0
seta   %al
and    %r12b,%al
cmp    $0x1,%al
jne    13d0 <solve_grmhd_disp+0x2b0>
movapd 0x60(%rsp),%xmm6
ucomisd %xmm6,%xmm5
jbe    13f8 <solve_grmhd_disp+0x2d8>
movapd 0x10(%rsp),%xmm8
movsd  %xmm8,0x30(%rsp)
movapd 0xc50(%rip),%xmm7
jmp    1420 <solve_grmhd_disp+0x300>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movapd 0x10(%rsp),%xmm8
movapd 0xc31(%rip),%xmm7
movapd 0x60(%rsp),%xmm6
jmp    1420 <solve_grmhd_disp+0x300>
movapd 0x10(%rsp),%xmm8
movapd 0xc1a(%rip),%xmm7
jmp    1420 <solve_grmhd_disp+0x300>
ucomisd %xmm5,%xmm6
movapd 0x10(%rsp),%xmm8
movapd 0xc05(%rip),%xmm7
jbe    1420 <solve_grmhd_disp+0x300>
movsd  %xmm8,0x28(%rsp)
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
xorpd  0xbd8(%rip),%xmm6
divsd  %xmm0,%xmm6
movapd %xmm8,%xmm1
addsd  %xmm6,%xmm1
cmp    $0x3,%r15d
jae    146b <solve_grmhd_disp+0x34b>
movapd %xmm8,%xmm2
movsd  0x30(%rsp),%xmm4
addsd  %xmm4,%xmm2
mulsd  0xbce(%rip),%xmm2
movapd %xmm1,%xmm3
cmpltsd %xmm4,%xmm3
andpd  %xmm3,%xmm2
andnpd %xmm1,%xmm3
orpd   %xmm2,%xmm3
movapd %xmm3,%xmm1
cmp    $0x3,%r13d
jae    14a1 <solve_grmhd_disp+0x381>
movapd %xmm8,%xmm2
movsd  0x28(%rsp),%xmm3
addsd  %xmm3,%xmm2
mulsd  0xb98(%rip),%xmm2
cmpltsd %xmm1,%xmm3
movapd %xmm3,%xmm4
andnpd %xmm1,%xmm4
andpd  %xmm2,%xmm3
orpd   %xmm4,%xmm3
movapd %xmm3,%xmm1
movapd %xmm8,%xmm2
andpd  %xmm7,%xmm2
cmp    $0x4,%ebx
jne    14dd <solve_grmhd_disp+0x3bd>
movapd %xmm2,%xmm3
mulsd  0xb65(%rip),%xmm3
addsd  %xmm8,%xmm3
movapd %xmm0,%xmm4
cmpltsd %xmm5,%xmm4
movapd %xmm4,%xmm5
andnpd %xmm1,%xmm5
andpd  %xmm3,%xmm4
orpd   %xmm5,%xmm4
movapd %xmm4,%xmm1
mulsd  0xb43(%rip),%xmm2
cmp    $0x1,%ebx
je     14f0 <solve_grmhd_disp+0x3d0>
movapd %xmm1,%xmm3
jmp    150e <solve_grmhd_disp+0x3ee>
addsd  %xmm8,%xmm2
xorpd  %xmm3,%xmm3
cmpltsd %xmm0,%xmm3
movapd %xmm3,%xmm0
andnpd %xmm1,%xmm0
andpd  %xmm2,%xmm3
orpd   %xmm0,%xmm3
andpd  %xmm7,%xmm6
ucomisd 0xb16(%rip),%xmm6
jbe    152d <solve_grmhd_disp+0x40d>
lea    0x1(%r14),%eax
cmp    $0x18,%r14d
mov    %eax,%r14d
jb     12b0 <solve_grmhd_disp+0x190>
mov    0x70(%rsp),%rax
movsd  %xmm3,(%rax)
xor    %eax,%eax
add    $0x78,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
cmp    $0x3,%r15d
movapd 0x10(%rsp),%xmm3
jne    1561 <solve_grmhd_disp+0x441>
xorpd  %xmm1,%xmm1
ucomisd %xmm0,%xmm1
ja     128e <solve_grmhd_disp+0x16e>
xor    %ebx,%ebx
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
cmovbe %r15d,%ebx
cmp    $0x4,%r15d
cmovne %r15d,%ebx
jmp    128e <solve_grmhd_disp+0x16e>

LLVM IR (-O0):
@.str = [60 x i8] c"grmhd_disp did not converge: v0=%.16lg v1=%.16lg dv=%.16lg\0A\00"
@.str.1 = [28 x i8] c" (f df) = (%.16lg %.16lg)\0A\00"
@.str.2 = [43 x i8] c" C1=%.16lg C2=%.16lg C3=%.16lg C4=%.16lg\0A\00"
@.str.3 = [44 x i8] c" bei=%.16lg vi=%.16lg b0=%.16lg bi=%.16lg\0A\00"
@.str.4 = [23 x i8] c" va=%.16lg vb=%.16lg\0A\00"
define i32 @solve_grmhd_disp(double* %0, double %1, double %2, double %3, i32 %4, double %5, double %6, double %7, double %8, double %9, double %10, double %11, double %12, double* %13) {
%15 = alloca double*
%16 = alloca double
%17 = alloca double
%18 = alloca double
%19 = alloca i32
%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 i32
%31 = alloca i32
%32 = alloca double
%33 = alloca double
%34 = alloca double
%35 = alloca double
%36 = alloca double
%37 = alloca i32
%38 = alloca double
%39 = alloca double
store double* %0, double** %15
store double %1, double* %16
store double %2, double* %17
store double %3, double* %18
store i32 %4, i32* %19
store double %5, double* %20
store double %6, double* %21
store double %7, double* %22
store double %8, double* %23
store double %9, double* %24
store double %10, double* %25
store double %11, double* %26
store double %12, double* %27
store double* %13, double** %28
store double 1.000000e-10, double* %29
store i32 25, i32* %30
store i32 0, i32* %31
store i32 0, i32* %37
%40 = load double, double* %16
store double %40, double* %33
%41 = load i32, i32* %19
%42 = icmp sgt i32 %41, 0
br i1 %42, label %43, label %130
43: ; preds = %14
%44 = load i32, i32* %19
%45 = icmp eq i32 %44, 1
br i1 %45, label %52, label %46
46: ; preds = %43
%47 = load i32, i32* %19
%48 = icmp eq i32 %47, 2
br i1 %48, label %52, label %49
49: ; preds = %46
%50 = load i32, i32* %19
%51 = icmp eq i32 %50, 3
br i1 %51, label %52, label %86
52: ; preds = %49, %46, %43
%53 = load double, double* %18
%54 = load double, double* %20
%55 = load double, double* %21
%56 = load double, double* %22
%57 = load double, double* %23
%58 = load double, double* %24
%59 = load double, double* %25
%60 = load double, double* %26
%61 = load double, double* %27
%62 = call double @grmhd_disp_f(double %53, double %54, double %55, double %56, double %57, double %58, double %59, double %60, double %61)
store double %62, double* %39
%63 = load i32, i32* %19
%64 = icmp eq i32 %63, 1
br i1 %64, label %65, label %69
65: ; preds = %52
%66 = load double, double* %39
%67 = fcmp ogt double %66, 0.000000e+00
br i1 %67, label %68, label %69
68: ; preds = %65
store i32 0, i32* %19
br label %85
69: ; preds = %65, %52
%70 = load i32, i32* %19
%71 = icmp eq i32 %70, 2
br i1 %71, label %72, label %76
72: ; preds = %69
%73 = load double, double* %39
%74 = fcmp olt double %73, 0.000000e+00
br i1 %74, label %75, label %76
75: ; preds = %72
store i32 0, i32* %19
br label %84
76: ; preds = %72, %69
%77 = load i32, i32* %19
%78 = icmp eq i32 %77, 3
br i1 %78, label %79, label %83
79: ; preds = %76
%80 = load double, double* %39
%81 = fcmp ogt double %80, 0.000000e+00
br i1 %81, label %82, label %83
82: ; preds = %79
store i32 0, i32* %19
br label %83
83: ; preds = %82, %79, %76
br label %84
84: ; preds = %83, %75
br label %85
85: ; preds = %84, %68
br label %86
86: ; preds = %85, %49
%87 = load i32, i32* %19
%88 = icmp eq i32 %87, 2
br i1 %88, label %95, label %89
89: ; preds = %86
%90 = load i32, i32* %19
%91 = icmp eq i32 %90, 3
br i1 %91, label %95, label %92
92: ; preds = %89
%93 = load i32, i32* %19
%94 = icmp eq i32 %93, 4
br i1 %94, label %95, label %129
95: ; preds = %92, %89, %86
%96 = load double, double* %17
%97 = load double, double* %20
%98 = load double, double* %21
%99 = load double, double* %22
%100 = load double, double* %23
%101 = load double, double* %24
%102 = load double, double* %25
%103 = load double, double* %26
%104 = load double, double* %27
%105 = call double @grmhd_disp_f(double %96, double %97, double %98, double %99, double %100, double %101, double %102, double %103, double %104)
store double %105, double* %38
%106 = load i32, i32* %19
%107 = icmp eq i32 %106, 2
br i1 %107, label %108, label %112
108: ; preds = %95
%109 = load double, double* %38
%110 = fcmp ogt double %109, 0.000000e+00
br i1 %110, label %111, label %112
111: ; preds = %108
store i32 0, i32* %19
br label %128
112: ; preds = %108, %95
%113 = load i32, i32* %19
%114 = icmp eq i32 %113, 3
br i1 %114, label %115, label %119
115: ; preds = %112
%116 = load double, double* %38
%117 = fcmp olt double %116, 0.000000e+00
br i1 %117, label %118, label %119
118: ; preds = %115
store i32 0, i32* %19
br label %127
119: ; preds = %115, %112
%120 = load i32, i32* %19
%121 = icmp eq i32 %120, 4
br i1 %121, label %122, label %126
122: ; preds = %119
%123 = load double, double* %38
%124 = fcmp ogt double %123, 0.000000e+00
br i1 %124, label %125, label %126
125: ; preds = %122
store i32 0, i32* %19
br label %126
126: ; preds = %125, %122, %119
br label %127
127: ; preds = %126, %118
br label %128
128: ; preds = %127, %111
br label %129
129: ; preds = %128, %92
br label %130
130: ; preds = %129, %14
br label %131
131: ; preds = %272, %130
%132 = load double, double* %33
store double %132, double* %32
%133 = load double, double* %32
%134 = load double, double* %20
%135 = load double, double* %21
%136 = load double, double* %22
%137 = load double, double* %23
%138 = load double, double* %24
%139 = load double, double* %25
%140 = load double, double* %26
%141 = load double, double* %27
%142 = call double @grmhd_disp_f(double %133, double %134, double %135, double %136, double %137, double %138, double %139, double %140, double %141)
store double %142, double* %35
%143 = load double, double* %32
%144 = load double, double* %20
%145 = load double, double* %21
%146 = load double, double* %22
%147 = load double, double* %23
%148 = load double, double* %24
%149 = load double, double* %25
%150 = load double, double* %26
%151 = load double, double* %27
%152 = call double @grmhd_disp_df(double %143, double %144, double %145, double %146, double %147, double %148, double %149, double %150, double %151)
store double %152, double* %36
%153 = load i32, i32* %19
%154 = icmp eq i32 %153, 1
br i1 %154, label %158, label %155
155: ; preds = %131
%156 = load i32, i32* %19
%157 = icmp eq i32 %156, 3
br i1 %157, label %158, label %173
158: ; preds = %155, %131
%159 = load double, double* %36
%160 = fcmp olt double %159, 0.000000e+00
br i1 %160, label %161, label %173
161: ; preds = %158
%162 = load double, double* %35
%163 = fcmp ogt double %162, 0.000000e+00
br i1 %163, label %164, label %166
164: ; preds = %161
%165 = load double, double* %32
store double %165, double* %17
br label %172
166: ; preds = %161
%167 = load double, double* %35
%168 = fcmp olt double %167, 0.000000e+00
br i1 %168, label %169, label %171
169: ; preds = %166
%170 = load double, double* %32
store double %170, double* %18
br label %171
171: ; preds = %169, %166
br label %172
172: ; preds = %171, %164
br label %195
173: ; preds = %158, %155
%174 = load i32, i32* %19
%175 = icmp eq i32 %174, 2
br i1 %175, label %179, label %176
176: ; preds = %173
%177 = load i32, i32* %19
%178 = icmp eq i32 %177, 4
br i1 %178, label %179, label %194
179: ; preds = %176, %173
%180 = load double, double* %36
%181 = fcmp ogt double %180, 0.000000e+00
br i1 %181, label %182, label %194
182: ; preds = %179
%183 = load double, double* %35
%184 = fcmp olt double %183, 0.000000e+00
br i1 %184, label %185, label %187
185: ; preds = %182
%186 = load double, double* %32
store double %186, double* %17
br label %193
187: ; preds = %182
%188 = load double, double* %35
%189 = fcmp ogt double %188, 0.000000e+00
br i1 %189, label %190, label %192
190: ; preds = %187
%191 = load double, double* %32
store double %191, double* %18
br label %192
192: ; preds = %190, %187
br label %193
193: ; preds = %192, %185
br label %194
194: ; preds = %193, %179, %176
br label %195
195: ; preds = %194, %172
%196 = load double, double* %35
%197 = fneg double %196
%198 = load double, double* %36
%199 = fdiv double %197, %198
store double %199, double* %34
%200 = load double, double* %32
%201 = load double, double* %34
%202 = fadd double %200, %201
store double %202, double* %33
%203 = load i32, i32* %19
%204 = icmp eq i32 %203, 2
br i1 %204, label %211, label %205
205: ; preds = %195
%206 = load i32, i32* %19
%207 = icmp eq i32 %206, 3
br i1 %207, label %211, label %208
208: ; preds = %205
%209 = load i32, i32* %19
%210 = icmp eq i32 %209, 4
br i1 %210, label %211, label %220
211: ; preds = %208, %205, %195
%212 = load double, double* %33
%213 = load double, double* %17
%214 = fcmp olt double %212, %213
br i1 %214, label %215, label %220
215: ; preds = %211
%216 = load double, double* %32
%217 = load double, double* %17
%218 = fadd double %216, %217
%219 = fmul double 5.000000e-01, %218
store double %219, double* %33
br label %220
220: ; preds = %215, %211, %208
%221 = load i32, i32* %19
%222 = icmp eq i32 %221, 1
br i1 %222, label %229, label %223
223: ; preds = %220
%224 = load i32, i32* %19
%225 = icmp eq i32 %224, 2
br i1 %225, label %229, label %226
226: ; preds = %223
%227 = load i32, i32* %19
%228 = icmp eq i32 %227, 3
br i1 %228, label %229, label %238
229: ; preds = %226, %223, %220
%230 = load double, double* %33
%231 = load double, double* %18
%232 = fcmp ogt double %230, %231
br i1 %232, label %233, label %238
233: ; preds = %229
%234 = load double, double* %32
%235 = load double, double* %18
%236 = fadd double %234, %235
%237 = fmul double 5.000000e-01, %236
store double %237, double* %33
br label %238
238: ; preds = %233, %229, %226
%239 = load i32, i32* %19
%240 = icmp eq i32 %239, 4
br i1 %240, label %241, label %249
241: ; preds = %238
%242 = load double, double* %36
%243 = fcmp olt double %242, 0.000000e+00
br i1 %243, label %244, label %249
244: ; preds = %241
%245 = load double, double* %32
%246 = load double, double* %32
%247 = call double @llvm.fabs.f64(double %246)
%248 = call double @llvm.fmuladd.f64(double 5.000000e-01, double %247, double %245)
store double %248, double* %33
br label %249
249: ; preds = %244, %241, %238
%250 = load i32, i32* %19
%251 = icmp eq i32 %250, 1
br i1 %251, label %252, label %260
252: ; preds = %249
%253 = load double, double* %36
%254 = fcmp ogt double %253, 0.000000e+00
br i1 %254, label %255, label %260
255: ; preds = %252
%256 = load double, double* %32
%257 = load double, double* %32
%258 = call double @llvm.fabs.f64(double %257)
%259 = call double @llvm.fmuladd.f64(double -5.000000e-01, double %258, double %256)
store double %259, double* %33
br label %260
260: ; preds = %255, %252, %249
%261 = load i32, i32* %31
%262 = add nsw i32 %261, 1
store i32 %262, i32* %31
br label %263
263: ; preds = %260
%264 = load double, double* %34
%265 = call double @llvm.fabs.f64(double %264)
%266 = load double, double* %29
%267 = fcmp ogt double %265, %266
br i1 %267, label %268, label %272
268: ; preds = %263
%269 = load i32, i32* %31
%270 = load i32, i32* %30
%271 = icmp slt i32 %269, %270
br label %272
272: ; preds = %268, %263
%273 = phi i1 [ false, %263 ], [ %271, %268 ]
br i1 %273, label %131, label %274
274: ; preds = %272
%275 = load i32, i32* %31
%276 = load i32, i32* %30
%277 = icmp eq i32 %275, %276
br i1 %277, label %278, label %310
278: ; preds = %274
%279 = load double, double* %29
%280 = load double, double* %34
%281 = call double @llvm.fabs.f64(double %280)
%282 = fcmp olt double %279, %281
br i1 %282, label %283, label %310
283: ; preds = %278
br i1 false, label %284, label %310
284: ; preds = %283
%285 = load double*, double** %28
%286 = getelementptr inbounds double, double* %285, i64 0
%287 = load double, double* %286
%288 = fcmp olt double %287, 4.000000e-01
br i1 %288, label %289, label %310
289: ; preds = %284
%290 = load double, double* %16
%291 = load double, double* %33
%292 = load double, double* %34
%293 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([60 x i8], [60 x i8]* @.str, i64 0, i64 0), double %290, double %291, double %292)
%294 = load double, double* %35
%295 = load double, double* %36
%296 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.1, i64 0, i64 0), double %294, double %295)
%297 = load double, double* %20
%298 = load double, double* %21
%299 = load double, double* %22
%300 = load double, double* %23
%301 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.2, i64 0, i64 0), double %297, double %298, double %299, double %300)
%302 = load double, double* %24
%303 = load double, double* %25
%304 = load double, double* %26
%305 = load double, double* %27
%306 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.3, i64 0, i64 0), double %302, double %303, double %304, double %305)
%307 = load double, double* %17
%308 = load double, double* %18
%309 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.4, i64 0, i64 0), double %307, double %308)
store i32 1, i32* %37
br label %310
310: ; preds = %289, %284, %283, %278, %274
%311 = load double, double* %33
%312 = load double*, double** %15
store double %311, double* %312
%313 = load i32, i32* %37
ret i32 %313
}

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