#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 */
struct osn_context {
  int dummy;
};

/* Variables and functions */
double extrapolate2(struct osn_context const *, int, int, double, double);
int fastFloor(double);
double open_simplex_noise2(const struct osn_context *ctx, double x, double y) {
  double stretchOffset = (x + y) * (-0.211324865405187);
  double xs = x + stretchOffset;
  double ys = y + stretchOffset;
  int xsb = fastFloor(xs);
  int ysb = fastFloor(ys);
  double squishOffset = (xsb + ysb) * (0.366025403784439);
  double xb = xsb + squishOffset;
  double yb = ysb + squishOffset;
  double xins = xs - xsb;
  double yins = ys - ysb;
  double inSum = xins + yins;
  double dx0 = x - xb;
  double dy0 = y - yb;
  double dx_ext, dy_ext;
  int xsv_ext, ysv_ext;
  double dx1;
  double dy1;
  double attn1;
  double dx2;
  double dy2;
  double attn2;
  double zins;
  double attn0;
  double attn_ext;
  double value = 0;
  dx1 = dx0 - 1 - (0.366025403784439);
  dy1 = dy0 - 0 - (0.366025403784439);
  attn1 = 2 - dx1 * dx1 - dy1 * dy1;
  if (attn1 > 0) {
    attn1 *= attn1;
    value += attn1 * attn1 * extrapolate2(ctx, xsb + 1, ysb + 0, dx1, dy1);
  }
  dx2 = dx0 - 0 - (0.366025403784439);
  dy2 = dy0 - 1 - (0.366025403784439);
  attn2 = 2 - dx2 * dx2 - dy2 * dy2;
  if (attn2 > 0) {
    attn2 *= attn2;
    value += attn2 * attn2 * extrapolate2(ctx, xsb + 0, ysb + 1, dx2, dy2);
  }
  if (inSum <= 1) {
    zins = 1 - inSum;
    if (zins > xins || zins > yins) {
      if (xins > yins) {
        xsv_ext = xsb + 1;
        ysv_ext = ysb - 1;
        dx_ext = dx0 - 1;
        dy_ext = dy0 + 1;
      } else {
        xsv_ext = xsb - 1;
        ysv_ext = ysb + 1;
        dx_ext = dx0 + 1;
        dy_ext = dy0 - 1;
      }
    } else {
      xsv_ext = xsb + 1;
      ysv_ext = ysb + 1;
      dx_ext = dx0 - 1 - 2 * (0.366025403784439);
      dy_ext = dy0 - 1 - 2 * (0.366025403784439);
    }
  } else {
    zins = 2 - inSum;
    if (zins < xins || zins < yins) {
      if (xins > yins) {
        xsv_ext = xsb + 2;
        ysv_ext = ysb + 0;
        dx_ext = dx0 - 2 - 2 * (0.366025403784439);
        dy_ext = dy0 + 0 - 2 * (0.366025403784439);
      } else {
        xsv_ext = xsb + 0;
        ysv_ext = ysb + 2;
        dx_ext = dx0 + 0 - 2 * (0.366025403784439);
        dy_ext = dy0 - 2 - 2 * (0.366025403784439);
      }
    } else {
      dx_ext = dx0;
      dy_ext = dy0;
      xsv_ext = xsb;
      ysv_ext = ysb;
    }
    xsb += 1;
    ysb += 1;
    dx0 = dx0 - 1 - 2 * (0.366025403784439);
    dy0 = dy0 - 1 - 2 * (0.366025403784439);
  }
  attn0 = 2 - dx0 * dx0 - dy0 * dy0;
  if (attn0 > 0) {
    attn0 *= attn0;
    value += attn0 * attn0 * extrapolate2(ctx, xsb, ysb, dx0, dy0);
  }
  attn_ext = 2 - dx_ext * dx_ext - dy_ext * dy_ext;
  if (attn_ext > 0) {
    attn_ext *= attn_ext;
    value += attn_ext * attn_ext *
             extrapolate2(ctx, xsv_ext, ysv_ext, dx_ext, dy_ext);
  }
  return value / (47.0);
}


