#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_MIN;
double M_PI;
scalar_t__ abs(double);
double dqagi(double (*)(double, void *), void *, double, int, double, double,
             double *, int *, int *);
double dqext(int *, double *, double *, double *, int *);
double dqfour(double (*)(double, void *), void *, double, double, double, int,
              double, double, int, int, double *, int *, int *, int *,
              double **);
double fabs(double);
double dqawfe(double f(double, void *), void *cbData, double a, double omega,
              int sincos, double epsabs, int limlst, int maxp1, double *abserr,
              int *neval, int *ier, double rslst[], double erlst[],
              int ierlst[], double **chebmo) {
  double abseps, correc, cycle, c1, c2, dl, drl;
  double ep, eps, epsa, errsum, fact, p1, psum[52], reseps;
  double res3la[3], result;
  int ktmin, l, ll, momcom, nev, nres, numrl2, lst;
  result = 0.0;
  *abserr = 0.0;
  *neval = 0;
  *ier = 0;
  ll = 0;
  if (((sincos != 1) && (sincos != 2)) || (epsabs <= 0.0) || (limlst < 3))
    *ier = 6;
  if (*ier == 6)
    goto _999;
  if (omega != 0.0)
    goto _10;
  if (sincos == 1)
    result = dqagi(f, cbData, 0.0, 1, epsabs, 0.0, abserr, neval, ier);
  rslst[0] = result;
  erlst[0] = *abserr;
  ierlst[0] = *ier;
  goto _999;
_10:
  res3la[0] = 0.0;
  res3la[1] = 0.0;
  res3la[2] = 0.0;
  l = (int)abs(omega);
  dl = 2 * l + 1;
  cycle = dl * M_PI / fabs(omega);
  *ier = 0;
  ktmin = 0;
  *neval = 0;
  numrl2 = -1;
  nres = 0;
  c1 = a;
  c2 = cycle + a;
  p1 = 1.0 - 0.9;
  eps = epsabs;
  if (epsabs > (DBL_MIN / p1))
    eps = epsabs * p1;
  ep = eps;
  fact = 1.0;
  correc = 0.0;
  *abserr = 0.0;
  errsum = 0.0;
  for (lst = 0; lst < limlst; lst++) {
    epsa = eps * fact;
    rslst[lst] =
        dqfour(f, cbData, c1, c2, omega, sincos, epsa, 0.0, lst + 1, maxp1,
               &erlst[lst], &nev, &ierlst[lst], &momcom, chebmo);
    *neval += nev;
    fact *= 0.9;
    errsum += erlst[lst];
    drl = 50.0 * fabs(rslst[lst]);
    if (((errsum + drl) <= epsabs) && (lst >= 5))
      goto _80;
    correc = (((correc) > (erlst[lst])) ? (correc) : (erlst[lst]));
    if (ierlst[lst] != 0)
      eps = (((ep) > (correc * p1)) ? (ep) : (correc * p1));
    if (ierlst[lst] != 0)
      *ier = 7;
    if ((*ier == 7) && ((errsum + drl) <= (correc * 10.0)) && (lst > 4))
      goto _80;
    numrl2++;
    if (lst > 0)
      goto _20;
    psum[0] = rslst[0];
    goto _40;
  _20:
    psum[numrl2] = psum[ll] + rslst[lst];
    if (lst == 1)
      goto _40;
    if (lst == limlst - 1)
      *ier = 8;
    reseps = dqext(&numrl2, psum, &abseps, res3la, &nres);
    ktmin++;
    if ((ktmin >= 15) && (*abserr <= 0.001 * (errsum + drl)))
      *ier = 9;
    if ((abseps > *abserr) && (lst != 2))
      goto _30;
    *abserr = abseps;
    result = reseps;
    ktmin = 0;
    if (((*abserr + 10.0 * correc) <= epsabs) ||
        (*abserr <= epsabs) && (10.0 * correc >= epsabs))
      goto _60;
  _30:
    if ((*ier != 0) && (*ier != 7))
      goto _60;
  _40:
    ll = numrl2;
    c1 = c2;
    c2 += cycle;
    {};
  }
_60:
  (*abserr) += (10.0 * correc);
  if (*ier == 0)
    goto _999;
  if ((result != 0.0) && (psum[numrl2] != 0.0))
    goto _70;
  if (*abserr > errsum)
    goto _80;
  if (psum[numrl2] == 0.0)
    goto _999;
_70:
  if ((*abserr / fabs(result) > (errsum + drl) / fabs(psum[numrl2])))
    goto _80;
  if ((*ier >= 1) && (*ier != 7))
    (*abserr) += drl;
  goto _999;
_80:
  result = psum[numrl2];
  *abserr = errsum + drl;
_999:
  return result;
}


