#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 dot(double *, double *);
double fabs(double);
int intersect_tri_with_line(double *, double *, double *, double *, double *);
double metric(double *);
scalar_t__ samePoint(double, double, double, double, double, double);
int /*<<< orphan*/ vect_cross(double *, double *, double *);
int line_intersect_2D_3D(double *a1, double *a2, double *q1, double *q2,
                         double *q3, double *intersect, double *u_a,
                         double *u_q, int *inbound) {
  double plane[9];
  double plane_p[2];
  double u;
  double p1[3], v1[3], v2[3];
  double c1[3], c2[3], c3[3];
  double coincident, sense, norm;
  int i;
  int is_inter1, is_inter2;
  *inbound = 0;
  if (samePoint(a1[0], a1[1], a1[2], q1[0], q1[1], q1[2])) {
    *u_a = 0;
    *u_q = 0;
    intersect[0] = a1[0];
    intersect[1] = a1[1];
    intersect[2] = a1[2];
    return 1;
  } else if (samePoint(a1[0], a1[1], a1[2], q2[0], q2[1], q2[2])) {
    *u_a = 0;
    *u_q = 1;
    intersect[0] = a1[0];
    intersect[1] = a1[1];
    intersect[2] = a1[2];
    return 1;
  } else if (samePoint(a2[0], a2[1], a2[2], q1[0], q1[1], q1[2])) {
    *u_a = 1;
    *u_q = 0;
    intersect[0] = a2[0];
    intersect[1] = a2[1];
    intersect[2] = a2[2];
    return 1;
  } else if (samePoint(a2[0], a2[1], a2[2], q2[0], q2[1], q2[2])) {
    *u_a = 1;
    *u_q = 1;
    intersect[0] = a2[0];
    intersect[1] = a2[1];
    intersect[2] = a2[2];
    return 1;
  }
  plane[0] = q1[0];
  plane[1] = q1[1];
  plane[2] = q1[2];
  plane[3] = q2[0];
  plane[4] = q2[1];
  plane[5] = q2[2];
  plane[6] = 0.0;
  plane[7] = 0.0;
  plane[8] = 0.0;
  is_inter1 = intersect_tri_with_line(plane, a1, a2, plane_p, u_a);
  if (!is_inter1)
    return 0;
  if (fabs(*u_a) < (1.e-8))
    *u_a = 0;
  if (fabs(*u_a - 1) < (1.e-8))
    *u_a = 1;
  if ((*u_a < 0) || (*u_a > 1))
    return 0;
  plane[0] = a1[0];
  plane[1] = a1[1];
  plane[2] = a1[2];
  plane[3] = a2[0];
  plane[4] = a2[1];
  plane[5] = a2[2];
  plane[6] = 0.0;
  plane[7] = 0.0;
  plane[8] = 0.0;
  is_inter2 = intersect_tri_with_line(plane, q1, q2, plane_p, u_q);
  if (!is_inter2)
    return 0;
  if (fabs(*u_q) < (1.e-8))
    *u_q = 0;
  if (fabs(*u_q - 1) < (1.e-8))
    *u_q = 1;
  if ((*u_q < 0) || (*u_q > 1))
    return 0;
  u = *u_a;
  vect_cross(a1, a2, c1);
  vect_cross(q1, q2, c2);
  vect_cross(c1, c2, c3);
  coincident = metric(c3);
  if (fabs(coincident) < (1.0e-30))
    return 0;
  intersect[0] = a1[0] + u * (a2[0] - a1[0]);
  intersect[1] = a1[1] + u * (a2[1] - a1[1]);
  intersect[2] = a1[2] + u * (a2[2] - a1[2]);
  norm = metric(intersect);
  for (i = 0; i < 3; i++)
    intersect[i] /= norm;
  if (*u_q != 0 && *u_q != 1) {
    p1[0] = a2[0] - a1[0];
    p1[1] = a2[1] - a1[1];
    p1[2] = a2[2] - a1[2];
    v1[0] = q2[0] - q1[0];
    v1[1] = q2[1] - q1[1];
    v1[2] = q2[2] - q1[2];
    v2[0] = q3[0] - q2[0];
    v2[1] = q3[1] - q2[1];
    v2[2] = q3[2] - q2[2];
    vect_cross(v1, v2, c1);
    vect_cross(v1, p1, c2);
    sense = dot(c1, c2);
    *inbound = 1;
    if (sense > 0)
      *inbound = 2;
  }
  return 1;
}