x86 assembly (clang, -O0):
<open_simplex_noise2>:
push   %rbp
mov    %rsp,%rbp
sub    $0x100,%rsp
mov    %rdi,-0x8(%rbp)
movsd  %xmm0,-0x10(%rbp)
movsd  %xmm1,-0x18(%rbp)
movsd  -0x10(%rbp),%xmm0
addsd  -0x18(%rbp),%xmm0
movsd  0xecd(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0x10(%rbp),%xmm0
addsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x18(%rbp),%xmm0
addsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x28(%rbp),%xmm0
call   1030 <fastFloor@plt>
mov    %eax,-0x34(%rbp)
movsd  -0x30(%rbp),%xmm0
call   1030 <fastFloor@plt>
mov    %eax,-0x38(%rbp)
mov    -0x34(%rbp),%eax
add    -0x38(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  0xe6a(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
cvtsi2sdl -0x34(%rbp),%xmm0
addsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
cvtsi2sdl -0x38(%rbp),%xmm0
addsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x28(%rbp),%xmm0
cvtsi2sdl -0x34(%rbp),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x30(%rbp),%xmm0
cvtsi2sdl -0x38(%rbp),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x58(%rbp),%xmm0
addsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x10(%rbp),%xmm0
subsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x18(%rbp),%xmm0
subsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movsd  0xde0(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  0xdcc(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
xorps  %xmm1,%xmm1
subsd  %xmm1,%xmm0
movsd  0xdac(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x98(%rbp),%xmm1
ff
movsd  -0x98(%rbp),%xmm0
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm0,%xmm1
movsd  0xd65(%rip),%xmm0
addsd  %xmm0,%xmm1
movsd  -0xa0(%rbp),%xmm0
ff
movsd  -0xa0(%rbp),%xmm2
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1363 <open_simplex_noise2+0x243>
movsd  -0xa8(%rbp),%xmm0
ff
mulsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
mulsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0xe8(%rbp)
ff
mov    -0x8(%rbp),%rdi
mov    -0x34(%rbp),%esi
add    $0x1,%esi
mov    -0x38(%rbp),%edx
add    $0x0,%edx
movsd  -0x98(%rbp),%xmm0
ff
movsd  -0xa0(%rbp),%xmm1
ff
call   1040 <extrapolate2@plt>
movaps %xmm0,%xmm2
movsd  -0xe8(%rbp),%xmm0
ff
movsd  -0xe0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
xorps  %xmm1,%xmm1
subsd  %xmm1,%xmm0
movsd  0xc91(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
movsd  0xc80(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  0xc6c(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0xb0(%rbp),%xmm1
ff
movsd  -0xb0(%rbp),%xmm0
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm0,%xmm1
movsd  0xc25(%rip),%xmm0
addsd  %xmm0,%xmm1
movsd  -0xb8(%rbp),%xmm0
ff
movsd  -0xb8(%rbp),%xmm2
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    14a3 <open_simplex_noise2+0x383>
movsd  -0xc0(%rbp),%xmm0
ff
mulsd  -0xc0(%rbp),%xmm0
ff
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
mulsd  -0xc0(%rbp),%xmm0
ff
movsd  %xmm0,-0xf0(%rbp)
ff
mov    -0x8(%rbp),%rdi
mov    -0x34(%rbp),%esi
add    $0x0,%esi
mov    -0x38(%rbp),%edx
add    $0x1,%edx
movsd  -0xb0(%rbp),%xmm0
ff
movsd  -0xb8(%rbp),%xmm1
ff
call   1040 <extrapolate2@plt>
movaps %xmm0,%xmm2
movsd  -0xf0(%rbp),%xmm0
ff
movsd  -0xe0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  0xb65(%rip),%xmm0
ucomisd -0x68(%rbp),%xmm0
jb     15f5 <open_simplex_noise2+0x4d5>
movsd  0xb52(%rip),%xmm0
subsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
ucomisd -0x58(%rbp),%xmm0
ja     14f1 <open_simplex_noise2+0x3d1>
movsd  -0xc8(%rbp),%xmm0
ff
ucomisd -0x60(%rbp),%xmm0
jbe    1591 <open_simplex_noise2+0x471>
movsd  -0x58(%rbp),%xmm0
ucomisd -0x60(%rbp),%xmm0
jbe    1549 <open_simplex_noise2+0x429>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8c(%rbp)
mov    -0x38(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x90(%rbp)
movsd  -0x70(%rbp),%xmm0
movsd  0xaea(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  0xad9(%rip),%xmm0
addsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
jmp    158c <open_simplex_noise2+0x46c>
mov    -0x34(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x8c(%rbp)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x90(%rbp)
movsd  0xaa7(%rip),%xmm0
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x78(%rbp),%xmm0
movsd  0xa90(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
jmp    15f0 <open_simplex_noise2+0x4d0>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8c(%rbp)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x90(%rbp)
movsd  -0x70(%rbp),%xmm0
movsd  0xa5a(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  0xa5e(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x78(%rbp),%xmm0
movsd  0xa38(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  0xa3c(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
jmp    177d <open_simplex_noise2+0x65d>
movsd  0xa03(%rip),%xmm0
subsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0xc8(%rbp),%xmm1
ff
movsd  -0x58(%rbp),%xmm0
ucomisd %xmm1,%xmm0
ja     1638 <open_simplex_noise2+0x518>
movsd  -0xc8(%rbp),%xmm1
ff
movsd  -0x60(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    16fe <open_simplex_noise2+0x5de>
movsd  -0x58(%rbp),%xmm0
ucomisd -0x60(%rbp),%xmm0
jbe    16a3 <open_simplex_noise2+0x583>
mov    -0x34(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x8c(%rbp)
mov    -0x38(%rbp),%eax
add    $0x0,%eax
mov    %eax,-0x90(%rbp)
movsd  -0x70(%rbp),%xmm0
movsd  0x993(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  0x9a7(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
xorps  %xmm0,%xmm0
addsd  -0x78(%rbp),%xmm0
movsd  0x98e(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
jmp    16f9 <open_simplex_noise2+0x5d9>
mov    -0x34(%rbp),%eax
add    $0x0,%eax
mov    %eax,-0x8c(%rbp)
mov    -0x38(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x90(%rbp)
xorps  %xmm0,%xmm0
addsd  -0x70(%rbp),%xmm0
movsd  0x955(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x78(%rbp),%xmm0
movsd  0x91f(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  0x933(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
jmp    1727 <open_simplex_noise2+0x607>
movsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x34(%rbp),%eax
mov    %eax,-0x8c(%rbp)
mov    -0x38(%rbp),%eax
mov    %eax,-0x90(%rbp)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
movsd  -0x70(%rbp),%xmm0
movsd  0x8ca(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  0x8ce(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x78(%rbp),%xmm0
movsd  0x8a8(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  0x8ac(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x70(%rbp),%xmm1
movsd  -0x70(%rbp),%xmm0
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm0,%xmm1
movsd  0x856(%rip),%xmm0
addsd  %xmm0,%xmm1
movsd  -0x78(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1860 <open_simplex_noise2+0x740>
movsd  -0xd0(%rbp),%xmm0
ff
mulsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
mulsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0xf8(%rbp)
ff
mov    -0x8(%rbp),%rdi
mov    -0x34(%rbp),%esi
mov    -0x38(%rbp),%edx
movsd  -0x70(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm1
call   1040 <extrapolate2@plt>
movaps %xmm0,%xmm2
movsd  -0xf8(%rbp),%xmm0
ff
movsd  -0xe0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x80(%rbp),%xmm1
movsd  -0x80(%rbp),%xmm0
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm0,%xmm1
movsd  0x773(%rip),%xmm0
addsd  %xmm0,%xmm1
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0x88(%rbp),%xmm2
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xd8(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1952 <open_simplex_noise2+0x832>
movsd  -0xd8(%rbp),%xmm0
ff
mulsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xd8(%rbp),%xmm0
ff
mulsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0x100(%rbp)
ff
mov    -0x8(%rbp),%rdi
mov    -0x8c(%rbp),%esi
mov    -0x90(%rbp),%edx
movsd  -0x80(%rbp),%xmm0
movsd  -0x88(%rbp),%xmm1
ff
call   1040 <extrapolate2@plt>
movaps %xmm0,%xmm2
movsd  -0x100(%rbp),%xmm0
ff
movsd  -0xe0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0xe0(%rbp),%xmm0
ff
movsd  0x6c6(%rip),%xmm1
divsd  %xmm1,%xmm0
add    $0x100,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<open_simplex_noise2>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
sub    $0x90,%rsp
movapd %xmm0,0x20(%rsp)
mov    %rdi,%r14
movapd %xmm0,%xmm2
movapd %xmm1,(%rsp)
addsd  %xmm1,%xmm2
mulsd  0xeb3(%rip),%xmm2
movapd %xmm2,%xmm3
addsd  %xmm0,%xmm3
movapd %xmm3,0x30(%rsp)
addsd  %xmm1,%xmm2
movapd %xmm2,0x10(%rsp)
movapd %xmm3,%xmm0
call   1030 <fastFloor@plt>
mov    %eax,%r15d
movaps 0x10(%rsp),%xmm0
call   1030 <fastFloor@plt>
movapd 0x30(%rsp),%xmm10
movapd 0x10(%rsp),%xmm8
movapd 0x20(%rsp),%xmm4
mov    %eax,%ebx
lea    (%rbx,%r15,1),%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0xe64(%rip),%xmm0
movd   %r15d,%xmm1
movd   %ebx,%xmm2
punpckldq %xmm2,%xmm1
cvtdq2pd %xmm1,%xmm1
unpcklpd %xmm0,%xmm0
addpd  %xmm1,%xmm0
subsd  %xmm1,%xmm10
unpckhpd %xmm1,%xmm1
subsd  %xmm1,%xmm8
unpcklpd (%rsp),%xmm4
subpd  %xmm0,%xmm4
movsd  0xe34(%rip),%xmm0
addsd  %xmm4,%xmm0
movsd  0xe30(%rip),%xmm6
movapd %xmm0,0x40(%rsp)
addsd  %xmm6,%xmm0
movapd %xmm4,%xmm9
unpckhpd %xmm4,%xmm9
movapd %xmm9,%xmm1
addsd  %xmm6,%xmm1
movapd %xmm0,%xmm2
mulsd  %xmm0,%xmm2
movsd  0xe0b(%rip),%xmm5
movapd %xmm5,%xmm3
subsd  %xmm2,%xmm3
movapd %xmm1,%xmm2
mulsd  %xmm1,%xmm2
subsd  %xmm2,%xmm3
xorpd  %xmm2,%xmm2
ucomisd %xmm2,%xmm3
xorpd  %xmm11,%xmm11
movapd %xmm4,0x20(%rsp)
movapd %xmm9,0x60(%rsp)
movapd %xmm8,0x10(%rsp)
movapd %xmm10,0x30(%rsp)
jbe    12ac <open_simplex_noise2+0x18c>
mulsd  %xmm3,%xmm3
mulsd  %xmm3,%xmm3
movsd  %xmm3,(%rsp)
lea    0x1(%r15),%esi
mov    %r14,%rdi
mov    %ebx,%edx
call   1040 <extrapolate2@plt>
xorpd  %xmm2,%xmm2
movsd  0xd9e(%rip),%xmm6
movapd 0x30(%rsp),%xmm10
movapd 0x10(%rsp),%xmm8
movapd 0x60(%rsp),%xmm9
movapd 0x20(%rsp),%xmm4
movsd  0xd83(%rip),%xmm5
mulsd  (%rsp),%xmm0
xorpd  %xmm11,%xmm11
addsd  %xmm0,%xmm11
movapd %xmm10,%xmm7
addsd  %xmm8,%xmm7
movapd %xmm4,%xmm0
addsd  %xmm6,%xmm0
movsd  0xd49(%rip),%xmm12
addsd  %xmm9,%xmm12
addsd  %xmm12,%xmm6
movapd %xmm0,%xmm1
mulsd  %xmm0,%xmm1
movapd %xmm5,%xmm3
subsd  %xmm1,%xmm3
movapd %xmm6,%xmm1
mulsd  %xmm6,%xmm1
subsd  %xmm1,%xmm3
ucomisd %xmm2,%xmm3
jbe    136d <open_simplex_noise2+0x24d>
mulsd  %xmm3,%xmm3
mulsd  %xmm3,%xmm3
movsd  %xmm3,0x58(%rsp)
lea    0x1(%rbx),%edx
mov    %r14,%rdi
mov    %r15d,%esi
movapd %xmm6,%xmm1
movsd  %xmm11,(%rsp)
movapd %xmm12,0x80(%rsp)
movapd %xmm7,0x70(%rsp)
call   1040 <extrapolate2@plt>
movapd 0x70(%rsp),%xmm7
movapd 0x80(%rsp),%xmm12
movapd 0x30(%rsp),%xmm10
movapd 0x10(%rsp),%xmm8
movapd 0x60(%rsp),%xmm9
movsd  (%rsp),%xmm11
movapd 0x20(%rsp),%xmm4
movsd  0xcbe(%rip),%xmm5
mulsd  0x58(%rsp),%xmm0
addsd  %xmm0,%xmm11
movsd  0xcb3(%rip),%xmm0
ucomisd %xmm7,%xmm0
jae    139b <open_simplex_noise2+0x27b>
movapd %xmm5,%xmm0
subsd  %xmm7,%xmm0
ucomisd %xmm0,%xmm10
ja     13d1 <open_simplex_noise2+0x2b1>
ucomisd %xmm0,%xmm8
ja     13d1 <open_simplex_noise2+0x2b1>
mov    %r15d,%r12d
mov    %ebx,%ebp
jmp    143e <open_simplex_noise2+0x31e>
subsd  %xmm7,%xmm0
ucomisd %xmm10,%xmm0
ja     13f4 <open_simplex_noise2+0x2d4>
ucomisd %xmm8,%xmm0
ja     13f4 <open_simplex_noise2+0x2d4>
mov    %r15d,%r12d
add    $0x1,%r12d
mov    %ebx,%ebp
add    $0x1,%ebp
movapd 0x40(%rsp),%xmm7
unpcklpd %xmm12,%xmm7
addpd  0xc84(%rip),%xmm7
jmp    1481 <open_simplex_noise2+0x361>
ucomisd %xmm8,%xmm10
jbe    1420 <open_simplex_noise2+0x300>
lea    0x2(%r15),%r12d
movsd  0xc4c(%rip),%xmm0
addpd  %xmm0,%xmm4
addpd  0xc60(%rip),%xmm4
mov    %ebx,%ebp
jmp    143e <open_simplex_noise2+0x31e>
mov    %r15d,%r12d
ucomisd %xmm8,%xmm10
jbe    1467 <open_simplex_noise2+0x347>
add    $0x1,%r12d
mov    %ebx,%ebp
add    $0xffffffff,%ebp
movsd  0xc19(%rip),%xmm0
addsd  %xmm9,%xmm0
movapd 0x40(%rsp),%xmm7
unpcklpd %xmm0,%xmm7
jmp    1481 <open_simplex_noise2+0x361>
xorpd  %xmm0,%xmm0
movhpd 0xc04(%rip),%xmm0
lea    0x2(%rbx),%ebp
addpd  %xmm0,%xmm4
addpd  0xc15(%rip),%xmm4
mov    %r15d,%r12d
movapd %xmm4,%xmm7
add    $0x1,%r15d
add    $0x1,%ebx
movsd  0xbe7(%rip),%xmm0
movapd 0x40(%rsp),%xmm4
addsd  %xmm0,%xmm4
addsd  %xmm0,%xmm12
movapd %xmm12,%xmm9
jmp    1481 <open_simplex_noise2+0x361>
add    $0xffffffff,%r12d
mov    %ebx,%ebp
add    $0x1,%ebp
movsd  0xbb0(%rip),%xmm7
addsd  %xmm4,%xmm7
unpcklpd %xmm12,%xmm7
movapd %xmm4,%xmm0
mulsd  %xmm4,%xmm0
movapd %xmm5,%xmm1
subsd  %xmm0,%xmm1
movapd %xmm9,%xmm0
mulsd  %xmm9,%xmm0
subsd  %xmm0,%xmm1
xorpd  %xmm2,%xmm2
ucomisd %xmm2,%xmm1
jbe    14fc <open_simplex_noise2+0x3dc>
mulsd  %xmm1,%xmm1
mulsd  %xmm1,%xmm1
movsd  %xmm1,0x20(%rsp)
mov    %r14,%rdi
mov    %r15d,%esi
mov    %ebx,%edx
movapd %xmm4,%xmm0
movapd %xmm9,%xmm1
movsd  %xmm11,(%rsp)
movapd %xmm7,0x10(%rsp)
call   1040 <extrapolate2@plt>
xorpd  %xmm2,%xmm2
movapd 0x10(%rsp),%xmm7
movsd  (%rsp),%xmm11
movsd  0xb2f(%rip),%xmm5
mulsd  0x20(%rsp),%xmm0
addsd  %xmm0,%xmm11
movapd %xmm7,%xmm0
mulsd  %xmm7,%xmm0
subsd  %xmm0,%xmm5
movapd %xmm7,%xmm1
unpckhpd %xmm7,%xmm1
movapd %xmm1,%xmm0
mulsd  %xmm1,%xmm0
subsd  %xmm0,%xmm5
ucomisd %xmm2,%xmm5
jbe    1558 <open_simplex_noise2+0x438>
mulsd  %xmm5,%xmm5
mulsd  %xmm5,%xmm5
movsd  %xmm5,0x10(%rsp)
mov    %r14,%rdi
mov    %r12d,%esi
mov    %ebp,%edx
movapd %xmm7,%xmm0
movsd  %xmm11,(%rsp)
call   1040 <extrapolate2@plt>
movsd  (%rsp),%xmm11
mulsd  0x10(%rsp),%xmm0
addsd  %xmm0,%xmm11
divsd  0xadf(%rip),%xmm11
movapd %xmm11,%xmm0
add    $0x90,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
%struct.osn_context = type { i32 }
define double @open_simplex_noise2(%struct.osn_context* %0, double %1, double %2) {
%4 = fadd double %1, %2
%5 = fmul double %4, 0xBFCB0CB174DF99C3
%6 = fadd double %5, %1
%7 = fadd double %5, %2
%8 = tail call i32 @fastFloor(double %6)
%9 = tail call i32 @fastFloor(double %7)
%10 = add nsw i32 %9, %8
%11 = sitofp i32 %10 to double
%12 = fmul double %11, 0x3FD76CF5D0B0995B
%13 = insertelement <2 x i32> poison, i32 %8, i64 0
%14 = insertelement <2 x i32> %13, i32 %9, i64 1
%15 = sitofp <2 x i32> %14 to <2 x double>
%16 = insertelement <2 x double> poison, double %12, i64 0
%17 = shufflevector <2 x double> %16, <2 x double> poison, <2 x i32> zeroinitializer
%18 = fadd <2 x double> %17, %15
%19 = extractelement <2 x double> %15, i64 0
%20 = fsub double %6, %19
%21 = extractelement <2 x double> %15, i64 1
%22 = fsub double %7, %21
%23 = fadd double %20, %22
%24 = insertelement <2 x double> poison, double %1, i64 0
%25 = insertelement <2 x double> %24, double %2, i64 1
%26 = fsub <2 x double> %25, %18
%27 = extractelement <2 x double> %26, i64 0
%28 = fadd double %27, -1.000000e+00
%29 = fadd double %28, 0xBFD76CF5D0B0995B
%30 = extractelement <2 x double> %26, i64 1
%31 = fadd double %30, 0xBFD76CF5D0B0995B
%32 = fneg double %29
%33 = tail call double @llvm.fmuladd.f64(double %32, double %29, double 2.000000e+00)
%34 = fneg double %31
%35 = tail call double @llvm.fmuladd.f64(double %34, double %31, double %33)
%36 = fcmp ogt double %35, 0.000000e+00
br i1 %36, label %37, label %43
37: ; preds = %3
%38 = fmul double %35, %35
%39 = fmul double %38, %38
%40 = add nsw i32 %8, 1
%41 = tail call double @extrapolate2(%struct.osn_context* %0, i32 %40, i32 %9, double %29, double %31)
%42 = tail call double @llvm.fmuladd.f64(double %39, double %41, double 0.000000e+00)
br label %43
43: ; preds = %37, %3
%44 = phi double [ %42, %37 ], [ 0.000000e+00, %3 ]
%45 = fadd double %27, 0xBFD76CF5D0B0995B
%46 = fadd double %30, -1.000000e+00
%47 = fadd double %46, 0xBFD76CF5D0B0995B
%48 = fneg double %45
%49 = tail call double @llvm.fmuladd.f64(double %48, double %45, double 2.000000e+00)
%50 = fneg double %47
%51 = tail call double @llvm.fmuladd.f64(double %50, double %47, double %49)
%52 = fcmp ogt double %51, 0.000000e+00
br i1 %52, label %53, label %59
53: ; preds = %43
%54 = fmul double %51, %51
%55 = fmul double %54, %54
%56 = add nsw i32 %9, 1
%57 = tail call double @extrapolate2(%struct.osn_context* %0, i32 %8, i32 %56, double %45, double %47)
%58 = tail call double @llvm.fmuladd.f64(double %55, double %57, double %44)
br label %59
59: ; preds = %53, %43
%60 = phi double [ %58, %53 ], [ %44, %43 ]
%61 = fcmp ugt double %23, 1.000000e+00
br i1 %61, label %87, label %62
62: ; preds = %59
%63 = fsub double 1.000000e+00, %23
%64 = fcmp ogt double %63, %20
%65 = fcmp ogt double %63, %22
%66 = select i1 %64, i1 true, i1 %65
br i1 %66, label %67, label %81
67: ; preds = %62
%68 = fcmp ogt double %20, %22
br i1 %68, label %69, label %75
69: ; preds = %67
%70 = add nsw i32 %8, 1
%71 = add nsw i32 %9, -1
%72 = fadd double %30, 1.000000e+00
%73 = insertelement <2 x double> poison, double %28, i64 0
%74 = insertelement <2 x double> %73, double %72, i64 1
br label %110
75: ; preds = %67
%76 = add nsw i32 %8, -1
%77 = add nsw i32 %9, 1
%78 = fadd double %27, 1.000000e+00
%79 = insertelement <2 x double> poison, double %46, i64 1
%80 = insertelement <2 x double> %79, double %78, i64 0
br label %110
81: ; preds = %62
%82 = add nsw i32 %8, 1
%83 = add nsw i32 %9, 1
%84 = insertelement <2 x double> poison, double %28, i64 0
%85 = insertelement <2 x double> %84, double %46, i64 1
%86 = fadd <2 x double> %85, <double 0xBFE76CF5D0B0995B, double 0xBFE76CF5D0B0995B>
br label %110
87: ; preds = %59
%88 = fsub double 2.000000e+00, %23
%89 = fcmp olt double %88, %20
%90 = fcmp olt double %88, %22
%91 = select i1 %89, i1 true, i1 %90
br i1 %91, label %92, label %102
92: ; preds = %87
%93 = fcmp ogt double %20, %22
br i1 %93, label %94, label %98
94: ; preds = %92
%95 = add nsw i32 %8, 2
%96 = fadd <2 x double> %26, <double -2.000000e+00, double 0.000000e+00>
%97 = fadd <2 x double> %96, <double 0xBFE76CF5D0B0995B, double 0xBFE76CF5D0B0995B>
br label %102
98: ; preds = %92
%99 = add nsw i32 %9, 2
%100 = fadd <2 x double> %26, <double 0.000000e+00, double -2.000000e+00>
%101 = fadd <2 x double> %100, <double 0xBFE76CF5D0B0995B, double 0xBFE76CF5D0B0995B>
br label %102
102: ; preds = %87, %94, %98
%103 = phi i32 [ %95, %94 ], [ %8, %98 ], [ %8, %87 ]
%104 = phi i32 [ %9, %94 ], [ %99, %98 ], [ %9, %87 ]
%105 = phi <2 x double> [ %97, %94 ], [ %101, %98 ], [ %26, %87 ]
%106 = add nsw i32 %8, 1
%107 = add nsw i32 %9, 1
%108 = fadd double %28, 0xBFE76CF5D0B0995B
%109 = fadd double %46, 0xBFE76CF5D0B0995B
br label %110
110: ; preds = %81, %75, %69, %102
%111 = phi i32 [ %70, %69 ], [ %76, %75 ], [ %82, %81 ], [ %103, %102 ]
%112 = phi i32 [ %71, %69 ], [ %77, %75 ], [ %83, %81 ], [ %104, %102 ]
%113 = phi double [ %30, %69 ], [ %30, %75 ], [ %30, %81 ], [ %109, %102 ]
%114 = phi double [ %27, %69 ], [ %27, %75 ], [ %27, %81 ], [ %108, %102 ]
%115 = phi i32 [ %9, %69 ], [ %9, %75 ], [ %9, %81 ], [ %107, %102 ]
%116 = phi i32 [ %8, %69 ], [ %8, %75 ], [ %8, %81 ], [ %106, %102 ]
%117 = phi <2 x double> [ %74, %69 ], [ %80, %75 ], [ %86, %81 ], [ %105, %102 ]
%118 = fneg double %114
%119 = tail call double @llvm.fmuladd.f64(double %118, double %114, double 2.000000e+00)
%120 = fneg double %113
%121 = tail call double @llvm.fmuladd.f64(double %120, double %113, double %119)
%122 = fcmp ogt double %121, 0.000000e+00
br i1 %122, label %123, label %128
123: ; preds = %110
%124 = fmul double %121, %121
%125 = fmul double %124, %124
%126 = tail call double @extrapolate2(%struct.osn_context* %0, i32 %116, i32 %115, double %114, double %113)
%127 = tail call double @llvm.fmuladd.f64(double %125, double %126, double %60)
br label %128
128: ; preds = %123, %110
%129 = phi double [ %127, %123 ], [ %60, %110 ]
%130 = extractelement <2 x double> %117, i64 0
%131 = fneg double %130
%132 = tail call double @llvm.fmuladd.f64(double %131, double %130, double 2.000000e+00)
%133 = extractelement <2 x double> %117, i64 1
%134 = fneg double %133
%135 = tail call double @llvm.fmuladd.f64(double %134, double %133, double %132)
%136 = fcmp ogt double %135, 0.000000e+00
br i1 %136, label %137, label %142
137: ; preds = %128
%138 = fmul double %135, %135
%139 = fmul double %138, %138
%140 = tail call double @extrapolate2(%struct.osn_context* %0, i32 %111, i32 %112, double %130, double %133)
%141 = tail call double @llvm.fmuladd.f64(double %139, double %140, double %129)
br label %142
142: ; preds = %137, %128
%143 = phi double [ %141, %137 ], [ %129, %128 ]
%144 = fdiv double %143, 4.700000e+01
ret double %144
}