void pet_c_raycasting(float *x1, int nx1, float *y1, int ny1, float *z1,
                      int nz1, float *x2, int nx2, float *y2, int ny2,
                      float *z2, int nz2, int *enable, int nenable, int border,
                      int ROIxy, int ROIz) {
  int i, chk1, chk2;
  float xd, yd, zd, xmin, ymin, zmin, xmax, ymax, zmax;
  float tmin, tmax, tymin, tymax, tzmin, tzmax, buf;
  float xi1, yi1, zi1, xp1, yp1, zp1, xp2, yp2, zp2;
  xmin = (float)border;
  xmax = (float)(border + ROIxy);
  ymin = (float)border;
  ymax = (float)(border + ROIxy);
  zmin = 0.0f;
  zmax = (float)ROIz;
  for (i = 0; i < nx1; ++i) {
    xi1 = x1[i];
    yi1 = y1[i];
    zi1 = z1[i];
    xd = x2[i] - xi1;
    yd = y2[i] - yi1;
    zd = z2[i] - zi1;
    tmin = -1e9f;
    tmax = 1e9f;
    if (xd != 0.0f) {
      tmin = (xmin - xi1) / xd;
      tmax = (xmax - xi1) / xd;
      if (tmin > tmax) {
        buf = tmin;
        tmin = tmax;
        tmax = buf;
      }
    }
    if (yd != 0.0f) {
      tymin = (ymin - yi1) / yd;
      tymax = (ymax - yi1) / yd;
      if (tymin > tymax) {
        buf = tymin;
        tymin = tymax;
        tymax = buf;
      }
      if (tymin > tmin) {
        tmin = tymin;
      }
      if (tymax < tmax) {
        tmax = tymax;
      }
    }
    if (zd != 0.0f) {
      tzmin = (zmin - zi1) / zd;
      tzmax = (zmax - zi1) / zd;
      if (tzmin > tzmax) {
        buf = tzmin;
        tzmin = tzmax;
        tzmax = buf;
      }
      if (tzmin > tmin) {
        tmin = tzmin;
      }
      if (tzmax < tmax) {
        tmax = tzmax;
      }
    }
    xp1 = xi1 + xd * tmin;
    yp1 = yi1 + yd * tmin;
    zp1 = zi1 + zd * tmin;
    xp2 = xi1 + xd * tmax;
    yp2 = yi1 + yd * tmax;
    zp2 = zi1 + zd * tmax;
    chk1 = 0;
    chk2 = 0;
    if (xp1 >= xmin && xp1 <= xmax) {
      if (yp1 >= ymin && yp1 <= ymax) {
        if (zp1 >= zmin && zp1 <= zmax) {
          xp1 -= border;
          yp1 -= border;
          if ((int)(xp1 + 0.5) == ROIxy) {
            xp1 = ROIxy - 1.0f;
          }
          if ((int)(yp1 + 0.5) == ROIxy) {
            yp1 = ROIxy - 1.0f;
          }
          if ((int)(zp1 + 0.5) == ROIz) {
            zp1 = ROIz - 1.0f;
          }
          x1[i] = xp1;
          y1[i] = yp1;
          z1[i] = zp1;
          chk1 = 1;
        } else {
          continue;
        }
      } else {
        continue;
      }
    } else {
      continue;
    }
    if (xp2 >= xmin && xp2 <= xmax) {
      if (yp2 >= ymin && yp2 <= ymax) {
        if (zp2 >= zmin && zp2 <= zmax) {
          xp2 -= border;
          yp2 -= border;
          if ((int)(xp2 + 0.5) == ROIxy) {
            xp2 = ROIxy - 1.0f;
          }
          if ((int)(yp2 + 0.5) == ROIxy) {
            yp2 = ROIxy - 1.0f;
          }
          if ((int)(zp2 + 0.5) == ROIz) {
            zp2 = ROIz - 1.0f;
          }
          x2[i] = xp2;
          y2[i] = yp2;
          z2[i] = zp2;
          chk2 = 1;
        } else {
          continue;
        }
      } else {
        continue;
      }
    } else {
      continue;
    }
    if (chk1 && chk2) {
      if ((int)xp1 == (int)xp2 && (int)yp1 == (int)yp2 &&
          (int)zp1 == (int)zp2) {
        continue;
      }
      enable[i] = 1;
    }
  }
}


