#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 */
int fabs(float);
int /*<<< orphan*/ posit(int, int, float *, float *, float *, float *);
float sqrt(int);
void wray(int np, int nr, int *line, float *weight, int *numb) {
  float sorx, sory, cf, sf, rcosphi, tanphi, rtnphi, c, fp, w, yc;
  int ix, iy, incx, incy, index, next, flip, flipxy;
  int idx, idx_;
  int idy;
  float fy;
  int tmpline[512][2] = {0};
  float tmpweight[512][2] = {0.0};
  float l;
  *numb = 0;
  posit(np, nr, &sorx, &sory, &cf, &sf);
  if (sf < -1e-8) {
    sf = -sf;
    cf = -cf;
  }
  flip = 0;
  if (sf * cf < -1e-8 * 1e-8) {
    flip = 1;
    cf = -cf;
  }
  if (flip > 0) {
    sorx = -sorx;
  }
  if (fabs(sf) <= 1e-8) {
    if (sf < 0)
      sf = -1e-8 * 1e-8;
    else
      sf = 1e-8 * 1e-8;
  }
  if (fabs(cf) <= 1e-8) {
    if (cf < 0)
      cf = -1e-8 * 1e-8;
    else
      cf = 1e-8 * 1e-8;
  }
  if (fabs(cf) > 1e-8)
    tanphi = sf / cf;
  else
    tanphi = 1 / (1e-8 * 1e-8);
  if (fabs(sf) > 1e-8)
    rtnphi = cf / sf;
  else
    rtnphi = 1 / (1e-8 * 1e-8);
  flipxy = 0;
  if (tanphi > 1 + 1e-8) {
    flipxy = 1;
    tanphi = 1 / tanphi;
    rtnphi = 1 / rtnphi;
    sf = sory;
    sory = sorx;
    sorx = sf;
  }
  rcosphi = (sqrt(1 + tanphi * tanphi));
  sory += 512 / 2.0;
  sorx += 512 / 2.0;
  c = sory - sorx * tanphi;
  if ((c - 512) >= 1e-2)
    return;
  if (c < -1e-2) {
    c = -c * rtnphi;
    if ((c - 512) >= 1e-2)
      return;
    ix = (int)c;
    iy = 0;
    fp = ((float)(ix + 1)) - c;
    yc = fp * tanphi;
    yc += -1.0;
  } else {
    ix = 0;
    iy = (int)c;
    fp = ((float)(iy + 1)) - c;
    yc = -fp;
    yc += tanphi;
  }
  if (yc >= 0)
    next = 1;
  else
    next = 2;
  if (flipxy > 0) {
    index = iy + ix * 512;
    incx = 512;
    incy = 1;
    if (flip > 0) {
      index = 512 - 1 - iy + ix * 512;
      incx = 512;
      incy = -1;
    }
  } else {
    index = iy * 512 + ix;
    incx = 1;
    incy = 512;
    if (flip > 0) {
      index = 512 - 1 - ix + iy * 512;
      incx = -1;
      incy = 512;
    }
  }
  for (;;) {
    switch (next) {
    case 1:
      if (iy + 1 >= 512 || ix < 0)
        return;
      w = rcosphi * (1 - yc * rtnphi);
      weight[*numb] = w;
      line[*numb] = index;
      ++(*numb);
      iy++;
      index += incy;
      if (ix + 1 >= 512)
        return;
      w = rcosphi * (yc * rtnphi);
      weight[*numb] = w;
      line[*numb] = index;
      ++(*numb);
      ix++;
      index += incx;
      yc += tanphi - 1.0;
      if (yc >= 0)
        next = 1;
      else
        next = 2;
      break;
    case 2:
      if (iy >= 512 || ix + 1 >= 512 || ix < 0)
        return;
      w = rcosphi;
      weight[*numb] = w;
      line[*numb] = index;
      ++(*numb);
      ix++;
      index += incx;
      yc += tanphi;
      if (yc >= 0)
        next = 1;
      else
        next = 2;
      break;
    }
  }
}