x86 assembly (clang, -O0):
<dqawfe>:
push   %rbp
mov    %rsp,%rbp
push   %rbx
sub    $0x2c8,%rsp
mov    0x38(%rbp),%rax
mov    0x30(%rbp),%rax
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
movsd  %xmm0,-0x20(%rbp)
movsd  %xmm1,-0x28(%rbp)
mov    %edx,-0x2c(%rbp)
movsd  %xmm2,-0x38(%rbp)
mov    %ecx,-0x3c(%rbp)
mov    %r8d,-0x40(%rbp)
mov    %r9,-0x48(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x278(%rbp)
ff
mov    -0x48(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
mov    0x10(%rbp),%rax
movl   $0x0,(%rax)
mov    0x18(%rbp),%rax
movl   $0x0,(%rax)
movl   $0x0,-0x284(%rbp)
cmpl   $0x1,-0x2c(%rbp)
je     11d1 <dqawfe+0x91>
cmpl   $0x2,-0x2c(%rbp)
jne    11e9 <dqawfe+0xa9>
xorps  %xmm0,%xmm0
ucomisd -0x38(%rbp),%xmm0
jae    11e9 <dqawfe+0xa9>
cmpl   $0x3,-0x3c(%rbp)
jge    11f3 <dqawfe+0xb3>
mov    0x18(%rbp),%rax
movl   $0x6,(%rax)
mov    0x18(%rbp),%rax
cmpl   $0x6,(%rax)
jne    1205 <dqawfe+0xc5>
jmp    1a08 <dqawfe+0x8c8>
movsd  -0x28(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1222 <dqawfe+0xe2>
jp     1222 <dqawfe+0xe2>
jmp    1227 <dqawfe+0xe7>
jmp    1293 <dqawfe+0x153>
cmpl   $0x1,-0x2c(%rbp)
jne    1262 <dqawfe+0x122>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
movsd  -0x38(%rbp),%xmm1
mov    -0x48(%rbp),%rcx
mov    0x10(%rbp),%r8
mov    0x18(%rbp),%r9
xorps  %xmm2,%xmm2
mov    $0x1,%edx
movaps %xmm2,%xmm0
call   1040 <dqagi@plt>
movsd  %xmm0,-0x278(%rbp)
ff
movsd  -0x278(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x48(%rbp),%rax
movsd  (%rax),%xmm0
mov    0x28(%rbp),%rax
movsd  %xmm0,(%rax)
mov    0x18(%rbp),%rax
mov    (%rax),%ecx
mov    0x30(%rbp),%rax
mov    %ecx,(%rax)
jmp    1a08 <dqawfe+0x8c8>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x270(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x268(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x260(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
call   1030 <abs@plt>
mov    %eax,-0x280(%rbp)
mov    -0x280(%rbp),%eax
shl    $0x1,%eax
add    $0x1,%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x78(%rbp),%xmm0
mov    0x2d03(%rip),%rax
mulsd  (%rax),%xmm0
movsd  -0x28(%rbp),%xmm1
movaps 0xd3b(%rip),%xmm2
pand   %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    0x18(%rbp),%rax
movl   $0x0,(%rax)
movl   $0x0,-0x27c(%rbp)
mov    0x10(%rbp),%rax
movl   $0x0,(%rax)
movl   $0xffffffff,-0x294(%rbp)
ff ff ff
movl   $0x0,-0x290(%rbp)
movsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x60(%rbp),%xmm0
addsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  0xcab(%rip),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
mov    0x2c62(%rip),%rax
movsd  (%rax),%xmm1
divsd  -0xb0(%rbp),%xmm1
ff
ucomisd %xmm1,%xmm0
jbe    13a1 <dqawfe+0x261>
movsd  -0x38(%rbp),%xmm0
mulsd  -0xb0(%rbp),%xmm0
ff
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x88(%rbp)
ff
movsd  0xc4f(%rip),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x48(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movl   $0x0,-0x298(%rbp)
mov    -0x298(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jge    1884 <dqawfe+0x744>
movsd  -0x90(%rbp),%xmm0
ff
mulsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
movsd  -0x68(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm1
movsd  -0x28(%rbp),%xmm2
mov    -0x2c(%rbp),%edx
movsd  -0x98(%rbp),%xmm3
ff
mov    -0x298(%rbp),%ecx
add    $0x1,%ecx
mov    -0x40(%rbp),%r8d
mov    0x28(%rbp),%r9
movslq -0x298(%rbp),%rax
shl    $0x3,%rax
add    %rax,%r9
mov    0x30(%rbp),%r11
movslq -0x298(%rbp),%rax
shl    $0x2,%rax
add    %rax,%r11
mov    0x38(%rbp),%rax
xorps  %xmm4,%xmm4
lea    -0x28c(%rbp),%rbx
lea    -0x288(%rbp),%r10
mov    %rbx,(%rsp)
mov    %r11,0x8(%rsp)
mov    %r10,0x10(%rsp)
mov    %rax,0x18(%rsp)
call   1050 <dqfour@plt>
mov    0x20(%rbp),%rax
movslq -0x298(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x28c(%rbp),%ecx
mov    0x10(%rbp),%rax
add    (%rax),%ecx
mov    %ecx,(%rax)
movsd  0xb62(%rip),%xmm0
mulsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0xa8(%rbp)
ff
mov    0x28(%rbp),%rax
movslq -0x298(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
addsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0xa0(%rbp)
ff
mov    0x20(%rbp),%rax
movslq -0x298(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
movaps 0xb33(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  0xb07(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0xa0(%rbp),%xmm1
ff
addsd  -0x80(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jb     1540 <dqawfe+0x400>
cmpl   $0x5,-0x298(%rbp)
jl     1540 <dqawfe+0x400>
jmp    19db <dqawfe+0x89b>
movsd  -0x58(%rbp),%xmm0
mov    0x28(%rbp),%rax
movslq -0x298(%rbp),%rcx
ucomisd (%rax,%rcx,8),%xmm0
jbe    156d <dqawfe+0x42d>
movsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x2a0(%rbp)
ff
jmp    1585 <dqawfe+0x445>
mov    0x28(%rbp),%rax
movslq -0x298(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x2a0(%rbp)
ff
movsd  -0x2a0(%rbp),%xmm0
ff
movsd  %xmm0,-0x58(%rbp)
mov    0x30(%rbp),%rax
movslq -0x298(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     1600 <dqawfe+0x4c0>
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0x58(%rbp),%xmm1
mulsd  -0xb0(%rbp),%xmm1
ff
ucomisd %xmm1,%xmm0
jbe    15db <dqawfe+0x49b>
movsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x2a8(%rbp)
ff
jmp    15f0 <dqawfe+0x4b0>
movsd  -0x58(%rbp),%xmm0
mulsd  -0xb0(%rbp),%xmm0
ff
movsd  %xmm0,-0x2a8(%rbp)
ff
movsd  -0x2a8(%rbp),%xmm0
ff
movsd  %xmm0,-0x90(%rbp)
ff
mov    0x30(%rbp),%rax
movslq -0x298(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     161f <dqawfe+0x4df>
mov    0x18(%rbp),%rax
movl   $0x7,(%rax)
mov    0x18(%rbp),%rax
cmpl   $0x7,(%rax)
jne    1662 <dqawfe+0x522>
movsd  -0xa0(%rbp),%xmm1
ff
addsd  -0x80(%rbp),%xmm1
movsd  0x9df(%rip),%xmm0
mulsd  -0x58(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jb     1662 <dqawfe+0x522>
cmpl   $0x4,-0x298(%rbp)
jle    1662 <dqawfe+0x522>
jmp    19db <dqawfe+0x89b>
mov    -0x294(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x294(%rbp)
cmpl   $0x0,-0x298(%rbp)
jle    1683 <dqawfe+0x543>
jmp    1698 <dqawfe+0x558>
mov    0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x250(%rbp)
ff
jmp    184b <dqawfe+0x70b>
movslq -0x284(%rbp),%rax
movsd  -0x250(%rbp,%rax,8),%xmm0
ff ff
mov    0x20(%rbp),%rax
movslq -0x298(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movslq -0x294(%rbp),%rax
movsd  %xmm0,-0x250(%rbp,%rax,8)
ff ff
cmpl   $0x1,-0x298(%rbp)
jne    16da <dqawfe+0x59a>
jmp    184b <dqawfe+0x70b>
mov    -0x298(%rbp),%eax
mov    -0x3c(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jne    16f8 <dqawfe+0x5b8>
mov    0x18(%rbp),%rax
movl   $0x8,(%rax)
lea    -0x250(%rbp),%rsi
lea    -0x270(%rbp),%rcx
lea    -0x294(%rbp),%rdi
lea    -0x50(%rbp),%rdx
lea    -0x290(%rbp),%r8
call   1060 <dqext@plt>
movsd  %xmm0,-0x258(%rbp)
ff
mov    -0x27c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x27c(%rbp)
cmpl   $0xf,-0x27c(%rbp)
jl     1776 <dqawfe+0x636>
mov    -0x48(%rbp),%rax
movsd  (%rax),%xmm1
movsd  -0xa0(%rbp),%xmm2
ff
addsd  -0x80(%rbp),%xmm2
movsd  0x8ca(%rip),%xmm0
mulsd  %xmm2,%xmm0
ucomisd %xmm1,%xmm0
jb     1776 <dqawfe+0x636>
mov    0x18(%rbp),%rax
movl   $0x9,(%rax)
movsd  -0x50(%rbp),%xmm0
mov    -0x48(%rbp),%rax
ucomisd (%rax),%xmm0
jbe    179b <dqawfe+0x65b>
cmpl   $0x2,-0x298(%rbp)
je     179b <dqawfe+0x65b>
jmp    1827 <dqawfe+0x6e7>
movsd  -0x50(%rbp),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x258(%rbp),%xmm0
ff
movsd  %xmm0,-0x278(%rbp)
ff
movl   $0x0,-0x27c(%rbp)
mov    -0x48(%rbp),%rax
movsd  (%rax),%xmm0
movsd  -0x58(%rbp),%xmm1
movsd  0x849(%rip),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x38(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jae    181d <dqawfe+0x6dd>
mov    -0x48(%rbp),%rax
movsd  (%rax),%xmm1
movsd  -0x38(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jb     1822 <dqawfe+0x6e2>
movsd  0x813(%rip),%xmm0
mulsd  -0x58(%rbp),%xmm0
ucomisd -0x38(%rbp),%xmm0
jb     1822 <dqawfe+0x6e2>
jmp    1889 <dqawfe+0x749>
jmp    1827 <dqawfe+0x6e7>
mov    0x18(%rbp),%rax
cmpl   $0x0,(%rax)
je     1846 <dqawfe+0x706>
mov    0x18(%rbp),%rax
cmpl   $0x7,(%rax)
je     1846 <dqawfe+0x706>
jmp    1889 <dqawfe+0x749>
jmp    184b <dqawfe+0x70b>
mov    -0x294(%rbp),%eax
mov    %eax,-0x284(%rbp)
movsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x60(%rbp),%xmm0
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x298(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x298(%rbp)
jmp    13e9 <dqawfe+0x2a9>
jmp    1889 <dqawfe+0x749>
movsd  -0x58(%rbp),%xmm0
mov    -0x48(%rbp),%rax
movsd  (%rax),%xmm1
movsd  0x782(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax)
mov    0x18(%rbp),%rax
cmpl   $0x0,(%rax)
jne    18bc <dqawfe+0x77c>
jmp    1a08 <dqawfe+0x8c8>
movsd  -0x278(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    18dc <dqawfe+0x79c>
jp     18dc <dqawfe+0x79c>
jmp    1909 <dqawfe+0x7c9>
movslq -0x294(%rbp),%rax
movsd  -0x250(%rbp,%rax,8),%xmm0
ff ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1904 <dqawfe+0x7c4>
jp     1904 <dqawfe+0x7c4>
jmp    1909 <dqawfe+0x7c9>
jmp    1951 <dqawfe+0x811>
mov    -0x48(%rbp),%rax
movsd  (%rax),%xmm0
ucomisd -0xa0(%rbp),%xmm0
ff
jbe    1924 <dqawfe+0x7e4>
jmp    19db <dqawfe+0x89b>
movslq -0x294(%rbp),%rax
movsd  -0x250(%rbp,%rax,8),%xmm0
ff ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    194c <dqawfe+0x80c>
jp     194c <dqawfe+0x80c>
jmp    1a08 <dqawfe+0x8c8>
jmp    1951 <dqawfe+0x811>
mov    -0x48(%rbp),%rax
movsd  (%rax),%xmm0
movsd  -0x278(%rbp),%xmm1
ff
movaps 0x6c8(%rip),%xmm2
pand   %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  -0xa0(%rbp),%xmm1
ff
addsd  -0x80(%rbp),%xmm1
movslq -0x294(%rbp),%rax
movsd  -0x250(%rbp,%rax,8),%xmm2
ff ff
movaps 0x69c(%rip),%xmm3
pand   %xmm3,%xmm2
divsd  %xmm2,%xmm1
ucomisd %xmm1,%xmm0
jbe    19ab <dqawfe+0x86b>
jmp    19db <dqawfe+0x89b>
mov    0x18(%rbp),%rax
cmpl   $0x1,(%rax)
jl     19d6 <dqawfe+0x896>
mov    0x18(%rbp),%rax
cmpl   $0x7,(%rax)
je     19d6 <dqawfe+0x896>
movsd  -0x80(%rbp),%xmm0
mov    -0x48(%rbp),%rax
addsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
jmp    1a08 <dqawfe+0x8c8>
movslq -0x294(%rbp),%rax
movsd  -0x250(%rbp,%rax,8),%xmm0
ff ff
movsd  %xmm0,-0x278(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
addsd  -0x80(%rbp),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x278(%rbp),%xmm0
ff
add    $0x2c8,%rsp
pop    %rbx
pop    %rbp
ret

x86 assembly (clang, -O2):
<dqawfe>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x2c8,%rsp
mov    %r9,%r15
mov    %ecx,%ebp
movapd %xmm1,%xmm3
movapd %xmm2,%xmm1
movapd %xmm0,%xmm2
mov    0x308(%rsp),%r9
mov    0x300(%rsp),%r14
movq   $0x0,(%r15)
movl   $0x0,(%r14)
lea    -0x3(%rdx),%eax
cmp    $0xfffffffe,%eax
setb   %al
xorpd  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
setae  %cl
cmp    $0x3,%ebp
setl   %bl
or     %al,%bl
xor    %eax,%eax
or     %cl,%bl
mov    $0x6,%ecx
cmove  %eax,%ecx
mov    %ecx,(%r9)
jne    16bd <dqawfe+0x57d>
xorpd  %xmm0,%xmm0
ucomisd %xmm0,%xmm3
jne    11c1 <dqawfe+0x81>
jnp    1659 <dqawfe+0x519>
mov    %rdx,0xa0(%rsp)
mov    %r8d,0x2c(%rsp)
mov    %rdi,0xa8(%rsp)
mov    %rsi,0xb0(%rsp)
xorpd  %xmm0,%xmm0
movapd %xmm0,0x100(%rsp)
movq   $0x0,0x110(%rsp)
movapd %xmm3,%xmm0
movapd %xmm1,0x60(%rsp)
movapd %xmm3,0xd0(%rsp)
movsd  %xmm2,0x18(%rsp)
call   1030 <abs@plt>
movsd  0x18(%rsp),%xmm2
add    %eax,%eax
add    $0x1,%eax
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
mov    0x2dba(%rip),%rax
mulsd  (%rax),%xmm1
movapd 0xdc6(%rip),%xmm0
andpd  0xd0(%rsp),%xmm0
divsd  %xmm0,%xmm1
movsd  %xmm1,0x98(%rsp)
mov    0x308(%rsp),%rax
movl   $0x0,(%rax)
movl   $0x0,(%r14)
movl   $0xffffffff,0x8(%rsp)
ff
movl   $0x0,0x30(%rsp)
mov    0x2d5c(%rip),%rax
movsd  (%rax),%xmm1
movsd  0xd88(%rip),%xmm3
divsd  %xmm3,%xmm1
movapd 0x60(%rsp),%xmm4
movapd %xmm4,%xmm0
mulsd  %xmm3,%xmm0
cmpltsd %xmm4,%xmm1
andpd  %xmm1,%xmm0
andnpd %xmm4,%xmm1
orpd   %xmm0,%xmm1
mov    %r15,0x10(%rsp)
movq   $0x0,(%r15)
lea    -0x1(%rbp),%eax
mov    %rax,0x80(%rsp)
mov    %ebp,%eax
mov    %rax,0x90(%rsp)
movsd  0xd44(%rip),%xmm0
movsd  %xmm0,0x20(%rsp)
xorpd  %xmm4,%xmm4
xor    %r13d,%r13d
xor    %r15d,%r15d
xor    %r14d,%r14d
xor    %ebx,%ebx
movl   $0x0,0xc(%rsp)
xorpd  %xmm0,%xmm0
movapd %xmm0,0x40(%rsp)
xorpd  %xmm0,%xmm0
movapd %xmm0,0x50(%rsp)
movapd %xmm1,0xe0(%rsp)
movsd  %xmm1,0x38(%rsp)
jmp    1357 <dqawfe+0x217>
cs nopw 0x0(%rax,%rax,1)
mov    0x310(%rsp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,0x120(%rsp)
mov    0x8(%rsp),%ebx
add    $0x4,%r15
add    $0x8,%r13
mov    0xb8(%rsp),%r14
cmp    %r14,0x90(%rsp)
je     16cf <dqawfe+0x58f>
movapd %xmm4,0x70(%rsp)
movapd %xmm2,%xmm0
movsd  0x98(%rsp),%xmm1
addsd  %xmm2,%xmm1
movsd  0x38(%rsp),%xmm3
mulsd  0x20(%rsp),%xmm3
lea    0x1(%r14),%rcx
mov    0x318(%rsp),%r12
lea    (%r12,%r13,1),%r9
mov    0x320(%rsp),%rax
add    %r15,%rax
xorpd  %xmm4,%xmm4
mov    0xa8(%rsp),%rdi
mov    0xb0(%rsp),%rsi
movsd  %xmm1,0x18(%rsp)
movapd 0xd0(%rsp),%xmm2
mov    0xa0(%rsp),%rdx
mov    %rcx,0xb8(%rsp)
mov    0x2c(%rsp),%r8d
push   0x328(%rsp)
lea    0xd4(%rsp),%rbp
push   %rbp
push   %rax
lea    0x4c(%rsp),%rax
push   %rax
call   1050 <dqfour@plt>
add    $0x20,%rsp
mov    0x310(%rsp),%rax
movsd  %xmm0,(%rax,%r14,8)
mov    0x34(%rsp),%eax
mov    0x300(%rsp),%rcx
add    %eax,(%rcx)
movsd  0x20(%rsp),%xmm1
mulsd  0xc09(%rip),%xmm1
movsd  %xmm1,0x20(%rsp)
movsd  (%r12,%r14,8),%xmm1
movapd 0x50(%rsp),%xmm3
addsd  %xmm1,%xmm3
movapd %xmm0,%xmm5
andpd  0xbc7(%rip),%xmm5
mulsd  0xbe7(%rip),%xmm5
movapd %xmm5,%xmm7
addsd  %xmm3,%xmm7
cmp    $0x5,%r14
jb     145f <dqawfe+0x31f>
movapd 0x60(%rsp),%xmm2
ucomisd %xmm7,%xmm2
jae    16a6 <dqawfe+0x566>
movapd %xmm3,0x50(%rsp)
movapd 0x70(%rsp),%xmm4
maxsd  %xmm1,%xmm4
mov    0x320(%rsp),%rax
cmpl   $0x0,(%rax,%r14,4)
movapd %xmm4,%xmm1
mulsd  0xb88(%rip),%xmm1
je     149d <dqawfe+0x35d>
movapd 0xe0(%rsp),%xmm2
maxsd  %xmm1,%xmm2
movsd  %xmm2,0x38(%rsp)
mov    0x308(%rsp),%rsi
movsd  0x18(%rsp),%xmm2
movsd  0xb7d(%rip),%xmm3
je     14c0 <dqawfe+0x380>
movl   $0x7,(%rsi)
jmp    14c5 <dqawfe+0x385>
nopl   (%rax)
cmpl   $0x7,(%rsi)
jne    14dd <dqawfe+0x39d>
movapd %xmm4,%xmm1
mulsd  %xmm3,%xmm1
cmp    $0x5,%r14
jb     14dd <dqawfe+0x39d>
ucomisd %xmm7,%xmm1
jae    16a6 <dqawfe+0x566>
movslq 0x8(%rsp),%rax
lea    0x1(%rax),%ecx
mov    %ecx,0x8(%rsp)
test   %r14,%r14
je     1320 <dqawfe+0x1e0>
movslq %ebx,%rcx
addsd  0x120(%rsp,%rcx,8),%xmm0
movsd  %xmm0,0x128(%rsp,%rax,8)
cmp    $0x1,%r14
je     1335 <dqawfe+0x1f5>
movsd  %xmm7,0x88(%rsp)
movapd %xmm5,0xf0(%rsp)
movapd %xmm4,0x70(%rsp)
cmp    %r14,0x80(%rsp)
jne    1539 <dqawfe+0x3f9>
movl   $0x8,(%rsi)
lea    0x8(%rsp),%rdi
lea    0x120(%rsp),%rsi
lea    0xc0(%rsp),%rdx
lea    0x100(%rsp),%rcx
lea    0x30(%rsp),%r8
call   1060 <dqext@plt>
mov    0x308(%rsp),%rsi
mov    0x10(%rsp),%rax
movsd  (%rax),%xmm2
movsd  0x88(%rsp),%xmm7
movapd %xmm7,%xmm1
mulsd  0xab2(%rip),%xmm1
mov    0xc(%rsp),%eax
cmp    $0xe,%eax
jl     159b <dqawfe+0x45b>
ucomisd %xmm2,%xmm1
jb     159b <dqawfe+0x45b>
movl   $0x9,(%rsi)
movsd  0xc0(%rsp),%xmm1
cmp    $0x2,%r14
movapd 0x70(%rsp),%xmm4
movapd 0xf0(%rsp),%xmm5
movsd  0xa71(%rip),%xmm6
je     15da <dqawfe+0x49a>
ucomisd %xmm2,%xmm1
jbe    15da <dqawfe+0x49a>
add    $0x1,%eax
mov    %eax,0xc(%rsp)
movapd %xmm2,%xmm1
movapd 0x40(%rsp),%xmm0
jmp    162e <dqawfe+0x4ee>
mov    0x10(%rsp),%rax
movsd  %xmm1,(%rax)
movapd %xmm4,%xmm2
mulsd  %xmm6,%xmm2
addsd  %xmm1,%xmm2
movapd 0x60(%rsp),%xmm3
ucomisd %xmm2,%xmm3
jae    16de <dqawfe+0x59e>
ucomisd %xmm1,%xmm3
movapd %xmm4,%xmm2
mulsd  %xmm6,%xmm2
jb     1626 <dqawfe+0x4e6>
movl   $0x0,0xc(%rsp)
ucomisd %xmm3,%xmm2
movsd  0x18(%rsp),%xmm2
jb     1634 <dqawfe+0x4f4>
jmp    16de <dqawfe+0x59e>
movl   $0x0,0xc(%rsp)
movsd  0x18(%rsp),%xmm2
mov    (%rsi),%eax
cmp    $0x7,%eax
je     164e <dqawfe+0x50e>
movapd %xmm0,0x40(%rsp)
test   %eax,%eax
je     1335 <dqawfe+0x1f5>
jmp    16de <dqawfe+0x59e>
movapd %xmm0,0x40(%rsp)
jmp    1335 <dqawfe+0x1f5>
xor    %eax,%eax
cmp    $0x1,%edx
jne    167d <dqawfe+0x53d>
xorpd  %xmm0,%xmm0
xorpd  %xmm2,%xmm2
mov    $0x1,%edx
mov    %r15,%rcx
mov    %r14,%r8
mov    %r9,%rbx
call   1040 <dqagi@plt>
mov    (%rbx),%eax
mov    0x310(%rsp),%rcx
movsd  %xmm0,(%rcx)
movsd  (%r15),%xmm1
mov    0x318(%rsp),%rcx
movsd  %xmm1,(%rcx)
mov    0x320(%rsp),%rcx
mov    %eax,(%rcx)
jmp    16bd <dqawfe+0x57d>
mov    0x10(%rsp),%rdx
movslq 0x8(%rsp),%rax
movsd  0x120(%rsp,%rax,8),%xmm0
movsd  %xmm7,(%rdx)
add    $0x2c8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    0x10(%rsp),%rax
movsd  (%rax),%xmm1
movapd 0x40(%rsp),%xmm0
mulsd  0x94a(%rip),%xmm4
addsd  %xmm1,%xmm4
mov    0x10(%rsp),%rdx
movsd  %xmm4,(%rdx)
mov    (%rsi),%eax
test   %eax,%eax
je     16bd <dqawfe+0x57d>
xorpd  %xmm2,%xmm2
ucomisd %xmm2,%xmm0
jne    1705 <dqawfe+0x5c5>
jnp    171b <dqawfe+0x5db>
movslq 0x8(%rsp),%rcx
movsd  0x120(%rsp,%rcx,8),%xmm1
ucomisd %xmm2,%xmm1
jne    173d <dqawfe+0x5fd>
jp     173d <dqawfe+0x5fd>
ucomisd 0x50(%rsp),%xmm4
ja     16ab <dqawfe+0x56b>
movslq 0x8(%rsp),%rcx
movsd  0x120(%rsp,%rcx,8),%xmm1
xorpd  %xmm2,%xmm2
ucomisd %xmm2,%xmm1
jne    173d <dqawfe+0x5fd>
jnp    16bd <dqawfe+0x57d>
movapd 0x50(%rsp),%xmm3
addsd  %xmm5,%xmm3
movapd %xmm0,%xmm2
unpcklpd %xmm1,%xmm2
andpd  0x8a9(%rip),%xmm2
movapd %xmm4,%xmm1
unpcklpd %xmm3,%xmm1
divpd  %xmm2,%xmm1
movapd %xmm1,%xmm2
unpckhpd %xmm1,%xmm2
ucomisd %xmm2,%xmm1
movapd %xmm3,%xmm7
ja     16ab <dqawfe+0x56b>
test   %eax,%eax
jle    16bd <dqawfe+0x57d>
cmp    $0x7,%eax
je     16bd <dqawfe+0x57d>
addsd  %xmm4,%xmm5
movsd  %xmm5,(%rdx)
jmp    16bd <dqawfe+0x57d>

LLVM IR (-O0):
@M_PI = global double 0.000000e+00
@DBL_MIN = global double 0.000000e+00
define double @dqawfe(double (double, i8*)* %0, i8* %1, double %2, double %3, i32 %4, double %5, i32 %6, i32 %7, double* %8, i32* %9, i32* %10, double* %11, double* %12, i32* %13, double** %14) {
%16 = alloca double (double, i8*)*
%17 = alloca i8*
%18 = alloca double
%19 = alloca double
%20 = alloca i32
%21 = alloca double
%22 = alloca i32
%23 = alloca i32
%24 = alloca double*
%25 = alloca i32*
%26 = alloca i32*
%27 = alloca double*
%28 = alloca double*
%29 = alloca i32*
%30 = alloca double**
%31 = alloca double
%32 = alloca double
%33 = alloca double
%34 = alloca double
%35 = alloca double
%36 = alloca double
%37 = alloca double
%38 = alloca double
%39 = alloca double
%40 = alloca double
%41 = alloca double
%42 = alloca double
%43 = alloca double
%44 = alloca [52 x double]
%45 = alloca double
%46 = alloca [3 x double]
%47 = alloca double
%48 = alloca i32
%49 = alloca i32
%50 = alloca i32
%51 = alloca i32
%52 = alloca i32
%53 = alloca i32
%54 = alloca i32
%55 = alloca i32
store double (double, i8*)* %0, double (double, i8*)** %16
store i8* %1, i8** %17
store double %2, double* %18
store double %3, double* %19
store i32 %4, i32* %20
store double %5, double* %21
store i32 %6, i32* %22
store i32 %7, i32* %23
store double* %8, double** %24
store i32* %9, i32** %25
store i32* %10, i32** %26
store double* %11, double** %27
store double* %12, double** %28
store i32* %13, i32** %29
store double** %14, double*** %30
store double 0.000000e+00, double* %47
%56 = load double*, double** %24
store double 0.000000e+00, double* %56
%57 = load i32*, i32** %25
store i32 0, i32* %57
%58 = load i32*, i32** %26
store i32 0, i32* %58
store i32 0, i32* %50
%59 = load i32, i32* %20
%60 = icmp ne i32 %59, 1
br i1 %60, label %61, label %64
61: ; preds = %15
%62 = load i32, i32* %20
%63 = icmp ne i32 %62, 2
br i1 %63, label %70, label %64
64: ; preds = %61, %15
%65 = load double, double* %21
%66 = fcmp ole double %65, 0.000000e+00
br i1 %66, label %70, label %67
67: ; preds = %64
%68 = load i32, i32* %22
%69 = icmp slt i32 %68, 3
br i1 %69, label %70, label %72
70: ; preds = %67, %64, %61
%71 = load i32*, i32** %26
store i32 6, i32* %71
br label %72
72: ; preds = %70, %67
%73 = load i32*, i32** %26
%74 = load i32, i32* %73
%75 = icmp eq i32 %74, 6
br i1 %75, label %76, label %77
76: ; preds = %72
br label %440
77: ; preds = %72
%78 = load double, double* %19
%79 = fcmp une double %78, 0.000000e+00
br i1 %79, label %80, label %81
80: ; preds = %77
br label %104
81: ; preds = %77
%82 = load i32, i32* %20
%83 = icmp eq i32 %82, 1
br i1 %83, label %84, label %92
84: ; preds = %81
%85 = load double (double, i8*)*, double (double, i8*)** %16
%86 = load i8*, i8** %17
%87 = load double, double* %21
%88 = load double*, double** %24
%89 = load i32*, i32** %25
%90 = load i32*, i32** %26
%91 = call double @dqagi(double (double, i8*)* %85, i8* %86, double 0.000000e+00, i32 1, double %87, double 0.000000e+00, double* %88, i32* %89, i32* %90)
store double %91, double* %47
br label %92
92: ; preds = %84, %81
%93 = load double, double* %47
%94 = load double*, double** %27
%95 = getelementptr inbounds double, double* %94, i64 0
store double %93, double* %95
%96 = load double*, double** %24
%97 = load double, double* %96
%98 = load double*, double** %28
%99 = getelementptr inbounds double, double* %98, i64 0
store double %97, double* %99
%100 = load i32*, i32** %26
%101 = load i32, i32* %100
%102 = load i32*, i32** %29
%103 = getelementptr inbounds i32, i32* %102, i64 0
store i32 %101, i32* %103
br label %440
104: ; preds = %80
%105 = getelementptr inbounds [3 x double], [3 x double]* %46, i64 0, i64 0
store double 0.000000e+00, double* %105
%106 = getelementptr inbounds [3 x double], [3 x double]* %46, i64 0, i64 1
store double 0.000000e+00, double* %106
%107 = getelementptr inbounds [3 x double], [3 x double]* %46, i64 0, i64 2
store double 0.000000e+00, double* %107
%108 = load double, double* %19
%109 = call i64 @abs(double %108)
%110 = trunc i64 %109 to i32
store i32 %110, i32* %49
%111 = load i32, i32* %49
%112 = mul nsw i32 2, %111
%113 = add nsw i32 %112, 1
%114 = sitofp i32 %113 to double
store double %114, double* %36
%115 = load double, double* %36
%116 = load double, double* @M_PI
%117 = fmul double %115, %116
%118 = load double, double* %19
%119 = call double @llvm.fabs.f64(double %118)
%120 = fdiv double %117, %119
store double %120, double* %33
%121 = load i32*, i32** %26
store i32 0, i32* %121
store i32 0, i32* %48
%122 = load i32*, i32** %25
store i32 0, i32* %122
store i32 -1, i32* %54
store i32 0, i32* %53
%123 = load double, double* %18
store double %123, double* %34
%124 = load double, double* %33
%125 = load double, double* %18
%126 = fadd double %124, %125
store double %126, double* %35
store double 0x3FB9999999999998, double* %43
%127 = load double, double* %21
store double %127, double* %39
%128 = load double, double* %21
%129 = load double, double* @DBL_MIN
%130 = load double, double* %43
%131 = fdiv double %129, %130
%132 = fcmp ogt double %128, %131
br i1 %132, label %133, label %137
133: ; preds = %104
%134 = load double, double* %21
%135 = load double, double* %43
%136 = fmul double %134, %135
store double %136, double* %39
br label %137
137: ; preds = %133, %104
%138 = load double, double* %39
store double %138, double* %38
store double 1.000000e+00, double* %42
store double 0.000000e+00, double* %32
%139 = load double*, double** %24
store double 0.000000e+00, double* %139
store double 0.000000e+00, double* %41
store i32 0, i32* %55
br label %140
140: ; preds = %363, %137
%141 = load i32, i32* %55
%142 = load i32, i32* %22
%143 = icmp slt i32 %141, %142
br i1 %143, label %144, label %366
144: ; preds = %140
%145 = load double, double* %39
%146 = load double, double* %42
%147 = fmul double %145, %146
store double %147, double* %40
%148 = load double (double, i8*)*, double (double, i8*)** %16
%149 = load i8*, i8** %17
%150 = load double, double* %34
%151 = load double, double* %35
%152 = load double, double* %19
%153 = load i32, i32* %20
%154 = load double, double* %40
%155 = load i32, i32* %55
%156 = add nsw i32 %155, 1
%157 = load i32, i32* %23
%158 = load double*, double** %28
%159 = load i32, i32* %55
%160 = sext i32 %159 to i64
%161 = getelementptr inbounds double, double* %158, i64 %160
%162 = load i32*, i32** %29
%163 = load i32, i32* %55
%164 = sext i32 %163 to i64
%165 = getelementptr inbounds i32, i32* %162, i64 %164
%166 = load double**, double*** %30
%167 = call double @dqfour(double (double, i8*)* %148, i8* %149, double %150, double %151, double %152, i32 %153, double %154, double 0.000000e+00, i32 %156, i32 %157, double* %161, i32* %52, i32* %165, i32* %51, double** %166)
%168 = load double*, double** %27
%169 = load i32, i32* %55
%170 = sext i32 %169 to i64
%171 = getelementptr inbounds double, double* %168, i64 %170
store double %167, double* %171
%172 = load i32, i32* %52
%173 = load i32*, i32** %25
%174 = load i32, i32* %173
%175 = add nsw i32 %174, %172
store i32 %175, i32* %173
%176 = load double, double* %42
%177 = fmul double %176, 9.000000e-01
store double %177, double* %42
%178 = load double*, double** %28
%179 = load i32, i32* %55
%180 = sext i32 %179 to i64
%181 = getelementptr inbounds double, double* %178, i64 %180
%182 = load double, double* %181
%183 = load double, double* %41
%184 = fadd double %183, %182
store double %184, double* %41
%185 = load double*, double** %27
%186 = load i32, i32* %55
%187 = sext i32 %186 to i64
%188 = getelementptr inbounds double, double* %185, i64 %187
%189 = load double, double* %188
%190 = call double @llvm.fabs.f64(double %189)
%191 = fmul double 5.000000e+01, %190
store double %191, double* %37
%192 = load double, double* %41
%193 = load double, double* %37
%194 = fadd double %192, %193
%195 = load double, double* %21
%196 = fcmp ole double %194, %195
br i1 %196, label %197, label %201
197: ; preds = %144
%198 = load i32, i32* %55
%199 = icmp sge i32 %198, 5
br i1 %199, label %200, label %201
200: ; preds = %197
br label %431
201: ; preds = %197, %144
%202 = load double, double* %32
%203 = load double*, double** %28
%204 = load i32, i32* %55
%205 = sext i32 %204 to i64
%206 = getelementptr inbounds double, double* %203, i64 %205
%207 = load double, double* %206
%208 = fcmp ogt double %202, %207
br i1 %208, label %209, label %211
209: ; preds = %201
%210 = load double, double* %32
br label %217
211: ; preds = %201
%212 = load double*, double** %28
%213 = load i32, i32* %55
%214 = sext i32 %213 to i64
%215 = getelementptr inbounds double, double* %212, i64 %214
%216 = load double, double* %215
br label %217
217: ; preds = %211, %209
%218 = phi double [ %210, %209 ], [ %216, %211 ]
store double %218, double* %32
%219 = load i32*, i32** %29
%220 = load i32, i32* %55
%221 = sext i32 %220 to i64
%222 = getelementptr inbounds i32, i32* %219, i64 %221
%223 = load i32, i32* %222
%224 = icmp ne i32 %223, 0
br i1 %224, label %225, label %239
225: ; preds = %217
%226 = load double, double* %38
%227 = load double, double* %32
%228 = load double, double* %43
%229 = fmul double %227, %228
%230 = fcmp ogt double %226, %229
br i1 %230, label %231, label %233
231: ; preds = %225
%232 = load double, double* %38
br label %237
233: ; preds = %225
%234 = load double, double* %32
%235 = load double, double* %43
%236 = fmul double %234, %235
br label %237
237: ; preds = %233, %231
%238 = phi double [ %232, %231 ], [ %236, %233 ]
store double %238, double* %39
br label %239
239: ; preds = %237, %217
%240 = load i32*, i32** %29
%241 = load i32, i32* %55
%242 = sext i32 %241 to i64
%243 = getelementptr inbounds i32, i32* %240, i64 %242
%244 = load i32, i32* %243
%245 = icmp ne i32 %244, 0
br i1 %245, label %246, label %248
246: ; preds = %239
%247 = load i32*, i32** %26
store i32 7, i32* %247
br label %248
248: ; preds = %246, %239
%249 = load i32*, i32** %26
%250 = load i32, i32* %249
%251 = icmp eq i32 %250, 7
br i1 %251, label %252, label %263
252: ; preds = %248
%253 = load double, double* %41
%254 = load double, double* %37
%255 = fadd double %253, %254
%256 = load double, double* %32
%257 = fmul double %256, 1.000000e+01
%258 = fcmp ole double %255, %257
br i1 %258, label %259, label %263
259: ; preds = %252
%260 = load i32, i32* %55
%261 = icmp sgt i32 %260, 4
br i1 %261, label %262, label %263
262: ; preds = %259
br label %431
263: ; preds = %259, %252, %248
%264 = load i32, i32* %54
%265 = add nsw i32 %264, 1
store i32 %265, i32* %54
%266 = load i32, i32* %55
%267 = icmp sgt i32 %266, 0
br i1 %267, label %268, label %269
268: ; preds = %263
br label %274
269: ; preds = %263
%270 = load double*, double** %27
%271 = getelementptr inbounds double, double* %270, i64 0
%272 = load double, double* %271
%273 = getelementptr inbounds [52 x double], [52 x double]* %44, i64 0, i64 0
store double %272, double* %273
br label %357
274: ; preds = %268
%275 = load i32, i32* %50
%276 = sext i32 %275 to i64
%277 = getelementptr inbounds [52 x double], [52 x double]* %44, i64 0, i64 %276
%278 = load double, double* %277
%279 = load double*, double** %27
%280 = load i32, i32* %55
%281 = sext i32 %280 to i64
%282 = getelementptr inbounds double, double* %279, i64 %281
%283 = load double, double* %282
%284 = fadd double %278, %283
%285 = load i32, i32* %54
%286 = sext i32 %285 to i64
%287 = getelementptr inbounds [52 x double], [52 x double]* %44, i64 0, i64 %286
store double %284, double* %287
%288 = load i32, i32* %55
%289 = icmp eq i32 %288, 1
br i1 %289, label %290, label %291
290: ; preds = %274
br label %357
291: ; preds = %274
%292 = load i32, i32* %55
%293 = load i32, i32* %22
%294 = sub nsw i32 %293, 1
%295 = icmp eq i32 %292, %294
br i1 %295, label %296, label %298
296: ; preds = %291
%297 = load i32*, i32** %26
store i32 8, i32* %297
br label %298
298: ; preds = %296, %291
%299 = getelementptr inbounds [52 x double], [52 x double]* %44, i64 0, i64 0
%300 = getelementptr inbounds [3 x double], [3 x double]* %46, i64 0, i64 0
%301 = call double @dqext(i32* %54, double* %299, double* %31, double* %300, i32* %53)
store double %301, double* %45
%302 = load i32, i32* %48
%303 = add nsw i32 %302, 1
store i32 %303, i32* %48
%304 = load i32, i32* %48
%305 = icmp sge i32 %304, 15
br i1 %305, label %306, label %316
306: ; preds = %298
%307 = load double*, double** %24
%308 = load double, double* %307
%309 = load double, double* %41
%310 = load double, double* %37
%311 = fadd double %309, %310
%312 = fmul double 1.000000e-03, %311
%313 = fcmp ole double %308, %312
br i1 %313, label %314, label %316
314: ; preds = %306
%315 = load i32*, i32** %26
store i32 9, i32* %315
br label %316
316: ; preds = %314, %306, %298
%317 = load double, double* %31
%318 = load double*, double** %24
%319 = load double, double* %318
%320 = fcmp ogt double %317, %319
br i1 %320, label %321, label %325
321: ; preds = %316
%322 = load i32, i32* %55
%323 = icmp ne i32 %322, 2
br i1 %323, label %324, label %325
324: ; preds = %321
br label %347
325: ; preds = %321, %316
%326 = load double, double* %31
%327 = load double*, double** %24
store double %326, double* %327
%328 = load double, double* %45
store double %328, double* %47
store i32 0, i32* %48
%329 = load double*, double** %24
%330 = load double, double* %329
%331 = load double, double* %32
%332 = call double @llvm.fmuladd.f64(double 1.000000e+01, double %331, double %330)
%333 = load double, double* %21
%334 = fcmp ole double %332, %333
br i1 %334, label %345, label %335
335: ; preds = %325
%336 = load double*, double** %24
%337 = load double, double* %336
%338 = load double, double* %21
%339 = fcmp ole double %337, %338
br i1 %339, label %340, label %346
340: ; preds = %335
%341 = load double, double* %32
%342 = fmul double 1.000000e+01, %341
%343 = load double, double* %21
%344 = fcmp oge double %342, %343
br i1 %344, label %345, label %346
345: ; preds = %340, %325
br label %367
346: ; preds = %340, %335
br label %347
347: ; preds = %346, %324
%348 = load i32*, i32** %26
%349 = load i32, i32* %348
%350 = icmp ne i32 %349, 0
br i1 %350, label %351, label %356
351: ; preds = %347
%352 = load i32*, i32** %26
%353 = load i32, i32* %352
%354 = icmp ne i32 %353, 7
br i1 %354, label %355, label %356
355: ; preds = %351
br label %367
356: ; preds = %351, %347
br label %357
357: ; preds = %356, %290, %269
%358 = load i32, i32* %54
store i32 %358, i32* %50
%359 = load double, double* %35
store double %359, double* %34
%360 = load double, double* %33
%361 = load double, double* %35
%362 = fadd double %361, %360
store double %362, double* %35
br label %363
363: ; preds = %357
%364 = load i32, i32* %55
%365 = add nsw i32 %364, 1
store i32 %365, i32* %55
br label %140
366: ; preds = %140
br label %367
367: ; preds = %366, %355, %345
%368 = load double, double* %32
%369 = load double*, double** %24
%370 = load double, double* %369
%371 = call double @llvm.fmuladd.f64(double 1.000000e+01, double %368, double %370)
store double %371, double* %369
%372 = load i32*, i32** %26
%373 = load i32, i32* %372
%374 = icmp eq i32 %373, 0
br i1 %374, label %375, label %376
375: ; preds = %367
br label %440
376: ; preds = %367
%377 = load double, double* %47
%378 = fcmp une double %377, 0.000000e+00
br i1 %378, label %379, label %386
379: ; preds = %376
%380 = load i32, i32* %54
%381 = sext i32 %380 to i64
%382 = getelementptr inbounds [52 x double], [52 x double]* %44, i64 0, i64 %381
%383 = load double, double* %382
%384 = fcmp une double %383, 0.000000e+00
br i1 %384, label %385, label %386
385: ; preds = %379
br label %400
386: ; preds = %379, %376
%387 = load double*, double** %24
%388 = load double, double* %387
%389 = load double, double* %41
%390 = fcmp ogt double %388, %389
br i1 %390, label %391, label %392
391: ; preds = %386
br label %431
392: ; preds = %386
%393 = load i32, i32* %54
%394 = sext i32 %393 to i64
%395 = getelementptr inbounds [52 x double], [52 x double]* %44, i64 0, i64 %394
%396 = load double, double* %395
%397 = fcmp oeq double %396, 0.000000e+00
br i1 %397, label %398, label %399
398: ; preds = %392
br label %440
399: ; preds = %392
br label %400
400: ; preds = %399, %385
%401 = load double*, double** %24
%402 = load double, double* %401
%403 = load double, double* %47
%404 = call double @llvm.fabs.f64(double %403)
%405 = fdiv double %402, %404
%406 = load double, double* %41
%407 = load double, double* %37
%408 = fadd double %406, %407
%409 = load i32, i32* %54
%410 = sext i32 %409 to i64
%411 = getelementptr inbounds [52 x double], [52 x double]* %44, i64 0, i64 %410
%412 = load double, double* %411
%413 = call double @llvm.fabs.f64(double %412)
%414 = fdiv double %408, %413
%415 = fcmp ogt double %405, %414
br i1 %415, label %416, label %417
416: ; preds = %400
br label %431
417: ; preds = %400
%418 = load i32*, i32** %26
%419 = load i32, i32* %418
%420 = icmp sge i32 %419, 1
br i1 %420, label %421, label %430
421: ; preds = %417
%422 = load i32*, i32** %26
%423 = load i32, i32* %422
%424 = icmp ne i32 %423, 7
br i1 %424, label %425, label %430
425: ; preds = %421
%426 = load double, double* %37
%427 = load double*, double** %24
%428 = load double, double* %427
%429 = fadd double %428, %426
store double %429, double* %427
br label %430
430: ; preds = %425, %421, %417
br label %440
431: ; preds = %416, %391, %262, %200
%432 = load i32, i32* %54
%433 = sext i32 %432 to i64
%434 = getelementptr inbounds [52 x double], [52 x double]* %44, i64 0, i64 %433
%435 = load double, double* %434
store double %435, double* %47
%436 = load double, double* %41
%437 = load double, double* %37
%438 = fadd double %436, %437
%439 = load double*, double** %24
store double %438, double* %439
br label %440
440: ; preds = %431, %430, %398, %375, %92, %76
%441 = load double, double* %47
ret double %441
}

LLVM IR (-O2):
@M_PI = global double 0.000000e+00
@DBL_MIN = global double 0.000000e+00
define double @dqawfe(double (double, i8*)* %0, i8* %1, double %2, double %3, i32 %4, double %5, i32 %6, i32 %7, double* %8, i32* %9, i32* %10, double* nocapture %11, double* %12, i32* %13, double** %14) {
%16 = alloca double
%17 = alloca [52 x double]
%18 = alloca [3 x double]
%19 = alloca i32
%20 = alloca i32
%21 = alloca i32
%22 = alloca i32
%23 = bitcast double* %16 to i8*
%24 = bitcast [52 x double]* %17 to i8*
%25 = bitcast [3 x double]* %18 to i8*
%26 = bitcast i32* %19 to i8*
%27 = bitcast i32* %20 to i8*
%28 = bitcast i32* %21 to i8*
%29 = bitcast i32* %22 to i8*
store double 0.000000e+00, double* %8
store i32 0, i32* %9
%30 = add i32 %4, -3
%31 = icmp ult i32 %30, -2
%32 = fcmp ole double %5, 0.000000e+00
%33 = or i1 %31, %32
%34 = icmp slt i32 %6, 3
%35 = or i1 %33, %34
%36 = select i1 %35, i32 6, i32 0
store i32 %36, i32* %10
br i1 %35, label %215, label %37
37: ; preds = %15
%38 = fcmp une double %3, 0.000000e+00
br i1 %38, label %48, label %39
39: ; preds = %37
%40 = icmp eq i32 %4, 1
br i1 %40, label %41, label %44
41: ; preds = %39
%42 = tail call double @dqagi(double (double, i8*)* %0, i8* %1, double 0.000000e+00, i32 1, double %5, double 0.000000e+00, double* %8, i32* %9, i32* %10)
%43 = load i32, i32* %10
br label %44
44: ; preds = %41, %39
%45 = phi i32 [ %43, %41 ], [ 0, %39 ]
%46 = phi double [ %42, %41 ], [ 0.000000e+00, %39 ]
store double %46, double* %11
%47 = load double, double* %8
store double %47, double* %12
store i32 %45, i32* %13
br label %215
48: ; preds = %37
%49 = getelementptr inbounds [3 x double], [3 x double]* %18, i64 0, i64 0
%50 = bitcast [3 x double]* %18 to i8*
%51 = tail call i64 @abs(double %3)
%52 = trunc i64 %51 to i32
%53 = shl nsw i32 %52, 1
%54 = or i32 %53, 1
%55 = sitofp i32 %54 to double
%56 = load double, double* @M_PI
%57 = fmul double %56, %55
%58 = tail call double @llvm.fabs.f64(double %3)
%59 = fdiv double %57, %58
store i32 0, i32* %10
store i32 0, i32* %9
store i32 -1, i32* %22
store i32 0, i32* %21
%60 = load double, double* @DBL_MIN
%61 = fdiv double %60, 0x3FB9999999999998
%62 = fcmp olt double %61, %5
%63 = fmul double %5, 0x3FB9999999999998
%64 = select i1 %62, double %63, double %5
store double 0.000000e+00, double* %8
%65 = add nsw i32 %6, -1
%66 = getelementptr inbounds [52 x double], [52 x double]* %17, i64 0, i64 0
%67 = zext i32 %65 to i64
%68 = zext i32 %6 to i64
br label %69
69: ; preds = %48, %160
%70 = phi i64 [ 0, %48 ], [ %81, %160 ]
%71 = phi i32 [ 0, %48 ], [ %163, %160 ]
%72 = phi double [ 0.000000e+00, %48 ], [ %101, %160 ]
%73 = phi i32 [ 0, %48 ], [ %162, %160 ]
%74 = phi double [ 0.000000e+00, %48 ], [ %161, %160 ]
%75 = phi double [ %2, %48 ], [ %79, %160 ]
%76 = phi double [ 1.000000e+00, %48 ], [ %90, %160 ]
%77 = phi double [ 0.000000e+00, %48 ], [ %92, %160 ]
%78 = phi double [ %64, %48 ], [ %107, %160 ]
%79 = fadd double %59, %75
%80 = fmul double %78, %76
%81 = add nuw nsw i64 %70, 1
%82 = getelementptr inbounds double, double* %12, i64 %70
%83 = getelementptr inbounds i32, i32* %13, i64 %70
%84 = trunc i64 %81 to i32
%85 = call double @dqfour(double (double, i8*)* %0, i8* %1, double %75, double %79, double %3, i32 %4, double %80, double 0.000000e+00, i32 %84, i32 %7, double* %82, i32* %20, i32* %83, i32* %19, double** %14)
%86 = getelementptr inbounds double, double* %11, i64 %70
store double %85, double* %86
%87 = load i32, i32* %20
%88 = load i32, i32* %9
%89 = add nsw i32 %88, %87
store i32 %89, i32* %9
%90 = fmul double %76, 9.000000e-01
%91 = load double, double* %82
%92 = fadd double %77, %91
%93 = call double @llvm.fabs.f64(double %85)
%94 = fmul double %93, 5.000000e+01
%95 = fadd double %94, %92
%96 = fcmp ole double %95, %5
%97 = icmp ugt i64 %70, 4
%98 = and i1 %97, %96
br i1 %98, label %209, label %99
99: ; preds = %69
%100 = fcmp ogt double %72, %91
%101 = select i1 %100, double %72, double %91
%102 = load i32, i32* %83
%103 = icmp eq i32 %102, 0
%104 = fmul double %101, 0x3FB9999999999998
%105 = fcmp ogt double %64, %104
%106 = select i1 %105, double %64, double %104
%107 = select i1 %103, double %78, double %106
br i1 %103, label %109, label %108
108: ; preds = %99
store i32 7, i32* %10
br label %112
109: ; preds = %99
%110 = load i32, i32* %10
%111 = icmp eq i32 %110, 7
br i1 %111, label %112, label %116
112: ; preds = %108, %109
%113 = fmul double %101, 1.000000e+01
%114 = fcmp ole double %95, %113
%115 = and i1 %97, %114
br i1 %115, label %209, label %116
116: ; preds = %112, %109
%117 = load i32, i32* %22
%118 = add nsw i32 %117, 1
store i32 %118, i32* %22
%119 = icmp eq i64 %70, 0
br i1 %119, label %120, label %122
120: ; preds = %116
%121 = load double, double* %11
store double %121, double* %66
br label %160
122: ; preds = %116
%123 = sext i32 %71 to i64
%124 = getelementptr inbounds [52 x double], [52 x double]* %17, i64 0, i64 %123
%125 = load double, double* %124
%126 = fadd double %85, %125
%127 = sext i32 %118 to i64
%128 = getelementptr inbounds [52 x double], [52 x double]* %17, i64 0, i64 %127
store double %126, double* %128
%129 = icmp eq i64 %70, 1
br i1 %129, label %160, label %130
130: ; preds = %122
%131 = icmp eq i64 %70, %67
br i1 %131, label %132, label %133
132: ; preds = %130
store i32 8, i32* %10
br label %133
133: ; preds = %132, %130
%134 = call double @dqext(i32* %22, double* %66, double* %16, double* %49, i32* %21)
%135 = add nsw i32 %73, 1
%136 = icmp slt i32 %73, 14
%137 = load double, double* %8
%138 = fmul double %95, 1.000000e-03
%139 = fcmp ugt double %137, %138
%140 = select i1 %136, i1 true, i1 %139
br i1 %140, label %142, label %141
141: ; preds = %133
store i32 9, i32* %10
br label %142
142: ; preds = %133, %141
%143 = load double, double* %16
%144 = fcmp ogt double %143, %137
%145 = icmp ne i64 %70, 2
%146 = and i1 %145, %144
br i1 %146, label %155, label %147
147: ; preds = %142
store double %143, double* %8
%148 = call double @llvm.fmuladd.f64(double %101, double 1.000000e+01, double %143)
%149 = fcmp ugt double %148, %5
br i1 %149, label %150, label %167
150: ; preds = %147
%151 = fcmp ugt double %143, %5
%152 = fmul double %101, 1.000000e+01
%153 = fcmp ult double %152, %5
%154 = select i1 %151, i1 true, i1 %153
br i1 %154, label %155, label %167
155: ; preds = %150, %142
%156 = phi double [ %137, %142 ], [ %143, %150 ]
%157 = phi double [ %74, %142 ], [ %134, %150 ]
%158 = phi i32 [ %135, %142 ], [ 0, %150 ]
%159 = load i32, i32* %10
switch i32 %159, label %167 [
i32 0, label %160
i32 7, label %160
]
160: ; preds = %155, %155, %122, %120
%161 = phi double [ %74, %122 ], [ %157, %155 ], [ %74, %120 ], [ %157, %155 ]
%162 = phi i32 [ %73, %122 ], [ %158, %155 ], [ %73, %120 ], [ %158, %155 ]
%163 = load i32, i32* %22
%164 = icmp eq i64 %81, %68
br i1 %164, label %165, label %69
165: ; preds = %160
%166 = load double, double* %8
br label %167
167: ; preds = %147, %150, %155, %165
%168 = phi double [ %166, %165 ], [ %143, %147 ], [ %143, %150 ], [ %156, %155 ]
%169 = phi double [ %161, %165 ], [ %134, %147 ], [ %134, %150 ], [ %157, %155 ]
%170 = call double @llvm.fmuladd.f64(double %101, double 1.000000e+01, double %168)
store double %170, double* %8
%171 = load i32, i32* %10
%172 = icmp eq i32 %171, 0
br i1 %172, label %215, label %173
173: ; preds = %167
%174 = fcmp une double %169, 0.000000e+00
br i1 %174, label %175, label %181
175: ; preds = %173
%176 = load i32, i32* %22
%177 = sext i32 %176 to i64
%178 = getelementptr inbounds [52 x double], [52 x double]* %17, i64 0, i64 %177
%179 = load double, double* %178
%180 = fcmp une double %179, 0.000000e+00
br i1 %180, label %191, label %181
181: ; preds = %175, %173
%182 = fcmp ogt double %170, %92
br i1 %182, label %183, label %185
183: ; preds = %181
%184 = fadd double %94, %92
br label %209
185: ; preds = %181
%186 = load i32, i32* %22
%187 = sext i32 %186 to i64
%188 = getelementptr inbounds [52 x double], [52 x double]* %17, i64 0, i64 %187
%189 = load double, double* %188
%190 = fcmp oeq double %189, 0.000000e+00
br i1 %190, label %215, label %191
191: ; preds = %185, %175
%192 = phi double [ %189, %185 ], [ %179, %175 ]
%193 = fadd double %94, %92
%194 = insertelement <2 x double> poison, double %169, i64 0
%195 = insertelement <2 x double> %194, double %192, i64 1
%196 = call <2 x double> @llvm.fabs.v2f64(<2 x double> %195)
%197 = insertelement <2 x double> poison, double %170, i64 0
%198 = insertelement <2 x double> %197, double %193, i64 1
%199 = fdiv <2 x double> %198, %196
%200 = extractelement <2 x double> %199, i64 0
%201 = extractelement <2 x double> %199, i64 1
%202 = fcmp ogt double %200, %201
br i1 %202, label %209, label %203
203: ; preds = %191
%204 = icmp slt i32 %171, 1
%205 = icmp eq i32 %171, 7
%206 = or i1 %204, %205
br i1 %206, label %215, label %207
207: ; preds = %203
%208 = fadd double %94, %170
store double %208, double* %8
br label %215
209: ; preds = %112, %69, %183, %191
%210 = phi double [ %184, %183 ], [ %193, %191 ], [ %95, %69 ], [ %95, %112 ]
%211 = load i32, i32* %22
%212 = sext i32 %211 to i64
%213 = getelementptr inbounds [52 x double], [52 x double]* %17, i64 0, i64 %212
%214 = load double, double* %213
store double %210, double* %8
br label %215
215: ; preds = %203, %207, %185, %167, %15, %209, %44
%216 = phi double [ 0.000000e+00, %15 ], [ %214, %209 ], [ %169, %167 ], [ %169, %207 ], [ %169, %203 ], [ %169, %185 ], [ %46, %44 ]
ret double %216
}