x86 assembly (clang, -O0):
<line_intersect_2D_3D>:
push   %rbp
mov    %rsp,%rbp
sub    $0x180,%rsp
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
mov    %r8,-0x30(%rbp)
mov    %r9,-0x38(%rbp)
mov    0x20(%rbp),%rax
movl   $0x0,(%rax)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm1
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm2
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm3
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm4
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm5
call   1050 <samePoint@plt>
cmp    $0x0,%rax
je     1222 <line_intersect_2D_3D+0xd2>
mov    0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
mov    0x18(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x38(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x38(%rbp),%rax
movsd  %xmm0,0x8(%rax)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x38(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movl   $0x1,-0x4(%rbp)
jmp    19e3 <line_intersect_2D_3D+0x893>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm1
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm2
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm3
mov    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm4
mov    -0x28(%rbp),%rax
movsd  0x10(%rax),%xmm5
call   1050 <samePoint@plt>
cmp    $0x0,%rax
je     12c0 <line_intersect_2D_3D+0x170>
mov    0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
mov    0x18(%rbp),%rax
movsd  0xd8c(%rip),%xmm0
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x38(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x38(%rbp),%rax
movsd  %xmm0,0x8(%rax)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x38(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movl   $0x1,-0x4(%rbp)
jmp    19e3 <line_intersect_2D_3D+0x893>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm1
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm2
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm3
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm4
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm5
call   1050 <samePoint@plt>
cmp    $0x0,%rax
je     135e <line_intersect_2D_3D+0x20e>
mov    0x10(%rbp),%rax
movsd  0xcf9(%rip),%xmm0
movsd  %xmm0,(%rax)
mov    0x18(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x38(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x38(%rbp),%rax
movsd  %xmm0,0x8(%rax)
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x38(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movl   $0x1,-0x4(%rbp)
jmp    19e3 <line_intersect_2D_3D+0x893>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm1
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm2
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm3
mov    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm4
mov    -0x28(%rbp),%rax
movsd  0x10(%rax),%xmm5
call   1050 <samePoint@plt>
cmp    $0x0,%rax
je     1401 <line_intersect_2D_3D+0x2b1>
mov    0x10(%rbp),%rax
movsd  0xc5b(%rip),%xmm0
movsd  %xmm0,(%rax)
mov    0x18(%rbp),%rax
movsd  0xc4b(%rip),%xmm0
movsd  %xmm0,(%rax)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x38(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x38(%rbp),%rax
movsd  %xmm0,0x8(%rax)
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x38(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movl   $0x1,-0x4(%rbp)
jmp    19e3 <line_intersect_2D_3D+0x893>
jmp    1406 <line_intersect_2D_3D+0x2b6>
jmp    140b <line_intersect_2D_3D+0x2bb>
jmp    1410 <line_intersect_2D_3D+0x2c0>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x50(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x48(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x40(%rbp)
lea    -0x80(%rbp),%rdi
mov    -0x10(%rbp),%rsi
mov    -0x18(%rbp),%rdx
lea    -0x90(%rbp),%rcx
mov    0x10(%rbp),%r8
call   1030 <intersect_tri_with_line@plt>
mov    %eax,-0x170(%rbp)
cmpl   $0x0,-0x170(%rbp)
jne    14b5 <line_intersect_2D_3D+0x365>
movl   $0x0,-0x4(%rbp)
jmp    19e3 <line_intersect_2D_3D+0x893>
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm1
movaps 0xb5c(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  0xb30(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    14e5 <line_intersect_2D_3D+0x395>
mov    0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm1
movsd  0xb13(%rip),%xmm0
subsd  %xmm0,%xmm1
movaps 0xb20(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  0xaf4(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1526 <line_intersect_2D_3D+0x3d6>
mov    0x10(%rbp),%rax
movsd  0xae6(%rip),%xmm0
movsd  %xmm0,(%rax)
mov    0x10(%rbp),%rax
xorps  %xmm0,%xmm0
ucomisd (%rax),%xmm0
ja     1551 <line_intersect_2D_3D+0x401>
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0xac1(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    155d <line_intersect_2D_3D+0x40d>
movl   $0x0,-0x4(%rbp)
jmp    19e3 <line_intersect_2D_3D+0x893>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x50(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x48(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x40(%rbp)
lea    -0x80(%rbp),%rdi
mov    -0x20(%rbp),%rsi
mov    -0x28(%rbp),%rdx
lea    -0x90(%rbp),%rcx
mov    0x18(%rbp),%r8
call   1030 <intersect_tri_with_line@plt>
mov    %eax,-0x174(%rbp)
cmpl   $0x0,-0x174(%rbp)
jne    1602 <line_intersect_2D_3D+0x4b2>
movl   $0x0,-0x4(%rbp)
jmp    19e3 <line_intersect_2D_3D+0x893>
mov    0x18(%rbp),%rax
movsd  (%rax),%xmm1
movaps 0xa0f(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  0x9e3(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1632 <line_intersect_2D_3D+0x4e2>
mov    0x18(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
mov    0x18(%rbp),%rax
movsd  (%rax),%xmm1
movsd  0x9c6(%rip),%xmm0
subsd  %xmm0,%xmm1
movaps 0x9d3(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  0x9a7(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1673 <line_intersect_2D_3D+0x523>
mov    0x18(%rbp),%rax
movsd  0x999(%rip),%xmm0
movsd  %xmm0,(%rax)
mov    0x18(%rbp),%rax
xorps  %xmm0,%xmm0
ucomisd (%rax),%xmm0
ja     169e <line_intersect_2D_3D+0x54e>
mov    0x18(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0x974(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    16aa <line_intersect_2D_3D+0x55a>
movl   $0x0,-0x4(%rbp)
jmp    19e3 <line_intersect_2D_3D+0x893>
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
lea    -0x110(%rbp),%rdx
call   1070 <vect_cross@plt>
mov    -0x20(%rbp),%rdi
mov    -0x28(%rbp),%rsi
lea    -0x130(%rbp),%rdx
call   1070 <vect_cross@plt>
lea    -0x110(%rbp),%rdi
lea    -0x130(%rbp),%rsi
lea    -0x150(%rbp),%rdx
call   1070 <vect_cross@plt>
lea    -0x150(%rbp),%rdi
call   1060 <metric@plt>
movsd  %xmm0,-0x158(%rbp)
ff
movsd  -0x158(%rbp),%xmm1
ff
movaps 0x901(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  0x8e5(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1741 <line_intersect_2D_3D+0x5f1>
movl   $0x0,-0x4(%rbp)
jmp    19e3 <line_intersect_2D_3D+0x893>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm1
movsd  -0x98(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm2
mov    -0x10(%rbp),%rax
subsd  (%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x38(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm1
movsd  -0x98(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm2
mov    -0x10(%rbp),%rax
subsd  0x8(%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x38(%rbp),%rax
movsd  %xmm0,0x8(%rax)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm1
movsd  -0x98(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm2
mov    -0x10(%rbp),%rax
subsd  0x10(%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x38(%rbp),%rax
movsd  %xmm0,0x10(%rax)
mov    -0x38(%rbp),%rdi
call   1060 <metric@plt>
movsd  %xmm0,-0x168(%rbp)
ff
movl   $0x0,-0x16c(%rbp)
cmpl   $0x3,-0x16c(%rbp)
jge    1836 <line_intersect_2D_3D+0x6e6>
movsd  -0x168(%rbp),%xmm1
ff
mov    -0x38(%rbp),%rax
movslq -0x16c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x16c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x16c(%rbp)
jmp    17f4 <line_intersect_2D_3D+0x6a4>
mov    0x18(%rbp),%rax
movsd  (%rax),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1856 <line_intersect_2D_3D+0x706>
jp     1856 <line_intersect_2D_3D+0x706>
jmp    19dc <line_intersect_2D_3D+0x88c>
mov    0x18(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0x7a2(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    187b <line_intersect_2D_3D+0x72b>
jp     187b <line_intersect_2D_3D+0x72b>
jmp    19dc <line_intersect_2D_3D+0x88c>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
subsd  (%rax),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x10(%rbp),%rax
subsd  0x8(%rax),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x10(%rbp),%rax
subsd  0x10(%rax),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x20(%rbp),%rax
subsd  (%rax),%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x20(%rbp),%rax
subsd  0x8(%rax),%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x20(%rbp),%rax
subsd  0x10(%rax),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x28(%rbp),%rax
subsd  (%rax),%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
mov    -0x30(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x28(%rbp),%rax
subsd  0x8(%rax),%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
mov    -0x30(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x28(%rbp),%rax
subsd  0x10(%rax),%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
lea    -0xd0(%rbp),%rdi
lea    -0xf0(%rbp),%rsi
lea    -0x110(%rbp),%rdx
call   1070 <vect_cross@plt>
lea    -0xd0(%rbp),%rdi
lea    -0xb0(%rbp),%rsi
lea    -0x130(%rbp),%rdx
call   1070 <vect_cross@plt>
lea    -0x110(%rbp),%rdi
lea    -0x130(%rbp),%rsi
call   1040 <dot@plt>
movsd  %xmm0,-0x160(%rbp)
ff
mov    0x20(%rbp),%rax
movl   $0x1,(%rax)
movsd  -0x160(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    19d7 <line_intersect_2D_3D+0x887>
mov    0x20(%rbp),%rax
movl   $0x2,(%rax)
jmp    19dc <line_intersect_2D_3D+0x88c>
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x180,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<line_intersect_2D_3D>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x138,%rsp
mov    %r9,%r13
mov    %r8,%r15
mov    %rcx,%r12
mov    %rdx,%r14
mov    %rsi,%rbp
mov    %rdi,%rbx
mov    0x180(%rsp),%rax
movl   $0x0,(%rax)
movsd  (%rdi),%xmm0
movsd  0x8(%rdi),%xmm1
movsd  0x10(%rdi),%xmm2
movsd  (%rdx),%xmm3
movsd  0x8(%rdx),%xmm4
movsd  0x10(%rdx),%xmm5
call   1050 <samePoint@plt>
test   %rax,%rax
je     11c7 <line_intersect_2D_3D+0x77>
mov    0x170(%rsp),%rax
movq   $0x0,(%rax)
mov    0x178(%rsp),%rax
movq   $0x0,(%rax)
jmp    121c <line_intersect_2D_3D+0xcc>
mov    %r15,0x18(%rsp)
movsd  (%rbx),%xmm0
movsd  0x8(%rbx),%xmm1
movsd  0x10(%rbx),%xmm2
movsd  (%r12),%xmm3
movsd  0x8(%r12),%xmm4
movsd  0x10(%r12),%xmm5
call   1050 <samePoint@plt>
test   %rax,%rax
je     1257 <line_intersect_2D_3D+0x107>
mov    0x170(%rsp),%rax
movq   $0x0,(%rax)
movabs $0x3ff0000000000000,%rax
mov    0x178(%rsp),%rcx
mov    %rax,(%rcx)
movsd  (%rbx),%xmm0
movsd  %xmm0,0x0(%r13)
movsd  0x8(%rbx),%xmm0
movsd  %xmm0,0x8(%r13)
movsd  0x10(%rbx),%xmm0
movsd  %xmm0,0x10(%r13)
mov    $0x1,%r14d
mov    %r14d,%eax
add    $0x138,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    %rbp,%r15
movsd  0x0(%rbp),%xmm0
movsd  0x8(%rbp),%xmm1
movsd  0x10(%rbp),%xmm2
movsd  (%r14),%xmm3
movsd  0x8(%r14),%xmm4
movsd  0x10(%r14),%xmm5
call   1050 <samePoint@plt>
test   %rax,%rax
mov    0x170(%rsp),%rbp
je     12ab <line_intersect_2D_3D+0x15b>
movabs $0x3ff0000000000000,%rax
mov    %rax,0x0(%rbp)
mov    0x178(%rsp),%rax
movq   $0x0,(%rax)
jmp    12f3 <line_intersect_2D_3D+0x1a3>
movsd  (%r15),%xmm0
movsd  0x8(%r15),%xmm1
movsd  0x10(%r15),%xmm2
movsd  (%r12),%xmm3
movsd  0x8(%r12),%xmm4
movsd  0x10(%r12),%xmm5
call   1050 <samePoint@plt>
test   %rax,%rax
je     1315 <line_intersect_2D_3D+0x1c5>
movabs $0x3ff0000000000000,%rax
mov    %rax,0x0(%rbp)
mov    0x178(%rsp),%rcx
mov    %rax,(%rcx)
movsd  (%r15),%xmm0
movsd  %xmm0,0x0(%r13)
movsd  0x8(%r15),%xmm0
movsd  %xmm0,0x8(%r13)
movsd  0x10(%r15),%xmm0
jmp    1236 <line_intersect_2D_3D+0xe6>
mov    %r15,%rdx
mov    %r14,%r15
movups (%r14),%xmm0
movaps %xmm0,0x20(%rsp)
movsd  0x10(%r14),%xmm0
movsd  %xmm0,0x30(%rsp)
movups (%r12),%xmm0
movups %xmm0,0x38(%rsp)
movsd  0x10(%r12),%xmm0
movsd  %xmm0,0x48(%rsp)
xorpd  %xmm0,%xmm0
movapd %xmm0,0x50(%rsp)
movq   $0x0,0x60(%rsp)
lea    0x20(%rsp),%rdi
lea    0x110(%rsp),%rcx
mov    %rbx,%rsi
mov    %rdx,0x8(%rsp)
mov    %rbp,%r8
call   1030 <intersect_tri_with_line@plt>
xor    %r14d,%r14d
test   %eax,%eax
je     1242 <line_intersect_2D_3D+0xf2>
movsd  0x0(%rbp),%xmm0
movapd 0xc71(%rip),%xmm3
movapd %xmm0,%xmm2
andpd  %xmm3,%xmm2
movsd  0xc71(%rip),%xmm4
ucomisd %xmm2,%xmm4
cmpltsd %xmm4,%xmm2
andnpd %xmm0,%xmm2
movapd %xmm2,%xmm1
addsd  0xc60(%rip),%xmm1
andpd  %xmm3,%xmm1
movapd %xmm1,%xmm0
cmpltsd %xmm4,%xmm0
movapd %xmm0,%xmm3
andnpd %xmm2,%xmm3
movsd  0xc4b(%rip),%xmm2
andpd  %xmm2,%xmm0
orpd   %xmm3,%xmm0
ja     13e5 <line_intersect_2D_3D+0x295>
ucomisd %xmm1,%xmm4
jbe    13ea <line_intersect_2D_3D+0x29a>
movsd  %xmm0,0x0(%rbp)
xorpd  %xmm1,%xmm1
ucomisd %xmm0,%xmm1
ja     1242 <line_intersect_2D_3D+0xf2>
ucomisd 0xc20(%rip),%xmm0
ja     1242 <line_intersect_2D_3D+0xf2>
lea    0x50(%rsp),%rax
movups (%rbx),%xmm0
movaps %xmm0,0x20(%rsp)
movsd  0x10(%rbx),%xmm0
movsd  %xmm0,0x30(%rsp)
mov    0x8(%rsp),%rcx
movups (%rcx),%xmm0
movups %xmm0,0x38(%rsp)
movsd  0x10(%rcx),%xmm0
movsd  %xmm0,0x48(%rsp)
xorpd  %xmm0,%xmm0
movapd %xmm0,(%rax)
movq   $0x0,0x10(%rax)
lea    0x20(%rsp),%rdi
lea    0x110(%rsp),%rcx
mov    %r15,%rsi
mov    %r12,%rdx
mov    0x178(%rsp),%rbp
mov    %rbp,%r8
call   1030 <intersect_tri_with_line@plt>
test   %eax,%eax
je     1242 <line_intersect_2D_3D+0xf2>
movsd  0x0(%rbp),%xmm0
movapd %xmm0,%xmm2
movapd 0xb7e(%rip),%xmm3
andpd  %xmm3,%xmm2
movsd  0xb82(%rip),%xmm4
ucomisd %xmm2,%xmm4
cmpltsd %xmm4,%xmm2
andnpd %xmm0,%xmm2
movapd %xmm2,%xmm1
addsd  0xb71(%rip),%xmm1
andpd  %xmm3,%xmm1
movapd %xmm1,%xmm0
cmpltsd %xmm4,%xmm0
movapd %xmm0,%xmm3
andnpd %xmm2,%xmm3
movsd  0xb5c(%rip),%xmm2
andpd  %xmm2,%xmm0
orpd   %xmm3,%xmm0
ja     14d4 <line_intersect_2D_3D+0x384>
ucomisd %xmm1,%xmm4
jbe    14d9 <line_intersect_2D_3D+0x389>
movsd  %xmm0,0x0(%rbp)
xorpd  %xmm1,%xmm1
ucomisd %xmm0,%xmm1
ja     1242 <line_intersect_2D_3D+0xf2>
ucomisd 0xb31(%rip),%xmm0
ja     1242 <line_intersect_2D_3D+0xf2>
mov    0x170(%rsp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,0x10(%rsp)
lea    0x90(%rsp),%rdx
mov    %rbx,%rdi
mov    0x8(%rsp),%rbp
mov    %rbp,%rsi
call   1070 <vect_cross@plt>
lea    0x70(%rsp),%rdx
mov    %r15,%rdi
mov    %r12,%rsi
call   1070 <vect_cross@plt>
lea    0x120(%rsp),%rdx
lea    0x90(%rsp),%rdi
lea    0x70(%rsp),%rsi
call   1070 <vect_cross@plt>
lea    0x120(%rsp),%rdi
call   1060 <metric@plt>
andpd  0xaa2(%rip),%xmm0
movsd  0xac2(%rip),%xmm1
ucomisd %xmm0,%xmm1
ja     1242 <line_intersect_2D_3D+0xf2>
movsd  (%rbx),%xmm0
movsd  0x0(%rbp),%xmm1
subsd  %xmm0,%xmm1
movsd  0x10(%rsp),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,0x0(%r13)
movsd  0x8(%rbx),%xmm0
movsd  0x8(%rbp),%xmm1
subsd  %xmm0,%xmm1
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,0x8(%r13)
movsd  0x10(%rbx),%xmm0
movsd  0x10(%rbp),%xmm1
subsd  %xmm0,%xmm1
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,0x10(%r13)
mov    %r13,%rdi
call   1060 <metric@plt>
movupd 0x0(%r13),%xmm1
movapd %xmm0,%xmm2
unpcklpd %xmm0,%xmm2
divpd  %xmm2,%xmm1
movupd %xmm1,0x0(%r13)
movsd  0x10(%r13),%xmm1
divsd  %xmm0,%xmm1
movsd  %xmm1,0x10(%r13)
mov    0x178(%rsp),%rax
movsd  (%rax),%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
mov    $0x1,%r14d
jne    161b <line_intersect_2D_3D+0x4cb>
jnp    1242 <line_intersect_2D_3D+0xf2>
ucomisd 0x9fd(%rip),%xmm0
jne    162b <line_intersect_2D_3D+0x4db>
jnp    1242 <line_intersect_2D_3D+0xf2>
mov    0x8(%rsp),%rbp
movupd 0x0(%rbp),%xmm0
movupd (%rbx),%xmm1
subpd  %xmm1,%xmm0
movapd %xmm0,0xf0(%rsp)
movsd  0x10(%rbp),%xmm0
subsd  0x10(%rbx),%xmm0
movsd  %xmm0,0x100(%rsp)
movupd (%r12),%xmm0
movupd (%r15),%xmm1
movapd %xmm0,%xmm2
subpd  %xmm1,%xmm2
movapd %xmm2,0xd0(%rsp)
movsd  0x10(%r12),%xmm1
movapd %xmm1,%xmm2
subsd  0x10(%r15),%xmm2
movsd  %xmm2,0xe0(%rsp)
mov    0x18(%rsp),%rbp
movupd 0x0(%rbp),%xmm2
subpd  %xmm0,%xmm2
movapd %xmm2,0xb0(%rsp)
movsd  0x10(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,0xc0(%rsp)
lea    0xd0(%rsp),%rbx
lea    0xb0(%rsp),%rsi
lea    0x90(%rsp),%r15
mov    %rbx,%rdi
mov    %r15,%rdx
call   1070 <vect_cross@plt>
lea    0xf0(%rsp),%rsi
lea    0x70(%rsp),%rbp
mov    %rbx,%rdi
mov    %rbp,%rdx
call   1070 <vect_cross@plt>
mov    %r15,%rdi
mov    %rbp,%rsi
call   1040 <dot@plt>
mov    0x180(%rsp),%rax
movl   $0x1,(%rax)
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1242 <line_intersect_2D_3D+0xf2>
movl   $0x2,(%rax)
jmp    1242 <line_intersect_2D_3D+0xf2>

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

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