x86 assembly (clang, -O0):
<wray>:
push   %rbp
mov    %rsp,%rbp
sub    $0x2090,%rsp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %rdx,-0x10(%rbp)
mov    %rcx,-0x18(%rbp)
mov    %r8,-0x20(%rbp)
lea    -0x1080(%rbp),%rdi
xor    %esi,%esi
mov    $0x1000,%edx
call   1030 <memset@plt>
lea    -0x2080(%rbp),%rdi
xor    %esi,%esi
mov    $0x1000,%edx
call   1030 <memset@plt>
mov    -0x20(%rbp),%rax
movl   $0x0,(%rax)
mov    -0x4(%rbp),%edi
mov    -0x8(%rbp),%esi
lea    -0x24(%rbp),%rdx
lea    -0x28(%rbp),%rcx
lea    -0x2c(%rbp),%r8
lea    -0x30(%rbp),%r9
call   1050 <posit@plt>
movss  -0x30(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xe47(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    11f1 <wray+0xb1>
movss  -0x30(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  %xmm0,-0x30(%rbp)
movss  -0x2c(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  %xmm0,-0x2c(%rbp)
movl   $0x0,-0x68(%rbp)
movss  -0x30(%rbp),%xmm0
mulss  -0x2c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xdfa(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1236 <wray+0xf6>
movl   $0x1,-0x68(%rbp)
movss  -0x2c(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  %xmm0,-0x2c(%rbp)
cmpl   $0x0,-0x68(%rbp)
jle    1257 <wray+0x117>
movss  -0x24(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  %xmm0,-0x24(%rbp)
movss  -0x30(%rbp),%xmm0
call   1040 <fabs@plt>
cvtsi2sd %eax,%xmm1
movsd  0xda3(%rip),%xmm0
ucomisd %xmm1,%xmm0
jb     12a8 <wray+0x168>
xorps  %xmm0,%xmm0
ucomiss -0x30(%rbp),%xmm0
jbe    1296 <wray+0x156>
movss  0xdc0(%rip),%xmm0
movss  %xmm0,-0x30(%rbp)
jmp    12a3 <wray+0x163>
movss  0xdaa(%rip),%xmm0
movss  %xmm0,-0x30(%rbp)
jmp    12a8 <wray+0x168>
movss  -0x2c(%rbp),%xmm0
call   1040 <fabs@plt>
cvtsi2sd %eax,%xmm1
movsd  0xd52(%rip),%xmm0
ucomisd %xmm1,%xmm0
jb     12f9 <wray+0x1b9>
xorps  %xmm0,%xmm0
ucomiss -0x2c(%rbp),%xmm0
jbe    12e7 <wray+0x1a7>
movss  0xd6f(%rip),%xmm0
movss  %xmm0,-0x2c(%rbp)
jmp    12f4 <wray+0x1b4>
movss  0xd59(%rip),%xmm0
movss  %xmm0,-0x2c(%rbp)
jmp    12f9 <wray+0x1b9>
movss  -0x2c(%rbp),%xmm0
call   1040 <fabs@plt>
cvtsi2sd %eax,%xmm0
movsd  0xd01(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    132d <wray+0x1ed>
movss  -0x30(%rbp),%xmm0
divss  -0x2c(%rbp),%xmm0
movss  %xmm0,-0x38(%rbp)
jmp    133a <wray+0x1fa>
movss  0xd1b(%rip),%xmm0
movss  %xmm0,-0x38(%rbp)
movss  -0x30(%rbp),%xmm0
call   1040 <fabs@plt>
cvtsi2sd %eax,%xmm0
movsd  0xcc0(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    136e <wray+0x22e>
movss  -0x2c(%rbp),%xmm0
divss  -0x30(%rbp),%xmm0
movss  %xmm0,-0x3c(%rbp)
jmp    137b <wray+0x23b>
movss  0xcda(%rip),%xmm0
movss  %xmm0,-0x3c(%rbp)
movl   $0x0,-0x6c(%rbp)
movss  -0x38(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xc85(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    13e6 <wray+0x2a6>
movl   $0x1,-0x6c(%rbp)
movss  0xca8(%rip),%xmm0
divss  -0x38(%rbp),%xmm0
movss  %xmm0,-0x38(%rbp)
movss  0xc96(%rip),%xmm0
divss  -0x3c(%rbp),%xmm0
movss  %xmm0,-0x3c(%rbp)
movss  -0x28(%rbp),%xmm0
movss  %xmm0,-0x30(%rbp)
movss  -0x24(%rbp),%xmm0
movss  %xmm0,-0x28(%rbp)
movss  -0x30(%rbp),%xmm0
movss  %xmm0,-0x24(%rbp)
movss  -0x38(%rbp),%xmm0
movss  -0x38(%rbp),%xmm1
mulss  %xmm1,%xmm0
movss  0xc58(%rip),%xmm1
addss  %xmm1,%xmm0
cvttss2si %xmm0,%edi
call   1060 <sqrt@plt>
movss  %xmm0,-0x34(%rbp)
movss  -0x28(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xc09(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x28(%rbp)
movss  -0x24(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xbeb(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x24(%rbp)
movss  -0x28(%rbp),%xmm1
movss  -0x24(%rbp),%xmm0
movss  -0x38(%rbp),%xmm2
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x40(%rbp)
movss  -0x40(%rbp),%xmm0
movss  0xbd8(%rip),%xmm1
subss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xb90(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     149f <wray+0x35f>
jmp    18a8 <wray+0x768>
movss  -0x40(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xb80(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1557 <wray+0x417>
movss  -0x40(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  -0x3c(%rbp),%xmm0
movss  %xmm0,-0x40(%rbp)
movss  -0x40(%rbp),%xmm0
movss  0xb75(%rip),%xmm1
subss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xb2d(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     1502 <wray+0x3c2>
jmp    18a8 <wray+0x768>
cvttss2si -0x40(%rbp),%eax
mov    %eax,-0x50(%rbp)
movl   $0x0,-0x54(%rbp)
mov    -0x50(%rbp),%eax
add    $0x1,%eax
cvtsi2ss %eax,%xmm0
subss  -0x40(%rbp),%xmm0
movss  %xmm0,-0x44(%rbp)
movss  -0x44(%rbp),%xmm0
mulss  -0x38(%rbp),%xmm0
movss  %xmm0,-0x4c(%rbp)
movss  -0x4c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xaf3(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x4c(%rbp)
jmp    15a0 <wray+0x460>
movl   $0x0,-0x50(%rbp)
cvttss2si -0x40(%rbp),%eax
mov    %eax,-0x54(%rbp)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
cvtsi2ss %eax,%xmm0
subss  -0x40(%rbp),%xmm0
movss  %xmm0,-0x44(%rbp)
movss  -0x44(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  %xmm0,-0x4c(%rbp)
movss  -0x38(%rbp),%xmm0
addss  -0x4c(%rbp),%xmm0
movss  %xmm0,-0x4c(%rbp)
movss  -0x4c(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jb     15bd <wray+0x47d>
movl   $0x1,-0x64(%rbp)
jmp    15c4 <wray+0x484>
movl   $0x2,-0x64(%rbp)
cmpl   $0x0,-0x6c(%rbp)
jle    161a <wray+0x4da>
mov    -0x54(%rbp),%eax
mov    -0x50(%rbp),%ecx
shl    $0x9,%ecx
add    %ecx,%eax
mov    %eax,-0x60(%rbp)
movl   $0x200,-0x58(%rbp)
movl   $0x1,-0x5c(%rbp)
cmpl   $0x0,-0x68(%rbp)
jle    1615 <wray+0x4d5>
mov    $0x1ff,%eax
sub    -0x54(%rbp),%eax
mov    -0x50(%rbp),%ecx
shl    $0x9,%ecx
add    %ecx,%eax
mov    %eax,-0x60(%rbp)
movl   $0x200,-0x58(%rbp)
movl   $0xffffffff,-0x5c(%rbp)
jmp    1664 <wray+0x524>
mov    -0x54(%rbp),%eax
shl    $0x9,%eax
add    -0x50(%rbp),%eax
mov    %eax,-0x60(%rbp)
movl   $0x1,-0x58(%rbp)
movl   $0x200,-0x5c(%rbp)
cmpl   $0x0,-0x68(%rbp)
jle    165f <wray+0x51f>
mov    $0x1ff,%eax
sub    -0x50(%rbp),%eax
mov    -0x54(%rbp),%ecx
shl    $0x9,%ecx
add    %ecx,%eax
mov    %eax,-0x60(%rbp)
movl   $0xffffffff,-0x58(%rbp)
movl   $0x200,-0x5c(%rbp)
jmp    1664 <wray+0x524>
jmp    1669 <wray+0x529>
mov    -0x64(%rbp),%eax
mov    %eax,-0x2088(%rbp)
sub    $0x1,%eax
je     1694 <wray+0x554>
jmp    1680 <wray+0x540>
mov    -0x2088(%rbp),%eax
sub    $0x2,%eax
je     17f1 <wray+0x6b1>
jmp    18a3 <wray+0x763>
mov    -0x54(%rbp),%eax
add    $0x1,%eax
cmp    $0x200,%eax
jge    16af <wray+0x56f>
cmpl   $0x0,-0x50(%rbp)
jge    16b4 <wray+0x574>
jmp    18a8 <wray+0x768>
movss  -0x34(%rbp),%xmm0
movss  -0x4c(%rbp),%xmm1
movss  -0x3c(%rbp),%xmm2
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
mulss  %xmm2,%xmm1
movss  0x978(%rip),%xmm2
addss  %xmm2,%xmm1
mulss  %xmm1,%xmm0
movss  %xmm0,-0x48(%rbp)
movss  -0x48(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x20(%rbp),%rcx
movslq (%rcx),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x60(%rbp),%edx
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movslq (%rcx),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x20(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
mov    -0x5c(%rbp),%eax
add    -0x60(%rbp),%eax
mov    %eax,-0x60(%rbp)
mov    -0x50(%rbp),%eax
add    $0x1,%eax
cmp    $0x200,%eax
jl     1742 <wray+0x602>
jmp    18a8 <wray+0x768>
movss  -0x34(%rbp),%xmm0
movss  -0x4c(%rbp),%xmm1
mulss  -0x3c(%rbp),%xmm1
mulss  %xmm1,%xmm0
movss  %xmm0,-0x48(%rbp)
movss  -0x48(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x20(%rbp),%rcx
movslq (%rcx),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x60(%rbp),%edx
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movslq (%rcx),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x20(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
mov    -0x58(%rbp),%eax
add    -0x60(%rbp),%eax
mov    %eax,-0x60(%rbp)
movss  -0x38(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x892(%rip),%xmm0
subsd  %xmm0,%xmm1
movss  -0x4c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x4c(%rbp)
movss  -0x4c(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jb     17e5 <wray+0x6a5>
movl   $0x1,-0x64(%rbp)
jmp    17ec <wray+0x6ac>
movl   $0x2,-0x64(%rbp)
jmp    18a3 <wray+0x763>
cmpl   $0x200,-0x54(%rbp)
jge    1819 <wray+0x6d9>
mov    -0x50(%rbp),%eax
add    $0x1,%eax
cmp    $0x200,%eax
jge    1819 <wray+0x6d9>
cmpl   $0x0,-0x50(%rbp)
jge    181e <wray+0x6de>
jmp    18a8 <wray+0x768>
movss  -0x34(%rbp),%xmm0
movss  %xmm0,-0x48(%rbp)
movss  -0x48(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x20(%rbp),%rcx
movslq (%rcx),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x60(%rbp),%edx
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movslq (%rcx),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x20(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
mov    -0x58(%rbp),%eax
add    -0x60(%rbp),%eax
mov    %eax,-0x60(%rbp)
movss  -0x38(%rbp),%xmm0
addss  -0x4c(%rbp),%xmm0
movss  %xmm0,-0x4c(%rbp)
movss  -0x4c(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jb     1897 <wray+0x757>
movl   $0x1,-0x64(%rbp)
jmp    189e <wray+0x75e>
movl   $0x2,-0x64(%rbp)
jmp    18a3 <wray+0x763>
jmp    1669 <wray+0x529>
add    $0x2090,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<wray>:
push   %r15
push   %r14
push   %rbx
sub    $0x30,%rsp
mov    %r8,%rbx
mov    %rcx,%r14
mov    %rdx,%r15
movl   $0x0,(%r8)
lea    0x8(%rsp),%rdx
lea    0xc(%rsp),%rcx
mov    %rsp,%r8
lea    0x4(%rsp),%r9
call   1040 <posit@plt>
movss  0x4(%rsp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xe8e(%rip),%xmm2
ucomisd %xmm1,%xmm2
jbe    1197 <wray+0x67>
movaps 0xeb1(%rip),%xmm2
xorps  %xmm2,%xmm0
movss  %xmm0,0x4(%rsp)
movss  (%rsp),%xmm1
xorps  %xmm2,%xmm1
movss  %xmm1,(%rsp)
jmp    119c <wray+0x6c>
movss  (%rsp),%xmm1
movaps %xmm0,%xmm2
mulss  %xmm1,%xmm2
cvtss2sd %xmm2,%xmm2
movsd  0xe59(%rip),%xmm3
movsd  %xmm2,0x18(%rsp)
ucomisd %xmm2,%xmm3
jbe    11d9 <wray+0xa9>
movaps 0xe6e(%rip),%xmm2
xorps  %xmm2,%xmm1
movss  %xmm1,(%rsp)
movss  0x8(%rsp),%xmm1
xorps  %xmm2,%xmm1
movss  %xmm1,0x8(%rsp)
call   1030 <fabs@plt>
test   %eax,%eax
jg     11fe <wray+0xce>
xorps  %xmm0,%xmm0
ucomiss 0x4(%rsp),%xmm0
jbe    11f6 <wray+0xc6>
movl   $0xa4e69595,0x4(%rsp)
a4
jmp    11fe <wray+0xce>
movl   $0x24e69595,0x4(%rsp)
24
movss  (%rsp),%xmm0
call   1030 <fabs@plt>
movss  (%rsp),%xmm0
test   %eax,%eax
jg     1239 <wray+0x109>
xorps  %xmm1,%xmm1
ucomiss %xmm0,%xmm1
jbe    122a <wray+0xfa>
movl   $0xa4e69595,(%rsp)
movss  0xe2c(%rip),%xmm0
jmp    1239 <wray+0x109>
movl   $0x24e69595,(%rsp)
movss  0xe17(%rip),%xmm0
call   1030 <fabs@plt>
movss  0xe12(%rip),%xmm1
movss  0x4(%rsp),%xmm0
test   %eax,%eax
jle    1258 <wray+0x128>
movaps %xmm0,%xmm1
divss  (%rsp),%xmm1
movaps %xmm1,0x20(%rsp)
call   1030 <fabs@plt>
test   %eax,%eax
movss  0xdec(%rip),%xmm2
jle    1279 <wray+0x149>
movss  (%rsp),%xmm2
divss  0x4(%rsp),%xmm2
movaps 0x20(%rsp),%xmm1
xorps  %xmm0,%xmm0
cvtss2sd %xmm1,%xmm0
ucomisd 0xd83(%rip),%xmm0
unpcklps %xmm2,%xmm1
movsd  %xmm0,0x10(%rsp)
jbe    12c3 <wray+0x193>
movaps 0xda1(%rip),%xmm0
divps  %xmm1,%xmm0
movss  0xc(%rsp),%xmm1
movss  %xmm1,0x4(%rsp)
movss  0x8(%rsp),%xmm2
movss  %xmm2,0xc(%rsp)
movss  %xmm1,0x8(%rsp)
movaps %xmm0,%xmm1
movaps %xmm1,0x20(%rsp)
movaps %xmm1,%xmm0
mulss  %xmm1,%xmm0
addss  0xd85(%rip),%xmm0
cvttss2si %xmm0,%edi
call   1050 <sqrt@plt>
movaps 0x20(%rsp),%xmm5
movss  0xd73(%rip),%xmm1
movss  0xc(%rsp),%xmm3
addss  %xmm1,%xmm3
addss  0x8(%rsp),%xmm1
mulss  %xmm5,%xmm1
subss  %xmm1,%xmm3
movss  0xd57(%rip),%xmm1
addss  %xmm3,%xmm1
cvtss2sd %xmm1,%xmm1
ucomisd 0xcfb(%rip),%xmm1
jae    14f8 <wray+0x3c8>
xorps  %xmm1,%xmm1
cvtss2sd %xmm3,%xmm1
movsd  0xcee(%rip),%xmm2
ucomisd %xmm1,%xmm2
movaps %xmm5,%xmm1
shufps $0x55,%xmm5,%xmm1
jbe    138a <wray+0x25a>
xorps  0xcea(%rip),%xmm3
mulss  %xmm1,%xmm3
movss  0xd12(%rip),%xmm2
addss  %xmm3,%xmm2
cvtss2sd %xmm2,%xmm2
ucomisd 0xcb6(%rip),%xmm2
jae    14f8 <wray+0x3c8>
cvttss2si %xmm3,%eax
lea    0x1(%rax),%ecx
xorps  %xmm2,%xmm2
cvtsi2ss %ecx,%xmm2
subss  %xmm3,%xmm2
mulss  %xmm5,%xmm2
addss  0xce2(%rip),%xmm2
xor    %ecx,%ecx
jmp    13a2 <wray+0x272>
cvttss2si %xmm3,%ecx
lea    0x1(%rcx),%eax
cvtsi2ss %eax,%xmm4
subss  %xmm3,%xmm4
movaps %xmm5,%xmm2
subss  %xmm4,%xmm2
xor    %eax,%eax
movsd  0x18(%rsp),%xmm4
movsd  0xc58(%rip),%xmm6
movsd  0x10(%rsp),%xmm7
xorps  %xmm3,%xmm3
ucomiss %xmm3,%xmm2
mov    $0x1,%edi
adc    $0x0,%edi
mov    $0x1,%r9d
ucomisd 0xc3e(%rip),%xmm7
jbe    13f5 <wray+0x2c5>
mov    %eax,%edx
shl    $0x9,%edx
ucomisd %xmm4,%xmm6
mov    $0x200,%r9d
jbe    1416 <wray+0x2e6>
sub    %ecx,%edx
add    $0x1ff,%edx
mov    $0xffffffff,%r8d
jmp    1422 <wray+0x2f2>
mov    %ecx,%edx
shl    $0x9,%edx
ucomisd %xmm4,%xmm6
mov    $0x200,%r8d
jbe    1420 <wray+0x2f0>
sub    %eax,%edx
add    $0x1ff,%edx
mov    $0xffffffff,%r9d
jmp    1422 <wray+0x2f2>
add    %ecx,%edx
mov    $0x1,%r8d
jmp    1422 <wray+0x2f2>
add    %eax,%edx
xorps  %xmm3,%xmm3
cvtss2sd %xmm5,%xmm3
addsd  0xbf7(%rip),%xmm3
xorpd  %xmm4,%xmm4
movss  0xc1e(%rip),%xmm8
jmp    1470 <wray+0x340>
add    $0x1,%eax
movslq (%rbx),%rsi
movss  %xmm0,(%r14,%rsi,4)
mov    %edx,(%r15,%rsi,4)
addl   $0x1,(%rbx)
add    %r9d,%edx
addss  %xmm5,%xmm2
ucomiss %xmm4,%xmm2
mov    $0x1,%edi
adc    $0x0,%edi
cs nopw 0x0(%rax,%rax,1)
nop
cmp    $0x2,%edi
je     14e5 <wray+0x3b5>
cmp    $0x1,%edi
jne    1470 <wray+0x340>
cmp    $0x1fe,%ecx
jg     14f8 <wray+0x3c8>
test   %eax,%eax
js     14f8 <wray+0x3c8>
movaps %xmm2,%xmm6
mulss  %xmm1,%xmm6
movaps %xmm8,%xmm7
subss  %xmm6,%xmm7
mulss  %xmm0,%xmm7
movslq (%rbx),%rdi
movss  %xmm7,(%r14,%rdi,4)
mov    %edx,(%r15,%rdi,4)
movslq (%rbx),%rdi
lea    0x1(%rdi),%esi
mov    %esi,(%rbx)
cmp    $0x1fe,%eax
ja     14f8 <wray+0x3c8>
add    $0x1,%ecx
add    %r8d,%edx
mulss  %xmm0,%xmm6
movss  %xmm6,0x4(%r14,%rdi,4)
mov    %edx,0x4(%r15,%rdi,4)
addl   $0x1,(%rbx)
add    $0x1,%eax
add    %r9d,%edx
cvtss2sd %xmm2,%xmm2
addsd  %xmm3,%xmm2
cvtsd2ss %xmm2,%xmm2
jmp    145a <wray+0x32a>
cmp    $0x1ff,%ecx
jg     14f8 <wray+0x3c8>
cmp    $0x1fe,%eax
jbe    1440 <wray+0x310>
add    $0x30,%rsp
pop    %rbx
pop    %r14
pop    %r15
ret

LLVM IR (-O0):
define void @wray(i32 %0, i32 %1, i32* %2, float* %3, i32* %4) {
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32*
%9 = alloca float*
%10 = alloca i32*
%11 = alloca float
%12 = alloca float
%13 = alloca float
%14 = alloca float
%15 = alloca float
%16 = alloca float
%17 = alloca float
%18 = alloca float
%19 = alloca float
%20 = alloca float
%21 = alloca float
%22 = alloca i32
%23 = alloca i32
%24 = alloca i32
%25 = alloca i32
%26 = alloca i32
%27 = alloca i32
%28 = alloca i32
%29 = alloca i32
%30 = alloca i32
%31 = alloca i32
%32 = alloca i32
%33 = alloca float
%34 = alloca [512 x [2 x i32]]
%35 = alloca [512 x [2 x float]]
%36 = alloca float
store i32 %0, i32* %6
store i32 %1, i32* %7
store i32* %2, i32** %8
store float* %3, float** %9
store i32* %4, i32** %10
%37 = bitcast [512 x [2 x i32]]* %34 to i8*
%38 = bitcast [512 x [2 x float]]* %35 to i8*
%39 = load i32*, i32** %10
store i32 0, i32* %39
%40 = load i32, i32* %6
%41 = load i32, i32* %7
%42 = call i32 @posit(i32 %40, i32 %41, float* %11, float* %12, float* %13, float* %14)
%43 = load float, float* %14
%44 = fpext float %43 to double
%45 = fcmp olt double %44, -1.000000e-08
br i1 %45, label %46, label %51
46: ; preds = %5
%47 = load float, float* %14
%48 = fneg float %47
store float %48, float* %14
%49 = load float, float* %13
%50 = fneg float %49
store float %50, float* %13
br label %51
51: ; preds = %46, %5
store i32 0, i32* %28
%52 = load float, float* %14
%53 = load float, float* %13
%54 = fmul float %52, %53
%55 = fpext float %54 to double
%56 = fcmp olt double %55, 0xBC9CD2B297D889BD
br i1 %56, label %57, label %60
57: ; preds = %51
store i32 1, i32* %28
%58 = load float, float* %13
%59 = fneg float %58
store float %59, float* %13
br label %60
60: ; preds = %57, %51
%61 = load i32, i32* %28
%62 = icmp sgt i32 %61, 0
br i1 %62, label %63, label %66
63: ; preds = %60
%64 = load float, float* %11
%65 = fneg float %64
store float %65, float* %11
br label %66
66: ; preds = %63, %60
%67 = load float, float* %14
%68 = call i32 @fabs(float %67)
%69 = sitofp i32 %68 to double
%70 = fcmp ole double %69, 1.000000e-08
br i1 %70, label %71, label %77
71: ; preds = %66
%72 = load float, float* %14
%73 = fcmp olt float %72, 0.000000e+00
br i1 %73, label %74, label %75
74: ; preds = %71
store float 0xBC9CD2B2A0000000, float* %14
br label %76
75: ; preds = %71
store float 0x3C9CD2B2A0000000, float* %14
br label %76
76: ; preds = %75, %74
br label %77
77: ; preds = %76, %66
%78 = load float, float* %13
%79 = call i32 @fabs(float %78)
%80 = sitofp i32 %79 to double
%81 = fcmp ole double %80, 1.000000e-08
br i1 %81, label %82, label %88
82: ; preds = %77
%83 = load float, float* %13
%84 = fcmp olt float %83, 0.000000e+00
br i1 %84, label %85, label %86
85: ; preds = %82
store float 0xBC9CD2B2A0000000, float* %13
br label %87
86: ; preds = %82
store float 0x3C9CD2B2A0000000, float* %13
br label %87
87: ; preds = %86, %85
br label %88
88: ; preds = %87, %77
%89 = load float, float* %13
%90 = call i32 @fabs(float %89)
%91 = sitofp i32 %90 to double
%92 = fcmp ogt double %91, 1.000000e-08
br i1 %92, label %93, label %97
93: ; preds = %88
%94 = load float, float* %14
%95 = load float, float* %13
%96 = fdiv float %94, %95
store float %96, float* %16
br label %98
97: ; preds = %88
store float 0x4341C37940000000, float* %16
br label %98
98: ; preds = %97, %93
%99 = load float, float* %14
%100 = call i32 @fabs(float %99)
%101 = sitofp i32 %100 to double
%102 = fcmp ogt double %101, 1.000000e-08
br i1 %102, label %103, label %107
103: ; preds = %98
%104 = load float, float* %13
%105 = load float, float* %14
%106 = fdiv float %104, %105
store float %106, float* %17
br label %108
107: ; preds = %98
store float 0x4341C37940000000, float* %17
br label %108
108: ; preds = %107, %103
store i32 0, i32* %29
%109 = load float, float* %16
%110 = fpext float %109 to double
%111 = fcmp ogt double %110, 0x3FF0000002AF31DC
br i1 %111, label %112, label %120
112: ; preds = %108
store i32 1, i32* %29
%113 = load float, float* %16
%114 = fdiv float 1.000000e+00, %113
store float %114, float* %16
%115 = load float, float* %17
%116 = fdiv float 1.000000e+00, %115
store float %116, float* %17
%117 = load float, float* %12
store float %117, float* %14
%118 = load float, float* %11
store float %118, float* %12
%119 = load float, float* %14
store float %119, float* %11
br label %120
120: ; preds = %112, %108
%121 = load float, float* %16
%122 = load float, float* %16
%123 = call float @llvm.fmuladd.f32(float %121, float %122, float 1.000000e+00)
%124 = fptosi float %123 to i32
%125 = call float @sqrt(i32 %124)
store float %125, float* %15
%126 = load float, float* %12
%127 = fpext float %126 to double
%128 = fadd double %127, 2.560000e+02
%129 = fptrunc double %128 to float
store float %129, float* %12
%130 = load float, float* %11
%131 = fpext float %130 to double
%132 = fadd double %131, 2.560000e+02
%133 = fptrunc double %132 to float
store float %133, float* %11
%134 = load float, float* %12
%135 = load float, float* %11
%136 = load float, float* %16
%137 = fneg float %135
%138 = call float @llvm.fmuladd.f32(float %137, float %136, float %134)
store float %138, float* %18
%139 = load float, float* %18
%140 = fsub float %139, 5.120000e+02
%141 = fpext float %140 to double
%142 = fcmp oge double %141, 1.000000e-02
br i1 %142, label %143, label %144
143: ; preds = %120
br label %344
144: ; preds = %120
%145 = load float, float* %18
%146 = fpext float %145 to double
%147 = fcmp olt double %146, -1.000000e-02
br i1 %147, label %148, label %173
148: ; preds = %144
%149 = load float, float* %18
%150 = fneg float %149
%151 = load float, float* %17
%152 = fmul float %150, %151
store float %152, float* %18
%153 = load float, float* %18
%154 = fsub float %153, 5.120000e+02
%155 = fpext float %154 to double
%156 = fcmp oge double %155, 1.000000e-02
br i1 %156, label %157, label %158
157: ; preds = %148
br label %344
158: ; preds = %148
%159 = load float, float* %18
%160 = fptosi float %159 to i32
store i32 %160, i32* %22
store i32 0, i32* %23
%161 = load i32, i32* %22
%162 = add nsw i32 %161, 1
%163 = sitofp i32 %162 to float
%164 = load float, float* %18
%165 = fsub float %163, %164
store float %165, float* %19
%166 = load float, float* %19
%167 = load float, float* %16
%168 = fmul float %166, %167
store float %168, float* %21
%169 = load float, float* %21
%170 = fpext float %169 to double
%171 = fadd double %170, -1.000000e+00
%172 = fptrunc double %171 to float
store float %172, float* %21
br label %186
173: ; preds = %144
store i32 0, i32* %22
%174 = load float, float* %18
%175 = fptosi float %174 to i32
store i32 %175, i32* %23
%176 = load i32, i32* %23
%177 = add nsw i32 %176, 1
%178 = sitofp i32 %177 to float
%179 = load float, float* %18
%180 = fsub float %178, %179
store float %180, float* %19
%181 = load float, float* %19
%182 = fneg float %181
store float %182, float* %21
%183 = load float, float* %16
%184 = load float, float* %21
%185 = fadd float %184, %183
store float %185, float* %21
br label %186
186: ; preds = %173, %158
%187 = load float, float* %21
%188 = fcmp oge float %187, 0.000000e+00
br i1 %188, label %189, label %190
189: ; preds = %186
store i32 1, i32* %27
br label %191
190: ; preds = %186
store i32 2, i32* %27
br label %191
191: ; preds = %190, %189
%192 = load i32, i32* %29
%193 = icmp sgt i32 %192, 0
br i1 %193, label %194, label %208
194: ; preds = %191
%195 = load i32, i32* %23
%196 = load i32, i32* %22
%197 = mul nsw i32 %196, 512
%198 = add nsw i32 %195, %197
store i32 %198, i32* %26
store i32 512, i32* %24
store i32 1, i32* %25
%199 = load i32, i32* %28
%200 = icmp sgt i32 %199, 0
br i1 %200, label %201, label %207
201: ; preds = %194
%202 = load i32, i32* %23
%203 = sub nsw i32 511, %202
%204 = load i32, i32* %22
%205 = mul nsw i32 %204, 512
%206 = add nsw i32 %203, %205
store i32 %206, i32* %26
store i32 512, i32* %24
store i32 -1, i32* %25
br label %207
207: ; preds = %201, %194
br label %222
208: ; preds = %191
%209 = load i32, i32* %23
%210 = mul nsw i32 %209, 512
%211 = load i32, i32* %22
%212 = add nsw i32 %210, %211
store i32 %212, i32* %26
store i32 1, i32* %24
store i32 512, i32* %25
%213 = load i32, i32* %28
%214 = icmp sgt i32 %213, 0
br i1 %214, label %215, label %221
215: ; preds = %208
%216 = load i32, i32* %22
%217 = sub nsw i32 511, %216
%218 = load i32, i32* %23
%219 = mul nsw i32 %218, 512
%220 = add nsw i32 %217, %219
store i32 %220, i32* %26
store i32 -1, i32* %24
store i32 512, i32* %25
br label %221
221: ; preds = %215, %208
br label %222
222: ; preds = %221, %207
br label %223
223: ; preds = %343, %222
%224 = load i32, i32* %27
switch i32 %224, label %343 [
i32 1, label %225
i32 2, label %302
]
225: ; preds = %223
%226 = load i32, i32* %23
%227 = add nsw i32 %226, 1
%228 = icmp sge i32 %227, 512
br i1 %228, label %232, label %229
229: ; preds = %225
%230 = load i32, i32* %22
%231 = icmp slt i32 %230, 0
br i1 %231, label %232, label %233
232: ; preds = %229, %225
br label %344
233: ; preds = %229
%234 = load float, float* %15
%235 = load float, float* %21
%236 = load float, float* %17
%237 = fneg float %235
%238 = call float @llvm.fmuladd.f32(float %237, float %236, float 1.000000e+00)
%239 = fmul float %234, %238
store float %239, float* %20
%240 = load float, float* %20
%241 = load float*, float** %9
%242 = load i32*, i32** %10
%243 = load i32, i32* %242
%244 = sext i32 %243 to i64
%245 = getelementptr inbounds float, float* %241, i64 %244
store float %240, float* %245
%246 = load i32, i32* %26
%247 = load i32*, i32** %8
%248 = load i32*, i32** %10
%249 = load i32, i32* %248
%250 = sext i32 %249 to i64
%251 = getelementptr inbounds i32, i32* %247, i64 %250
store i32 %246, i32* %251
%252 = load i32*, i32** %10
%253 = load i32, i32* %252
%254 = add nsw i32 %253, 1
store i32 %254, i32* %252
%255 = load i32, i32* %23
%256 = add nsw i32 %255, 1
store i32 %256, i32* %23
%257 = load i32, i32* %25
%258 = load i32, i32* %26
%259 = add nsw i32 %258, %257
store i32 %259, i32* %26
%260 = load i32, i32* %22
%261 = add nsw i32 %260, 1
%262 = icmp sge i32 %261, 512
br i1 %262, label %263, label %264
263: ; preds = %233
br label %344
264: ; preds = %233
%265 = load float, float* %15
%266 = load float, float* %21
%267 = load float, float* %17
%268 = fmul float %266, %267
%269 = fmul float %265, %268
store float %269, float* %20
%270 = load float, float* %20
%271 = load float*, float** %9
%272 = load i32*, i32** %10
%273 = load i32, i32* %272
%274 = sext i32 %273 to i64
%275 = getelementptr inbounds float, float* %271, i64 %274
store float %270, float* %275
%276 = load i32, i32* %26
%277 = load i32*, i32** %8
%278 = load i32*, i32** %10
%279 = load i32, i32* %278
%280 = sext i32 %279 to i64
%281 = getelementptr inbounds i32, i32* %277, i64 %280
store i32 %276, i32* %281
%282 = load i32*, i32** %10
%283 = load i32, i32* %282
%284 = add nsw i32 %283, 1
store i32 %284, i32* %282
%285 = load i32, i32* %22
%286 = add nsw i32 %285, 1
store i32 %286, i32* %22
%287 = load i32, i32* %24
%288 = load i32, i32* %26
%289 = add nsw i32 %288, %287
store i32 %289, i32* %26
%290 = load float, float* %16
%291 = fpext float %290 to double
%292 = fsub double %291, 1.000000e+00
%293 = load float, float* %21
%294 = fpext float %293 to double
%295 = fadd double %294, %292
%296 = fptrunc double %295 to float
store float %296, float* %21
%297 = load float, float* %21
%298 = fcmp oge float %297, 0.000000e+00
br i1 %298, label %299, label %300
299: ; preds = %264
store i32 1, i32* %27
br label %301
300: ; preds = %264
store i32 2, i32* %27
br label %301
301: ; preds = %300, %299
br label %343
302: ; preds = %223
%303 = load i32, i32* %23
%304 = icmp sge i32 %303, 512
br i1 %304, label %312, label %305
305: ; preds = %302
%306 = load i32, i32* %22
%307 = add nsw i32 %306, 1
%308 = icmp sge i32 %307, 512
br i1 %308, label %312, label %309
309: ; preds = %305
%310 = load i32, i32* %22
%311 = icmp slt i32 %310, 0
br i1 %311, label %312, label %313
312: ; preds = %309, %305, %302
br label %344
313: ; preds = %309
%314 = load float, float* %15
store float %314, float* %20
%315 = load float, float* %20
%316 = load float*, float** %9
%317 = load i32*, i32** %10
%318 = load i32, i32* %317
%319 = sext i32 %318 to i64
%320 = getelementptr inbounds float, float* %316, i64 %319
store float %315, float* %320
%321 = load i32, i32* %26
%322 = load i32*, i32** %8
%323 = load i32*, i32** %10
%324 = load i32, i32* %323
%325 = sext i32 %324 to i64
%326 = getelementptr inbounds i32, i32* %322, i64 %325
store i32 %321, i32* %326
%327 = load i32*, i32** %10
%328 = load i32, i32* %327
%329 = add nsw i32 %328, 1
store i32 %329, i32* %327
%330 = load i32, i32* %22
%331 = add nsw i32 %330, 1
store i32 %331, i32* %22
%332 = load i32, i32* %24
%333 = load i32, i32* %26
%334 = add nsw i32 %333, %332
store i32 %334, i32* %26
%335 = load float, float* %16
%336 = load float, float* %21
%337 = fadd float %336, %335
store float %337, float* %21
%338 = load float, float* %21
%339 = fcmp oge float %338, 0.000000e+00
br i1 %339, label %340, label %341
340: ; preds = %313
store i32 1, i32* %27
br label %342
341: ; preds = %313
store i32 2, i32* %27
br label %342
342: ; preds = %341, %340
br label %343
343: ; preds = %223, %342, %301
br label %223
344: ; preds = %312, %263, %232, %157, %143
ret void
}

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