#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
double fabs(double);
int find_out_point(double orig_xyz[3], double r_dxyz[3], int ijk[3],
                   double in_point[3], double ray_direction[3],
                   int face_sect[3], double out_point[3]) {
  int i, j, mincomp, intersection;
  double minmax[6], t[3], mint;
  int i1, j1;
  for (i = 0; i < 3; i++)
    face_sect[i] = -1;
  for (i = 0; i < 6; i++) {
    i1 = i / 2;
    j1 = i % 2;
    minmax[i] = orig_xyz[i1] + (ijk[i1] + j1) * r_dxyz[i1];
  }
  for (i = 0; i < 3; i++) {
    if (ray_direction[i] > 0)
      t[i] =
          (minmax[i * 2 + 1] - in_point[i]) / (ray_direction[i] + 0.00000001);
    else if (ray_direction[i] < 0)
      t[i] = (in_point[i] - minmax[i * 2]) / (-ray_direction[i] + 0.00000001);
  }
  mint = 1.0E+17;
  mincomp = -1;
  for (i = 0; i < 3; i++) {
    if ((mint > t[i]) && (t[i] > 0.00000001)) {
      for (j = 0; j < 3; j++)
        out_point[j] = in_point[j] + t[i] * ray_direction[j];
      if ((out_point[0] >= minmax[0] - 0.00000001) &&
          (out_point[0] <= minmax[1] + 0.00000001) &&
          (out_point[1] >= minmax[2] - 0.00000001) &&
          (out_point[1] <= minmax[3] + 0.00000001) &&
          (out_point[2] >= minmax[4] - 0.00000001) &&
          (out_point[2] <= minmax[5] + 0.00000001)) {
        mint = t[i];
        mincomp = i;
      }
    }
  }
  if ((mincomp >= 0) && (mincomp <= 2)) {
    intersection = 1;
    for (i = 0; i < 3; i++)
      out_point[i] = in_point[i] + mint * ray_direction[i];
  } else {
    intersection = 0;
    for (i = 0; i < 3; i++)
      out_point[i] = in_point[i];
  }
  for (i = 0; i < 3; i++) {
    if (fabs(out_point[i] - minmax[i * 2]) < 0.00000001)
      face_sect[i] = i * 2;
    else if (fabs(out_point[i] - minmax[i * 2 + 1]) < 0.00000001)
      face_sect[i] = i * 2 + 1;
  }
  return (intersection);
}


