#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 *, int, int, double, double);
int fastFloor(double);
double open_simplex_noise2(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 value = 0;
  double dx1 = dx0 - 1 - (0.366025403784439);
  double dy1 = dy0 - 0 - (0.366025403784439);
  double attn1 = 2 - dx1 * dx1 - dy1 * dy1;
  if (attn1 > 0) {
    attn1 *= attn1;
    value += attn1 * attn1 * extrapolate2(ctx, xsb + 1, ysb + 0, dx1, dy1);
  }
  double dx2 = dx0 - 0 - (0.366025403784439);
  double dy2 = dy0 - 1 - (0.366025403784439);
  double 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) {
    double 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 {
    double 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);
  }
  double attn0 = 2 - dx0 * dx0 - dy0 * dy0;
  if (attn0 > 0) {
    attn0 *= attn0;
    value += attn0 * attn0 * extrapolate2(ctx, xsb, ysb, dx0, dy0);
  }
  double 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    $0x110,%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,-0x98(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movsd  0xde0(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  0xdcc(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
xorps  %xmm1,%xmm1
subsd  %xmm1,%xmm0
movsd  0xdac(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0xa0(%rbp),%xmm1
ff
movsd  -0xa0(%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  -0xa8(%rbp),%xmm0
ff
movsd  -0xa8(%rbp),%xmm2
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1363 <open_simplex_noise2+0x243>
movsd  -0xb0(%rbp),%xmm0
ff
mulsd  -0xb0(%rbp),%xmm0
ff
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
mulsd  -0xb0(%rbp),%xmm0
ff
movsd  %xmm0,-0xf0(%rbp)
ff
mov    -0x8(%rbp),%rdi
mov    -0x34(%rbp),%esi
add    $0x1,%esi
mov    -0x38(%rbp),%edx
add    $0x0,%edx
movsd  -0xa0(%rbp),%xmm0
ff
movsd  -0xa8(%rbp),%xmm1
ff
call   1040 <extrapolate2@plt>
movaps %xmm0,%xmm2
movsd  -0xf0(%rbp),%xmm0
ff
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
xorps  %xmm1,%xmm1
subsd  %xmm1,%xmm0
movsd  0xc91(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
movsd  0xc80(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  0xc6c(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0xb8(%rbp),%xmm1
ff
movsd  -0xb8(%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  -0xc0(%rbp),%xmm0
ff
movsd  -0xc0(%rbp),%xmm2
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    14a3 <open_simplex_noise2+0x383>
movsd  -0xc8(%rbp),%xmm0
ff
mulsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
mulsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0xf8(%rbp)
ff
mov    -0x8(%rbp),%rdi
mov    -0x34(%rbp),%esi
add    $0x0,%esi
mov    -0x38(%rbp),%edx
add    $0x1,%edx
movsd  -0xb8(%rbp),%xmm0
ff
movsd  -0xc0(%rbp),%xmm1
ff
call   1040 <extrapolate2@plt>
movaps %xmm0,%xmm2
movsd  -0xf8(%rbp),%xmm0
ff
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%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,-0xd0(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
ucomisd -0x58(%rbp),%xmm0
ja     14f1 <open_simplex_noise2+0x3d1>
movsd  -0xd0(%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,-0xd8(%rbp)
ff
movsd  -0xd8(%rbp),%xmm1
ff
movsd  -0x58(%rbp),%xmm0
ucomisd %xmm1,%xmm0
ja     1638 <open_simplex_noise2+0x518>
movsd  -0xd8(%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,-0xe0(%rbp)
ff
movsd  -0xe0(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1860 <open_simplex_noise2+0x740>
movsd  -0xe0(%rbp),%xmm0
ff
mulsd  -0xe0(%rbp),%xmm0
ff
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0xe0(%rbp),%xmm0
ff
mulsd  -0xe0(%rbp),%xmm0
ff
movsd  %xmm0,-0x100(%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  -0x100(%rbp),%xmm0
ff
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%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,-0xe8(%rbp)
ff
movsd  -0xe8(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1952 <open_simplex_noise2+0x832>
movsd  -0xe8(%rbp),%xmm0
ff
mulsd  -0xe8(%rbp),%xmm0
ff
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0xe8(%rbp),%xmm0
ff
mulsd  -0xe8(%rbp),%xmm0
ff
movsd  %xmm0,-0x108(%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  -0x108(%rbp),%xmm0
ff
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
movsd  0x6c6(%rip),%xmm1
divsd  %xmm1,%xmm0
add    $0x110,%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
%34 = alloca double
store %struct.osn_context* %0, %struct.osn_context** %4
store double %1, double* %5
store double %2, double* %6
%35 = load double, double* %5
%36 = load double, double* %6
%37 = fadd double %35, %36
%38 = fmul double %37, 0xBFCB0CB174DF99C3
store double %38, double* %7
%39 = load double, double* %5
%40 = load double, double* %7
%41 = fadd double %39, %40
store double %41, double* %8
%42 = load double, double* %6
%43 = load double, double* %7
%44 = fadd double %42, %43
store double %44, double* %9
%45 = load double, double* %8
%46 = call i32 @fastFloor(double %45)
store i32 %46, i32* %10
%47 = load double, double* %9
%48 = call i32 @fastFloor(double %47)
store i32 %48, i32* %11
%49 = load i32, i32* %10
%50 = load i32, i32* %11
%51 = add nsw i32 %49, %50
%52 = sitofp i32 %51 to double
%53 = fmul double %52, 0x3FD76CF5D0B0995B
store double %53, double* %12
%54 = load i32, i32* %10
%55 = sitofp i32 %54 to double
%56 = load double, double* %12
%57 = fadd double %55, %56
store double %57, double* %13
%58 = load i32, i32* %11
%59 = sitofp i32 %58 to double
%60 = load double, double* %12
%61 = fadd double %59, %60
store double %61, double* %14
%62 = load double, double* %8
%63 = load i32, i32* %10
%64 = sitofp i32 %63 to double
%65 = fsub double %62, %64
store double %65, double* %15
%66 = load double, double* %9
%67 = load i32, i32* %11
%68 = sitofp i32 %67 to double
%69 = fsub double %66, %68
store double %69, double* %16
%70 = load double, double* %15
%71 = load double, double* %16
%72 = fadd double %70, %71
store double %72, double* %17
%73 = load double, double* %5
%74 = load double, double* %13
%75 = fsub double %73, %74
store double %75, double* %18
%76 = load double, double* %6
%77 = load double, double* %14
%78 = fsub double %76, %77
store double %78, double* %19
store double 0.000000e+00, double* %24
%79 = load double, double* %18
%80 = fsub double %79, 1.000000e+00
%81 = fsub double %80, 0x3FD76CF5D0B0995B
store double %81, double* %25
%82 = load double, double* %19
%83 = fsub double %82, 0.000000e+00
%84 = fsub double %83, 0x3FD76CF5D0B0995B
store double %84, double* %26
%85 = load double, double* %25
%86 = load double, double* %25
%87 = fneg double %85
%88 = call double @llvm.fmuladd.f64(double %87, double %86, double 2.000000e+00)
%89 = load double, double* %26
%90 = load double, double* %26
%91 = fneg double %89
%92 = call double @llvm.fmuladd.f64(double %91, double %90, double %88)
store double %92, double* %27
%93 = load double, double* %27
%94 = fcmp ogt double %93, 0.000000e+00
br i1 %94, label %95, label %112
95: ; preds = %3
%96 = load double, double* %27
%97 = load double, double* %27
%98 = fmul double %97, %96
store double %98, double* %27
%99 = load double, double* %27
%100 = load double, double* %27
%101 = fmul double %99, %100
%102 = load %struct.osn_context*, %struct.osn_context** %4
%103 = load i32, i32* %10
%104 = add nsw i32 %103, 1
%105 = load i32, i32* %11
%106 = add nsw i32 %105, 0
%107 = load double, double* %25
%108 = load double, double* %26
%109 = call double @extrapolate2(%struct.osn_context* %102, i32 %104, i32 %106, double %107, double %108)
%110 = load double, double* %24
%111 = call double @llvm.fmuladd.f64(double %101, double %109, double %110)
store double %111, double* %24
br label %112
112: ; preds = %95, %3
%113 = load double, double* %18
%114 = fsub double %113, 0.000000e+00
%115 = fsub double %114, 0x3FD76CF5D0B0995B
store double %115, double* %28
%116 = load double, double* %19
%117 = fsub double %116, 1.000000e+00
%118 = fsub double %117, 0x3FD76CF5D0B0995B
store double %118, double* %29
%119 = load double, double* %28
%120 = load double, double* %28
%121 = fneg double %119
%122 = call double @llvm.fmuladd.f64(double %121, double %120, double 2.000000e+00)
%123 = load double, double* %29
%124 = load double, double* %29
%125 = fneg double %123
%126 = call double @llvm.fmuladd.f64(double %125, double %124, double %122)
store double %126, double* %30
%127 = load double, double* %30
%128 = fcmp ogt double %127, 0.000000e+00
br i1 %128, label %129, label %146
129: ; preds = %112
%130 = load double, double* %30
%131 = load double, double* %30
%132 = fmul double %131, %130
store double %132, double* %30
%133 = load double, double* %30
%134 = load double, double* %30
%135 = fmul double %133, %134
%136 = load %struct.osn_context*, %struct.osn_context** %4
%137 = load i32, i32* %10
%138 = add nsw i32 %137, 0
%139 = load i32, i32* %11
%140 = add nsw i32 %139, 1
%141 = load double, double* %28
%142 = load double, double* %29
%143 = call double @extrapolate2(%struct.osn_context* %136, i32 %138, i32 %140, double %141, double %142)
%144 = load double, double* %24
%145 = call double @llvm.fmuladd.f64(double %135, double %143, double %144)
store double %145, double* %24
br label %146
146: ; preds = %129, %112
%147 = load double, double* %17
%148 = fcmp ole double %147, 1.000000e+00
br i1 %148, label %149, label %194
149: ; preds = %146
%150 = load double, double* %17
%151 = fsub double 1.000000e+00, %150
store double %151, double* %31
%152 = load double, double* %31
%153 = load double, double* %15
%154 = fcmp ogt double %152, %153
br i1 %154, label %159, label %155
155: ; preds = %149
%156 = load double, double* %31
%157 = load double, double* %16
%158 = fcmp ogt double %156, %157
br i1 %158, label %159, label %182
159: ; preds = %155, %149
%160 = load double, double* %15
%161 = load double, double* %16
%162 = fcmp ogt double %160, %161
br i1 %162, label %163, label %172
163: ; preds = %159
%164 = load i32, i32* %10
%165 = add nsw i32 %164, 1
store i32 %165, i32* %22
%166 = load i32, i32* %11
%167 = sub nsw i32 %166, 1
store i32 %167, i32* %23
%168 = load double, double* %18
%169 = fsub double %168, 1.000000e+00
store double %169, double* %20
%170 = load double, double* %19
%171 = fadd double %170, 1.000000e+00
store double %171, double* %21
br label %181
172: ; preds = %159
%173 = load i32, i32* %10
%174 = sub nsw i32 %173, 1
store i32 %174, i32* %22
%175 = load i32, i32* %11
%176 = add nsw i32 %175, 1
store i32 %176, i32* %23
%177 = load double, double* %18
%178 = fadd double %177, 1.000000e+00
store double %178, double* %20
%179 = load double, double* %19
%180 = fsub double %179, 1.000000e+00
store double %180, double* %21
br label %181
181: ; preds = %172, %163
br label %193
182: ; preds = %155
%183 = load i32, i32* %10
%184 = add nsw i32 %183, 1
store i32 %184, i32* %22
%185 = load i32, i32* %11
%186 = add nsw i32 %185, 1
store i32 %186, i32* %23
%187 = load double, double* %18
%188 = fsub double %187, 1.000000e+00
%189 = fsub double %188, 0x3FE76CF5D0B0995B
store double %189, double* %20
%190 = load double, double* %19
%191 = fsub double %190, 1.000000e+00
%192 = fsub double %191, 0x3FE76CF5D0B0995B
store double %192, double* %21
br label %193
193: ; preds = %182, %181
br label %247
194: ; preds = %146
%195 = load double, double* %17
%196 = fsub double 2.000000e+00, %195
store double %196, double* %32
%197 = load double, double* %32
%198 = load double, double* %15
%199 = fcmp olt double %197, %198
br i1 %199, label %204, label %200
200: ; preds = %194
%201 = load double, double* %32
%202 = load double, double* %16
%203 = fcmp olt double %201, %202
br i1 %203, label %204, label %231
204: ; preds = %200, %194
%205 = load double, double* %15
%206 = load double, double* %16
%207 = fcmp ogt double %205, %206
br i1 %207, label %208, label %219
208: ; preds = %204
%209 = load i32, i32* %10
%210 = add nsw i32 %209, 2
store i32 %210, i32* %22
%211 = load i32, i32* %11
%212 = add nsw i32 %211, 0
store i32 %212, i32* %23
%213 = load double, double* %18
%214 = fsub double %213, 2.000000e+00
%215 = fsub double %214, 0x3FE76CF5D0B0995B
store double %215, double* %20
%216 = load double, double* %19
%217 = fadd double %216, 0.000000e+00
%218 = fsub double %217, 0x3FE76CF5D0B0995B
store double %218, double* %21
br label %230
219: ; preds = %204
%220 = load i32, i32* %10
%221 = add nsw i32 %220, 0
store i32 %221, i32* %22
%222 = load i32, i32* %11
%223 = add nsw i32 %222, 2
store i32 %223, i32* %23
%224 = load double, double* %18
%225 = fadd double %224, 0.000000e+00
%226 = fsub double %225, 0x3FE76CF5D0B0995B
store double %226, double* %20
%227 = load double, double* %19
%228 = fsub double %227, 2.000000e+00
%229 = fsub double %228, 0x3FE76CF5D0B0995B
store double %229, double* %21
br label %230
230: ; preds = %219, %208
br label %236
231: ; preds = %200
%232 = load double, double* %18
store double %232, double* %20
%233 = load double, double* %19
store double %233, double* %21
%234 = load i32, i32* %10
store i32 %234, i32* %22
%235 = load i32, i32* %11
store i32 %235, i32* %23
br label %236
236: ; preds = %231, %230
%237 = load i32, i32* %10
%238 = add nsw i32 %237, 1
store i32 %238, i32* %10
%239 = load i32, i32* %11
%240 = add nsw i32 %239, 1
store i32 %240, i32* %11
%241 = load double, double* %18
%242 = fsub double %241, 1.000000e+00
%243 = fsub double %242, 0x3FE76CF5D0B0995B
store double %243, double* %18
%244 = load double, double* %19
%245 = fsub double %244, 1.000000e+00
%246 = fsub double %245, 0x3FE76CF5D0B0995B
store double %246, double* %19
br label %247
247: ; preds = %236, %193
%248 = load double, double* %18
%249 = load double, double* %18
%250 = fneg double %248
%251 = call double @llvm.fmuladd.f64(double %250, double %249, double 2.000000e+00)
%252 = load double, double* %19
%253 = load double, double* %19
%254 = fneg double %252
%255 = call double @llvm.fmuladd.f64(double %254, double %253, double %251)
store double %255, double* %33
%256 = load double, double* %33
%257 = fcmp ogt double %256, 0.000000e+00
br i1 %257, label %258, label %273
258: ; preds = %247
%259 = load double, double* %33
%260 = load double, double* %33
%261 = fmul double %260, %259
store double %261, double* %33
%262 = load double, double* %33
%263 = load double, double* %33
%264 = fmul double %262, %263
%265 = load %struct.osn_context*, %struct.osn_context** %4
%266 = load i32, i32* %10
%267 = load i32, i32* %11
%268 = load double, double* %18
%269 = load double, double* %19
%270 = call double @extrapolate2(%struct.osn_context* %265, i32 %266, i32 %267, double %268, double %269)
%271 = load double, double* %24
%272 = call double @llvm.fmuladd.f64(double %264, double %270, double %271)
store double %272, double* %24
br label %273
273: ; preds = %258, %247
%274 = load double, double* %20
%275 = load double, double* %20
%276 = fneg double %274
%277 = call double @llvm.fmuladd.f64(double %276, double %275, double 2.000000e+00)
%278 = load double, double* %21
%279 = load double, double* %21
%280 = fneg double %278
%281 = call double @llvm.fmuladd.f64(double %280, double %279, double %277)
store double %281, double* %34
%282 = load double, double* %34
%283 = fcmp ogt double %282, 0.000000e+00
br i1 %283, label %284, label %299
284: ; preds = %273
%285 = load double, double* %34
%286 = load double, double* %34
%287 = fmul double %286, %285
store double %287, double* %34
%288 = load double, double* %34
%289 = load double, double* %34
%290 = fmul double %288, %289
%291 = load %struct.osn_context*, %struct.osn_context** %4
%292 = load i32, i32* %22
%293 = load i32, i32* %23
%294 = load double, double* %20
%295 = load double, double* %21
%296 = call double @extrapolate2(%struct.osn_context* %291, i32 %292, i32 %293, double %294, double %295)
%297 = load double, double* %24
%298 = call double @llvm.fmuladd.f64(double %290, double %296, double %297)
store double %298, double* %24
br label %299
299: ; preds = %284, %273
%300 = load double, double* %24
%301 = fdiv double %300, 4.700000e+01
ret double %301
}

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 [ %103, %102 ], [ %70, %69 ], [ %76, %75 ], [ %82, %81 ]
%112 = phi i32 [ %104, %102 ], [ %71, %69 ], [ %77, %75 ], [ %83, %81 ]
%113 = phi double [ %109, %102 ], [ %30, %69 ], [ %30, %75 ], [ %30, %81 ]
%114 = phi double [ %108, %102 ], [ %27, %69 ], [ %27, %75 ], [ %27, %81 ]
%115 = phi i32 [ %107, %102 ], [ %9, %69 ], [ %9, %75 ], [ %9, %81 ]
%116 = phi i32 [ %106, %102 ], [ %8, %69 ], [ %8, %75 ], [ %8, %81 ]
%117 = phi <2 x double> [ %105, %102 ], [ %74, %69 ], [ %80, %75 ], [ %86, %81 ]
%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
}