x86 assembly (clang, -O0):
<pet_c_raycasting>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    0x60(%rbp),%eax
mov    0x58(%rbp),%eax
mov    0x50(%rbp),%eax
mov    0x48(%rbp),%eax
mov    0x40(%rbp),%rax
mov    0x38(%rbp),%eax
mov    0x30(%rbp),%rax
mov    0x28(%rbp),%eax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%eax
mov    0x10(%rbp),%rax
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9d,-0x2c(%rbp)
cvtsi2ssl 0x50(%rbp),%xmm0
movss  %xmm0,-0x48(%rbp)
mov    0x50(%rbp),%eax
add    0x58(%rbp),%eax
cvtsi2ss %eax,%xmm0
movss  %xmm0,-0x54(%rbp)
cvtsi2ssl 0x50(%rbp),%xmm0
movss  %xmm0,-0x4c(%rbp)
mov    0x50(%rbp),%eax
add    0x58(%rbp),%eax
cvtsi2ss %eax,%xmm0
movss  %xmm0,-0x58(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x50(%rbp)
cvtsi2ssl 0x60(%rbp),%xmm0
movss  %xmm0,-0x5c(%rbp)
movl   $0x0,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    18ea <pet_c_raycasting+0x7ea>
mov    -0x8(%rbp),%rax
movslq -0x30(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x7c(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x30(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x80(%rbp)
mov    -0x28(%rbp),%rax
movslq -0x30(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x84(%rbp)
ff
mov    0x10(%rbp),%rax
movslq -0x30(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
subss  -0x7c(%rbp),%xmm0
movss  %xmm0,-0x3c(%rbp)
mov    0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
subss  -0x80(%rbp),%xmm0
movss  %xmm0,-0x40(%rbp)
mov    0x30(%rbp),%rax
movslq -0x30(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
subss  -0x84(%rbp),%xmm0
ff
movss  %xmm0,-0x44(%rbp)
movss  0xde1(%rip),%xmm0
movss  %xmm0,-0x60(%rbp)
movss  0xdd0(%rip),%xmm0
movss  %xmm0,-0x64(%rbp)
movss  -0x3c(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jne    1251 <pet_c_raycasting+0x151>
jp     1251 <pet_c_raycasting+0x151>
jmp    12ab <pet_c_raycasting+0x1ab>
movss  -0x48(%rbp),%xmm0
subss  -0x7c(%rbp),%xmm0
divss  -0x3c(%rbp),%xmm0
movss  %xmm0,-0x60(%rbp)
movss  -0x54(%rbp),%xmm0
subss  -0x7c(%rbp),%xmm0
divss  -0x3c(%rbp),%xmm0
movss  %xmm0,-0x64(%rbp)
movss  -0x60(%rbp),%xmm0
ucomiss -0x64(%rbp),%xmm0
jbe    12a6 <pet_c_raycasting+0x1a6>
movss  -0x60(%rbp),%xmm0
movss  %xmm0,-0x78(%rbp)
movss  -0x64(%rbp),%xmm0
movss  %xmm0,-0x60(%rbp)
movss  -0x78(%rbp),%xmm0
movss  %xmm0,-0x64(%rbp)
jmp    12ab <pet_c_raycasting+0x1ab>
movss  -0x40(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jne    12c7 <pet_c_raycasting+0x1c7>
jp     12c7 <pet_c_raycasting+0x1c7>
jmp    1357 <pet_c_raycasting+0x257>
movss  -0x4c(%rbp),%xmm0
subss  -0x80(%rbp),%xmm0
divss  -0x40(%rbp),%xmm0
movss  %xmm0,-0x68(%rbp)
movss  -0x58(%rbp),%xmm0
subss  -0x80(%rbp),%xmm0
divss  -0x40(%rbp),%xmm0
movss  %xmm0,-0x6c(%rbp)
movss  -0x68(%rbp),%xmm0
ucomiss -0x6c(%rbp),%xmm0
jbe    131c <pet_c_raycasting+0x21c>
movss  -0x68(%rbp),%xmm0
movss  %xmm0,-0x78(%rbp)
movss  -0x6c(%rbp),%xmm0
movss  %xmm0,-0x68(%rbp)
movss  -0x78(%rbp),%xmm0
movss  %xmm0,-0x6c(%rbp)
movss  -0x68(%rbp),%xmm0
ucomiss -0x60(%rbp),%xmm0
jbe    1335 <pet_c_raycasting+0x235>
movss  -0x68(%rbp),%xmm0
movss  %xmm0,-0x60(%rbp)
movss  -0x6c(%rbp),%xmm1
movss  -0x64(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    1352 <pet_c_raycasting+0x252>
movss  -0x6c(%rbp),%xmm0
movss  %xmm0,-0x64(%rbp)
jmp    1357 <pet_c_raycasting+0x257>
movss  -0x44(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jne    1373 <pet_c_raycasting+0x273>
jp     1373 <pet_c_raycasting+0x273>
jmp    1409 <pet_c_raycasting+0x309>
movss  -0x50(%rbp),%xmm0
subss  -0x84(%rbp),%xmm0
ff
divss  -0x44(%rbp),%xmm0
movss  %xmm0,-0x70(%rbp)
movss  -0x5c(%rbp),%xmm0
subss  -0x84(%rbp),%xmm0
ff
divss  -0x44(%rbp),%xmm0
movss  %xmm0,-0x74(%rbp)
movss  -0x70(%rbp),%xmm0
ucomiss -0x74(%rbp),%xmm0
jbe    13ce <pet_c_raycasting+0x2ce>
movss  -0x70(%rbp),%xmm0
movss  %xmm0,-0x78(%rbp)
movss  -0x74(%rbp),%xmm0
movss  %xmm0,-0x70(%rbp)
movss  -0x78(%rbp),%xmm0
movss  %xmm0,-0x74(%rbp)
movss  -0x70(%rbp),%xmm0
ucomiss -0x60(%rbp),%xmm0
jbe    13e7 <pet_c_raycasting+0x2e7>
movss  -0x70(%rbp),%xmm0
movss  %xmm0,-0x60(%rbp)
movss  -0x74(%rbp),%xmm1
movss  -0x64(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    1404 <pet_c_raycasting+0x304>
movss  -0x74(%rbp),%xmm0
movss  %xmm0,-0x64(%rbp)
jmp    1409 <pet_c_raycasting+0x309>
movss  -0x7c(%rbp),%xmm1
movss  -0x3c(%rbp),%xmm0
movss  -0x60(%rbp),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x88(%rbp)
ff
movss  -0x80(%rbp),%xmm1
movss  -0x40(%rbp),%xmm0
movss  -0x60(%rbp),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x8c(%rbp)
ff
movss  -0x84(%rbp),%xmm1
ff
movss  -0x44(%rbp),%xmm0
movss  -0x60(%rbp),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x90(%rbp)
ff
movss  -0x7c(%rbp),%xmm1
movss  -0x3c(%rbp),%xmm0
movss  -0x64(%rbp),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x94(%rbp)
ff
movss  -0x80(%rbp),%xmm1
movss  -0x40(%rbp),%xmm0
movss  -0x64(%rbp),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x98(%rbp)
ff
movss  -0x84(%rbp),%xmm1
ff
movss  -0x44(%rbp),%xmm0
movss  -0x64(%rbp),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x9c(%rbp)
ff
movl   $0x0,-0x34(%rbp)
movl   $0x0,-0x38(%rbp)
movss  -0x88(%rbp),%xmm0
ff
ucomiss -0x48(%rbp),%xmm0
jb     169a <pet_c_raycasting+0x59a>
movss  -0x88(%rbp),%xmm1
ff
movss  -0x54(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jb     169a <pet_c_raycasting+0x59a>
movss  -0x8c(%rbp),%xmm0
ff
ucomiss -0x4c(%rbp),%xmm0
jb     1690 <pet_c_raycasting+0x590>
movss  -0x8c(%rbp),%xmm1
ff
movss  -0x58(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jb     1690 <pet_c_raycasting+0x590>
movss  -0x90(%rbp),%xmm0
ff
ucomiss -0x50(%rbp),%xmm0
jb     1686 <pet_c_raycasting+0x586>
movss  -0x90(%rbp),%xmm1
ff
movss  -0x5c(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jb     1686 <pet_c_raycasting+0x586>
cvtsi2ssl 0x50(%rbp),%xmm1
movss  -0x88(%rbp),%xmm0
ff
subss  %xmm1,%xmm0
movss  %xmm0,-0x88(%rbp)
ff
cvtsi2ssl 0x50(%rbp),%xmm1
movss  -0x8c(%rbp),%xmm0
ff
subss  %xmm1,%xmm0
movss  %xmm0,-0x8c(%rbp)
ff
movss  -0x88(%rbp),%xmm0
ff
cvtss2sd %xmm0,%xmm0
movsd  0xa7b(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
cmp    0x58(%rbp),%eax
jne    15bf <pet_c_raycasting+0x4bf>
cvtsi2ssl 0x58(%rbp),%xmm0
movss  0xa55(%rip),%xmm1
subss  %xmm1,%xmm0
movss  %xmm0,-0x88(%rbp)
ff
movss  -0x8c(%rbp),%xmm0
ff
cvtss2sd %xmm0,%xmm0
movsd  0xa3d(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
cmp    0x58(%rbp),%eax
jne    15fd <pet_c_raycasting+0x4fd>
cvtsi2ssl 0x58(%rbp),%xmm0
movss  0xa17(%rip),%xmm1
subss  %xmm1,%xmm0
movss  %xmm0,-0x8c(%rbp)
ff
movss  -0x90(%rbp),%xmm0
ff
cvtss2sd %xmm0,%xmm0
movsd  0x9ff(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
cmp    0x60(%rbp),%eax
jne    163b <pet_c_raycasting+0x53b>
cvtsi2ssl 0x60(%rbp),%xmm0
movss  0x9d9(%rip),%xmm1
subss  %xmm1,%xmm0
movss  %xmm0,-0x90(%rbp)
ff
movss  -0x88(%rbp),%xmm0
ff
mov    -0x8(%rbp),%rax
movslq -0x30(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x8c(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
movslq -0x30(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x90(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movslq -0x30(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
movl   $0x1,-0x34(%rbp)
jmp    168b <pet_c_raycasting+0x58b>
jmp    18dc <pet_c_raycasting+0x7dc>
jmp    1695 <pet_c_raycasting+0x595>
jmp    18dc <pet_c_raycasting+0x7dc>
jmp    169f <pet_c_raycasting+0x59f>
jmp    18dc <pet_c_raycasting+0x7dc>
movss  -0x94(%rbp),%xmm0
ff
ucomiss -0x48(%rbp),%xmm0
jb     1862 <pet_c_raycasting+0x762>
movss  -0x94(%rbp),%xmm1
ff
movss  -0x54(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jb     1862 <pet_c_raycasting+0x762>
movss  -0x98(%rbp),%xmm0
ff
ucomiss -0x4c(%rbp),%xmm0
jb     1858 <pet_c_raycasting+0x758>
movss  -0x98(%rbp),%xmm1
ff
movss  -0x58(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jb     1858 <pet_c_raycasting+0x758>
movss  -0x9c(%rbp),%xmm0
ff
ucomiss -0x50(%rbp),%xmm0
jb     184e <pet_c_raycasting+0x74e>
movss  -0x9c(%rbp),%xmm1
ff
movss  -0x5c(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jb     184e <pet_c_raycasting+0x74e>
cvtsi2ssl 0x50(%rbp),%xmm1
movss  -0x94(%rbp),%xmm0
ff
subss  %xmm1,%xmm0
movss  %xmm0,-0x94(%rbp)
ff
cvtsi2ssl 0x50(%rbp),%xmm1
movss  -0x98(%rbp),%xmm0
ff
subss  %xmm1,%xmm0
movss  %xmm0,-0x98(%rbp)
ff
movss  -0x94(%rbp),%xmm0
ff
cvtss2sd %xmm0,%xmm0
movsd  0x8b3(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
cmp    0x58(%rbp),%eax
jne    1787 <pet_c_raycasting+0x687>
cvtsi2ssl 0x58(%rbp),%xmm0
movss  0x88d(%rip),%xmm1
subss  %xmm1,%xmm0
movss  %xmm0,-0x94(%rbp)
ff
movss  -0x98(%rbp),%xmm0
ff
cvtss2sd %xmm0,%xmm0
movsd  0x875(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
cmp    0x58(%rbp),%eax
jne    17c5 <pet_c_raycasting+0x6c5>
cvtsi2ssl 0x58(%rbp),%xmm0
movss  0x84f(%rip),%xmm1
subss  %xmm1,%xmm0
movss  %xmm0,-0x98(%rbp)
ff
movss  -0x9c(%rbp),%xmm0
ff
cvtss2sd %xmm0,%xmm0
movsd  0x837(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
cmp    0x60(%rbp),%eax
jne    1803 <pet_c_raycasting+0x703>
cvtsi2ssl 0x60(%rbp),%xmm0
movss  0x811(%rip),%xmm1
subss  %xmm1,%xmm0
movss  %xmm0,-0x9c(%rbp)
ff
movss  -0x94(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movslq -0x30(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x98(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x9c(%rbp),%xmm0
ff
mov    0x30(%rbp),%rax
movslq -0x30(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
movl   $0x1,-0x38(%rbp)
jmp    1853 <pet_c_raycasting+0x753>
jmp    18dc <pet_c_raycasting+0x7dc>
jmp    185d <pet_c_raycasting+0x75d>
jmp    18dc <pet_c_raycasting+0x7dc>
jmp    1867 <pet_c_raycasting+0x767>
jmp    18dc <pet_c_raycasting+0x7dc>
cmpl   $0x0,-0x34(%rbp)
je     18d7 <pet_c_raycasting+0x7d7>
cmpl   $0x0,-0x38(%rbp)
je     18d7 <pet_c_raycasting+0x7d7>
cvttss2si -0x88(%rbp),%eax
ff
cvttss2si -0x94(%rbp),%ecx
ff
cmp    %ecx,%eax
jne    18c8 <pet_c_raycasting+0x7c8>
cvttss2si -0x8c(%rbp),%eax
ff
cvttss2si -0x98(%rbp),%ecx
ff
cmp    %ecx,%eax
jne    18c8 <pet_c_raycasting+0x7c8>
cvttss2si -0x90(%rbp),%eax
ff
cvttss2si -0x9c(%rbp),%ecx
ff
cmp    %ecx,%eax
jne    18c8 <pet_c_raycasting+0x7c8>
jmp    18dc <pet_c_raycasting+0x7dc>
mov    0x40(%rbp),%rax
movslq -0x30(%rbp),%rcx
movl   $0x1,(%rax,%rcx,4)
jmp    18dc <pet_c_raycasting+0x7dc>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    118e <pet_c_raycasting+0x8e>
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<pet_c_raycasting>:
push   %rbp
push   %r15
push   %r14
push   %rbx
test   %esi,%esi
jle    14a9 <pet_c_raycasting+0x3a9>
mov    0x78(%rsp),%r10d
mov    0x70(%rsp),%r14d
mov    0x58(%rsp),%r9
mov    0x48(%rsp),%r11
mov    0x38(%rsp),%r15
mov    0x28(%rsp),%rcx
mov    0x68(%rsp),%ebp
lea    (%r14,%rbp,1),%ebx
movd   %ebx,%xmm0
movd   %ebp,%xmm1
punpckldq %xmm0,%xmm1
cvtsi2ss %r10d,%xmm2
cvtdq2ps %xmm1,%xmm6
cvtsi2ss %r14d,%xmm12
movss  0xeab(%rip),%xmm0
addss  %xmm0,%xmm12
addss  %xmm2,%xmm0
movss  %xmm0,-0x4c(%rsp)
mov    %esi,%esi
movd   %r14d,%xmm0
pshufd $0x50,%xmm0,%xmm0
movdqa %xmm0,-0x38(%rsp)
movaps %xmm2,-0x28(%rsp)
movq   %xmm2,%xmm1
pxor   %xmm0,%xmm0
shufps $0xe2,%xmm0,%xmm1
movaps %xmm1,-0x18(%rsp)
movaps %xmm6,%xmm15
shufps $0x55,%xmm6,%xmm15
movaps %xmm6,%xmm0
shufps $0x0,%xmm6,%xmm0
movaps %xmm0,-0x48(%rsp)
xor    %ebx,%ebx
xorps  %xmm14,%xmm14
jmp    11c5 <pet_c_raycasting+0xc5>
nopl   0x0(%rax)
movl   $0x1,(%r9,%rbx,4)
add    $0x1,%rbx
cmp    %rbx,%rsi
je     14a9 <pet_c_raycasting+0x3a9>
movss  (%rdi,%rbx,4),%xmm5
movss  (%rcx,%rbx,4),%xmm0
movss  (%r15,%rbx,4),%xmm4
unpcklps %xmm0,%xmm4
movss  (%rdx,%rbx,4),%xmm0
movaps %xmm0,%xmm3
unpcklps %xmm5,%xmm3
subps  %xmm3,%xmm4
movaps %xmm4,%xmm1
shufps $0x55,%xmm4,%xmm1
ucomiss %xmm14,%xmm1
movaps 0xe18(%rip),%xmm2
jne    11fc <pet_c_raycasting+0xfc>
jnp    1219 <pet_c_raycasting+0x119>
shufps $0x0,%xmm5,%xmm5
movaps %xmm6,%xmm2
subps  %xmm5,%xmm2
divps  %xmm1,%xmm2
movaps %xmm2,%xmm1
shufps $0x55,%xmm2,%xmm1
ucomiss %xmm1,%xmm2
ja     1219 <pet_c_raycasting+0x119>
shufps $0xe1,%xmm2,%xmm2
ucomiss %xmm14,%xmm4
movaps %xmm2,%xmm7
shufps $0x55,%xmm2,%xmm7
jne    1228 <pet_c_raycasting+0x128>
jnp    1260 <pet_c_raycasting+0x160>
shufps $0x0,%xmm0,%xmm0
movaps %xmm6,%xmm1
subps  %xmm0,%xmm1
movaps %xmm4,%xmm0
shufps $0x0,%xmm4,%xmm0
divps  %xmm0,%xmm1
movaps %xmm1,%xmm0
shufps $0x55,%xmm1,%xmm0
movaps %xmm0,%xmm5
minss  %xmm1,%xmm5
maxss  %xmm0,%xmm1
maxss  %xmm7,%xmm5
ucomiss %xmm1,%xmm2
jbe    1263 <pet_c_raycasting+0x163>
movaps %xmm1,%xmm2
jmp    1263 <pet_c_raycasting+0x163>
nopl   0x0(%rax)
movaps %xmm7,%xmm5
movss  (%r8,%rbx,4),%xmm0
movss  (%r11,%rbx,4),%xmm7
subss  %xmm0,%xmm7
ucomiss %xmm14,%xmm7
jne    127b <pet_c_raycasting+0x17b>
jnp    12c0 <pet_c_raycasting+0x1c0>
movaps %xmm0,%xmm1
shufps $0x0,%xmm0,%xmm1
movaps -0x18(%rsp),%xmm9
subps  %xmm1,%xmm9
movaps %xmm7,%xmm1
shufps $0x0,%xmm7,%xmm1
divps  %xmm1,%xmm9
movaps %xmm9,%xmm1
shufps $0x55,%xmm9,%xmm1
movaps %xmm1,%xmm13
minss  %xmm9,%xmm13
maxss  %xmm1,%xmm9
maxss  %xmm5,%xmm13
ucomiss %xmm9,%xmm2
jbe    12c4 <pet_c_raycasting+0x1c4>
jmp    12c8 <pet_c_raycasting+0x1c8>
nopl   0x0(%rax,%rax,1)
movaps %xmm5,%xmm13
movaps %xmm2,%xmm9
movaps %xmm13,%xmm2
shufps $0x0,%xmm13,%xmm2
mulps  %xmm4,%xmm2
addps  %xmm3,%xmm2
movaps %xmm2,%xmm1
shufps $0x55,%xmm2,%xmm1
ucomiss %xmm6,%xmm1
jb     11b8 <pet_c_raycasting+0xb8>
ucomiss %xmm1,%xmm15
jb     11b8 <pet_c_raycasting+0xb8>
ucomiss %xmm6,%xmm2
jb     11b8 <pet_c_raycasting+0xb8>
ucomiss %xmm2,%xmm15
jb     11b8 <pet_c_raycasting+0xb8>
mulss  %xmm7,%xmm13
addss  %xmm0,%xmm13
ucomiss %xmm14,%xmm13
jb     11b8 <pet_c_raycasting+0xb8>
movaps -0x28(%rsp),%xmm1
ucomiss %xmm13,%xmm1
jb     11b8 <pet_c_raycasting+0xb8>
subps  -0x48(%rsp),%xmm2
cvtps2pd %xmm2,%xmm1
addpd  0xce9(%rip),%xmm1
cvttpd2dq %xmm1,%xmm1
pcmpeqd -0x38(%rsp),%xmm1
pshufd $0x50,%xmm1,%xmm1
movmskpd %xmm1,%ebp
movaps %xmm12,%xmm8
test   $0x2,%bpl
jne    135d <pet_c_raycasting+0x25d>
movaps %xmm2,%xmm8
shufps $0x55,%xmm2,%xmm8
movaps %xmm12,%xmm11
test   $0x1,%bpl
jne    136b <pet_c_raycasting+0x26b>
movaps %xmm2,%xmm11
xorps  %xmm1,%xmm1
cvtss2sd %xmm13,%xmm1
addsd  0xcb5(%rip),%xmm1
cvttsd2si %xmm1,%ebp
movss  -0x4c(%rsp),%xmm10
cmp    %r10d,%ebp
je     138f <pet_c_raycasting+0x28f>
movaps %xmm13,%xmm10
movaps %xmm9,%xmm1
shufps $0x0,%xmm9,%xmm1
mulps  %xmm1,%xmm4
addps  %xmm3,%xmm4
movss  %xmm8,(%rdi,%rbx,4)
movss  %xmm11,(%rdx,%rbx,4)
movss  %xmm10,(%r8,%rbx,4)
movaps %xmm4,%xmm1
shufps $0x55,%xmm4,%xmm1
ucomiss %xmm6,%xmm1
jb     11b8 <pet_c_raycasting+0xb8>
ucomiss %xmm1,%xmm15
jb     11b8 <pet_c_raycasting+0xb8>
ucomiss %xmm6,%xmm4
jb     11b8 <pet_c_raycasting+0xb8>
ucomiss %xmm4,%xmm15
jb     11b8 <pet_c_raycasting+0xb8>
mulss  %xmm9,%xmm7
addss  %xmm0,%xmm7
ucomiss %xmm14,%xmm7
jb     11b8 <pet_c_raycasting+0xb8>
movaps -0x28(%rsp),%xmm0
ucomiss %xmm7,%xmm0
jb     11b8 <pet_c_raycasting+0xb8>
subps  -0x48(%rsp),%xmm4
cvtps2pd %xmm4,%xmm0
addpd  0xc12(%rip),%xmm0
cvttpd2dq %xmm0,%xmm0
pcmpeqd -0x38(%rsp),%xmm0
pshufd $0x50,%xmm0,%xmm0
movmskpd %xmm0,%ebp
movaps %xmm12,%xmm0
test   $0x2,%bpl
jne    1432 <pet_c_raycasting+0x332>
movaps %xmm4,%xmm0
shufps $0x55,%xmm4,%xmm0
movaps %xmm12,%xmm2
test   $0x1,%bpl
jne    143f <pet_c_raycasting+0x33f>
movaps %xmm4,%xmm2
xorps  %xmm1,%xmm1
cvtss2sd %xmm7,%xmm1
addsd  0xbe2(%rip),%xmm1
cvttsd2si %xmm1,%ebp
movss  -0x4c(%rsp),%xmm3
cmp    %r10d,%ebp
je     1460 <pet_c_raycasting+0x360>
movaps %xmm7,%xmm3
movss  %xmm0,(%rcx,%rbx,4)
movss  %xmm2,(%r15,%rbx,4)
cvttss2si %xmm8,%ebp
movss  %xmm3,(%r11,%rbx,4)
cvttss2si %xmm0,%eax
cmp    %eax,%ebp
jne    11b0 <pet_c_raycasting+0xb0>
cvttss2si %xmm11,%eax
cvttss2si %xmm2,%ebp
cmp    %ebp,%eax
jne    11b0 <pet_c_raycasting+0xb0>
cvttss2si %xmm10,%eax
cvttss2si %xmm3,%ebp
cmp    %ebp,%eax
jne    11b0 <pet_c_raycasting+0xb0>
jmp    11b8 <pet_c_raycasting+0xb8>
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret

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

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