x86 assembly (clang, -O0):
<find_out_point>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    0x10(%rbp),%rax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
movl   $0x0,-0x34(%rbp)
cmpl   $0x3,-0x34(%rbp)
jge    1152 <find_out_point+0x52>
mov    -0x30(%rbp),%rax
movslq -0x34(%rbp),%rcx
movl   $0xffffffff,(%rax,%rcx,4)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    112b <find_out_point+0x2b>
movl   $0x0,-0x34(%rbp)
cmpl   $0x6,-0x34(%rbp)
jge    11dd <find_out_point+0xdd>
mov    -0x34(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,-0x9c(%rbp)
mov    -0x34(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %edx,-0xa0(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x9c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x18(%rbp),%rax
movslq -0x9c(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
add    -0xa0(%rbp),%eax
cvtsi2sd %eax,%xmm0
mov    -0x10(%rbp),%rax
movslq -0x9c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movslq -0x34(%rbp),%rax
movsd  %xmm0,-0x70(%rbp,%rax,8)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1159 <find_out_point+0x59>
movl   $0x0,-0x34(%rbp)
cmpl   $0x3,-0x34(%rbp)
jge    12db <find_out_point+0x1db>
mov    -0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1251 <find_out_point+0x151>
mov    -0x34(%rbp),%eax
shl    $0x1,%eax
add    $0x1,%eax
cltq
movsd  -0x70(%rbp,%rax,8),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  0xdd2(%rip),%xmm1
addsd  (%rax,%rcx,8),%xmm1
divsd  %xmm1,%xmm0
movslq -0x34(%rbp),%rax
movsd  %xmm0,-0x90(%rbp,%rax,8)
ff ff
jmp    12c8 <find_out_point+0x1c8>
mov    -0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
xorps  %xmm0,%xmm0
ucomisd (%rax,%rcx,8),%xmm0
jbe    12c3 <find_out_point+0x1c3>
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x34(%rbp),%eax
shl    $0x1,%eax
cltq
subsd  -0x70(%rbp,%rax,8),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  0xd5a(%rip),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movslq -0x34(%rbp),%rax
movsd  %xmm0,-0x90(%rbp,%rax,8)
ff ff
jmp    12c8 <find_out_point+0x1c8>
jmp    12cd <find_out_point+0x1cd>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    11e4 <find_out_point+0xe4>
movsd  0xd1d(%rip),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movl   $0xffffffff,-0x3c(%rbp)
movl   $0x0,-0x34(%rbp)
cmpl   $0x3,-0x34(%rbp)
jge    1495 <find_out_point+0x395>
movsd  -0x98(%rbp),%xmm0
ff
movslq -0x34(%rbp),%rax
ucomisd -0x90(%rbp,%rax,8),%xmm0
ff ff
jbe    1482 <find_out_point+0x382>
movslq -0x34(%rbp),%rax
movsd  -0x90(%rbp,%rax,8),%xmm0
ff ff
movsd  0xcd5(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1482 <find_out_point+0x382>
movl   $0x0,-0x38(%rbp)
cmpl   $0x3,-0x38(%rbp)
jge    1398 <find_out_point+0x298>
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
movslq -0x34(%rbp),%rax
movsd  -0x90(%rbp,%rax,8),%xmm0
ff ff
mov    -0x28(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x10(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    1344 <find_out_point+0x244>
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  -0x70(%rbp),%xmm1
movsd  0xc5b(%rip),%xmm2
subsd  %xmm2,%xmm1
ucomisd %xmm1,%xmm0
jb     147d <find_out_point+0x37d>
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm1
movsd  0xc3d(%rip),%xmm0
addsd  -0x68(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jb     147d <find_out_point+0x37d>
mov    0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  -0x60(%rbp),%xmm1
movsd  0xc18(%rip),%xmm2
subsd  %xmm2,%xmm1
ucomisd %xmm1,%xmm0
jb     147d <find_out_point+0x37d>
mov    0x10(%rbp),%rax
movsd  0x8(%rax),%xmm1
movsd  0xbf9(%rip),%xmm0
addsd  -0x58(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jb     147d <find_out_point+0x37d>
mov    0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  -0x50(%rbp),%xmm1
movsd  0xbd4(%rip),%xmm2
subsd  %xmm2,%xmm1
ucomisd %xmm1,%xmm0
jb     147d <find_out_point+0x37d>
mov    0x10(%rbp),%rax
movsd  0x10(%rax),%xmm1
movsd  0xbb5(%rip),%xmm0
addsd  -0x48(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jb     147d <find_out_point+0x37d>
movslq -0x34(%rbp),%rax
movsd  -0x90(%rbp,%rax,8),%xmm0
ff ff
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x34(%rbp),%eax
mov    %eax,-0x3c(%rbp)
jmp    1482 <find_out_point+0x382>
jmp    1487 <find_out_point+0x387>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    12f9 <find_out_point+0x1f9>
cmpl   $0x0,-0x3c(%rbp)
jl     150b <find_out_point+0x40b>
cmpl   $0x2,-0x3c(%rbp)
jg     150b <find_out_point+0x40b>
movl   $0x1,-0x40(%rbp)
movl   $0x0,-0x34(%rbp)
cmpl   $0x3,-0x34(%rbp)
jge    1506 <find_out_point+0x406>
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
movsd  -0x98(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    14b7 <find_out_point+0x3b7>
jmp    1550 <find_out_point+0x450>
movl   $0x0,-0x40(%rbp)
movl   $0x0,-0x34(%rbp)
cmpl   $0x3,-0x34(%rbp)
jge    154b <find_out_point+0x44b>
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1519 <find_out_point+0x419>
jmp    1550 <find_out_point+0x450>
movl   $0x0,-0x34(%rbp)
cmpl   $0x3,-0x34(%rbp)
jge    1616 <find_out_point+0x516>
mov    0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x34(%rbp),%eax
shl    $0x1,%eax
cltq
subsd  -0x70(%rbp,%rax,8),%xmm1
movaps 0xa8d(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  0xa79(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    15af <find_out_point+0x4af>
mov    -0x34(%rbp),%edx
shl    $0x1,%edx
mov    -0x30(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
jmp    1603 <find_out_point+0x503>
mov    0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x34(%rbp),%eax
shl    $0x1,%eax
add    $0x1,%eax
cltq
subsd  -0x70(%rbp,%rax,8),%xmm1
movaps 0xa3c(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  0xa28(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    15fe <find_out_point+0x4fe>
mov    -0x34(%rbp),%edx
shl    $0x1,%edx
add    $0x1,%edx
mov    -0x30(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
jmp    1603 <find_out_point+0x503>
jmp    1608 <find_out_point+0x508>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1557 <find_out_point+0x457>
mov    -0x40(%rbp),%eax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<find_out_point>:
movl   $0xffffffff,0x8(%r9)
ff
movq   $0xffffffffffffffff,(%r9)
mov    (%rdx),%eax
mov    0x4(%rdx),%r10d
cvtsi2sd %eax,%xmm11
movsd  (%rsi),%xmm1
movsd  0x8(%rsi),%xmm2
mulsd  %xmm1,%xmm11
movsd  (%rdi),%xmm3
movsd  0x8(%rdi),%xmm0
addsd  %xmm3,%xmm11
add    $0x1,%eax
cvtsi2sd %eax,%xmm12
mulsd  %xmm1,%xmm12
addsd  %xmm3,%xmm12
cvtsi2sd %r10d,%xmm15
mulsd  %xmm2,%xmm15
add    $0x1,%r10d
xorps  %xmm3,%xmm3
cvtsi2sd %r10d,%xmm3
mulsd  %xmm2,%xmm3
mov    0x8(%rdx),%eax
cvtsi2sd %eax,%xmm5
movsd  0x10(%rsi),%xmm1
add    $0x1,%eax
cvtsi2sd %eax,%xmm13
movsd  (%r8),%xmm9
xorpd  %xmm2,%xmm2
ucomisd %xmm2,%xmm9
jbe    119f <find_out_point+0x9f>
movapd %xmm12,%xmm14
subsd  (%rcx),%xmm14
movsd  0xe68(%rip),%xmm2
addsd  %xmm9,%xmm2
jmp    11bd <find_out_point+0xbd>
ucomisd %xmm9,%xmm2
jbe    11c2 <find_out_point+0xc2>
movsd  (%rcx),%xmm14
subsd  %xmm11,%xmm14
movsd  0xe48(%rip),%xmm2
subsd  %xmm9,%xmm2
divsd  %xmm2,%xmm14
movsd  0x10(%rdi),%xmm4
mulsd  %xmm1,%xmm5
mulsd  %xmm1,%xmm13
addsd  %xmm0,%xmm15
addsd  %xmm0,%xmm3
movsd  0x8(%r8),%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1200 <find_out_point+0x100>
movapd %xmm3,%xmm1
subsd  0x8(%rcx),%xmm1
addsd  0xe06(%rip),%xmm0
divsd  %xmm0,%xmm1
jmp    1220 <find_out_point+0x120>
ucomisd %xmm0,%xmm1
jbe    1220 <find_out_point+0x120>
movsd  0x8(%rcx),%xmm1
subsd  %xmm15,%xmm1
movsd  0xde8(%rip),%xmm2
subsd  %xmm0,%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm4,%xmm5
addsd  %xmm4,%xmm13
movsd  0x10(%r8),%xmm0
xorpd  %xmm2,%xmm2
ucomisd %xmm2,%xmm0
jbe    1251 <find_out_point+0x151>
movapd %xmm13,%xmm6
subsd  0x10(%rcx),%xmm6
addsd  0xdb5(%rip),%xmm0
divsd  %xmm0,%xmm6
jmp    1270 <find_out_point+0x170>
ucomisd %xmm0,%xmm2
jbe    1270 <find_out_point+0x170>
movsd  0x10(%rcx),%xmm6
subsd  %xmm5,%xmm6
movsd  0xd98(%rip),%xmm2
subsd  %xmm0,%xmm2
divsd  %xmm2,%xmm6
mov    0x8(%rsp),%rdi
movsd  0xd8b(%rip),%xmm7
movapd %xmm11,%xmm4
addsd  %xmm7,%xmm4
movsd  0xd72(%rip),%xmm0
movapd %xmm12,%xmm8
addsd  %xmm0,%xmm8
movapd %xmm15,%xmm10
addsd  %xmm7,%xmm10
movapd %xmm3,%xmm2
addsd  %xmm0,%xmm2
movsd  %xmm2,-0x10(%rsp)
addsd  %xmm5,%xmm7
movapd %xmm13,%xmm2
addsd  %xmm0,%xmm2
movsd  %xmm2,-0x18(%rsp)
movsd  0xd45(%rip),%xmm0
ucomisd %xmm14,%xmm0
mov    $0xffffffff,%eax
movsd  %xmm3,-0x8(%rsp)
jbe    1383 <find_out_point+0x283>
ucomisd 0xd16(%rip),%xmm14
jbe    1383 <find_out_point+0x283>
mulsd  %xmm14,%xmm9
addsd  (%rcx),%xmm9
movsd  %xmm9,(%rdi)
movsd  0x8(%r8),%xmm2
mulsd  %xmm14,%xmm2
addsd  0x8(%rcx),%xmm2
movsd  %xmm2,0x8(%rdi)
movsd  0x10(%r8),%xmm3
mulsd  %xmm14,%xmm3
addsd  0x10(%rcx),%xmm3
movsd  %xmm3,0x10(%rdi)
ucomisd %xmm4,%xmm9
jb     1383 <find_out_point+0x283>
ucomisd %xmm9,%xmm8
jb     1383 <find_out_point+0x283>
ucomisd %xmm10,%xmm2
jb     1383 <find_out_point+0x283>
movapd %xmm5,%xmm9
movsd  -0x10(%rsp),%xmm5
ucomisd %xmm2,%xmm5
movapd %xmm9,%xmm5
jb     1383 <find_out_point+0x283>
ucomisd %xmm7,%xmm3
setb   %sil
movsd  -0x18(%rsp),%xmm0
ucomisd %xmm3,%xmm0
setb   %al
or     %sil,%al
movzbl %al,%eax
test   %al,%al
je     137c <find_out_point+0x27c>
movsd  0xc94(%rip),%xmm14
neg    %eax
movapd %xmm14,%xmm0
ucomisd %xmm1,%xmm0
jbe    1421 <find_out_point+0x321>
ucomisd 0xc6b(%rip),%xmm1
jbe    1421 <find_out_point+0x321>
movapd %xmm5,%xmm14
movsd  (%r8),%xmm3
mulsd  %xmm1,%xmm3
addsd  (%rcx),%xmm3
movsd  %xmm3,(%rdi)
movsd  0x8(%r8),%xmm2
mulsd  %xmm1,%xmm2
addsd  0x8(%rcx),%xmm2
movsd  %xmm2,0x8(%rdi)
movsd  0x10(%r8),%xmm5
mulsd  %xmm1,%xmm5
addsd  0x10(%rcx),%xmm5
movsd  %xmm5,0x10(%rdi)
ucomisd %xmm4,%xmm3
jb     142e <find_out_point+0x32e>
ucomisd %xmm3,%xmm8
jb     142e <find_out_point+0x32e>
ucomisd %xmm10,%xmm2
jb     142e <find_out_point+0x32e>
movsd  -0x10(%rsp),%xmm3
ucomisd %xmm2,%xmm3
jb     142e <find_out_point+0x32e>
ucomisd %xmm7,%xmm5
setb   %sil
movsd  -0x18(%rsp),%xmm2
ucomisd %xmm5,%xmm2
setb   %dl
or     %sil,%dl
mov    $0x1,%esi
cmovne %eax,%esi
jne    1430 <find_out_point+0x330>
movapd %xmm1,%xmm0
jmp    1430 <find_out_point+0x330>
mov    %eax,%esi
ucomisd %xmm6,%xmm0
ja     143b <find_out_point+0x33b>
jmp    14b0 <find_out_point+0x3b0>
mov    %eax,%esi
movapd %xmm14,%xmm5
ucomisd %xmm6,%xmm0
jbe    14b0 <find_out_point+0x3b0>
ucomisd 0xbbd(%rip),%xmm6
jbe    14b0 <find_out_point+0x3b0>
movsd  (%r8),%xmm2
mulsd  %xmm6,%xmm2
addsd  (%rcx),%xmm2
movsd  %xmm2,(%rdi)
movsd  0x8(%r8),%xmm3
mulsd  %xmm6,%xmm3
addsd  0x8(%rcx),%xmm3
movsd  %xmm3,0x8(%rdi)
movsd  0x10(%r8),%xmm1
mulsd  %xmm6,%xmm1
addsd  0x10(%rcx),%xmm1
movsd  %xmm1,0x10(%rdi)
ucomisd %xmm4,%xmm2
jb     14b0 <find_out_point+0x3b0>
ucomisd %xmm2,%xmm8
jb     14b0 <find_out_point+0x3b0>
ucomisd %xmm10,%xmm3
jb     14b0 <find_out_point+0x3b0>
movsd  -0x10(%rsp),%xmm2
ucomisd %xmm3,%xmm2
jb     14b0 <find_out_point+0x3b0>
ucomisd %xmm7,%xmm1
jb     14b0 <find_out_point+0x3b0>
movsd  -0x18(%rsp),%xmm2
ucomisd %xmm1,%xmm2
jae    14b8 <find_out_point+0x3b8>
movapd %xmm0,%xmm6
test   %esi,%esi
js     14ef <find_out_point+0x3ef>
movsd  (%r8),%xmm1
mulsd  %xmm6,%xmm1
addsd  (%rcx),%xmm1
movsd  %xmm1,(%rdi)
movsd  0x8(%r8),%xmm0
mulsd  %xmm6,%xmm0
addsd  0x8(%rcx),%xmm0
movsd  %xmm0,0x8(%rdi)
mulsd  0x10(%r8),%xmm6
addsd  0x10(%rcx),%xmm6
mov    $0x1,%eax
jmp    1508 <find_out_point+0x408>
movsd  (%rcx),%xmm1
movsd  %xmm1,(%rdi)
movsd  0x8(%rcx),%xmm0
movsd  %xmm0,0x8(%rdi)
movsd  0x10(%rcx),%xmm6
xor    %eax,%eax
movapd %xmm1,%xmm2
subsd  %xmm11,%xmm2
andpd  0xb07(%rip),%xmm2
movsd  %xmm6,0x10(%rdi)
xor    %ecx,%ecx
movsd  0xad8(%rip),%xmm3
ucomisd %xmm2,%xmm3
movsd  -0x8(%rsp),%xmm2
ja     154c <find_out_point+0x44c>
subsd  %xmm12,%xmm1
andpd  0xadf(%rip),%xmm1
mov    $0x1,%ecx
ucomisd %xmm1,%xmm3
jbe    154f <find_out_point+0x44f>
mov    %ecx,(%r9)
movapd %xmm0,%xmm1
subsd  %xmm15,%xmm1
andpd  0xac0(%rip),%xmm1
mov    $0x2,%ecx
ucomisd %xmm1,%xmm3
ja     1582 <find_out_point+0x482>
subsd  %xmm2,%xmm0
andpd  0xaa9(%rip),%xmm0
mov    $0x3,%ecx
ucomisd %xmm0,%xmm3
jbe    1586 <find_out_point+0x486>
mov    %ecx,0x4(%r9)
movapd %xmm6,%xmm0
subsd  %xmm5,%xmm0
andpd  0xa8a(%rip),%xmm0
mov    $0x4,%ecx
ucomisd %xmm0,%xmm3
ja     15b9 <find_out_point+0x4b9>
subsd  %xmm13,%xmm6
andpd  0xa72(%rip),%xmm6
mov    $0x5,%ecx
ucomisd %xmm6,%xmm3
jbe    15bd <find_out_point+0x4bd>
mov    %ecx,0x8(%r9)
ret

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

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