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

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int coplanar_tri_tri(double *, double *, double *, double *, double *, double *,
                     double *);
int fabs(double);
int tri_tri_intersect(double V0[3], double V1[3], double V2[3], double U0[3],
                      double U1[3], double U2[3]) {
  double E1[3], E2[3];
  double N1[3], N2[3], d1, d2;
  double du0, du1, du2, dv0, dv1, dv2;
  double D[3];
  double isect1[2], isect2[2];
  double du0du1, du0du2, dv0dv1, dv0dv2;
  short index;
  double vp0, vp1, vp2;
  double up0, up1, up2;
  double b, c, max;
  E1[0] = V1[0] - V0[0];
  E1[1] = V1[1] - V0[1];
  E1[2] = V1[2] - V0[2];
  ;
  E2[0] = V2[0] - V0[0];
  E2[1] = V2[1] - V0[1];
  E2[2] = V2[2] - V0[2];
  ;
  N1[0] = E1[1] * E2[2] - E1[2] * E2[1];
  N1[1] = E1[2] * E2[0] - E1[0] * E2[2];
  N1[2] = E1[0] * E2[1] - E1[1] * E2[0];
  ;
  d1 = -(N1[0] * V0[0] + N1[1] * V0[1] + N1[2] * V0[2]);
  du0 = (N1[0] * U0[0] + N1[1] * U0[1] + N1[2] * U0[2]) + d1;
  du1 = (N1[0] * U1[0] + N1[1] * U1[1] + N1[2] * U1[2]) + d1;
  du2 = (N1[0] * U2[0] + N1[1] * U2[1] + N1[2] * U2[2]) + d1;
  if (fabs(du0) < 10e-6)
    du0 = 0.0;
  if (fabs(du1) < 10e-6)
    du1 = 0.0;
  if (fabs(du2) < 10e-6)
    du2 = 0.0;
  du0du1 = du0 * du1;
  du0du2 = du0 * du2;
  if (du0du1 > 0.0f && du0du2 > 0.0f)
    return 0;
  E1[0] = U1[0] - U0[0];
  E1[1] = U1[1] - U0[1];
  E1[2] = U1[2] - U0[2];
  ;
  E2[0] = U2[0] - U0[0];
  E2[1] = U2[1] - U0[1];
  E2[2] = U2[2] - U0[2];
  ;
  N2[0] = E1[1] * E2[2] - E1[2] * E2[1];
  N2[1] = E1[2] * E2[0] - E1[0] * E2[2];
  N2[2] = E1[0] * E2[1] - E1[1] * E2[0];
  ;
  d2 = -(N2[0] * U0[0] + N2[1] * U0[1] + N2[2] * U0[2]);
  dv0 = (N2[0] * V0[0] + N2[1] * V0[1] + N2[2] * V0[2]) + d2;
  dv1 = (N2[0] * V1[0] + N2[1] * V1[1] + N2[2] * V1[2]) + d2;
  dv2 = (N2[0] * V2[0] + N2[1] * V2[1] + N2[2] * V2[2]) + d2;
  if (fabs(dv0) < 10e-6)
    dv0 = 0.0;
  if (fabs(dv1) < 10e-6)
    dv1 = 0.0;
  if (fabs(dv2) < 10e-6)
    dv2 = 0.0;
  dv0dv1 = dv0 * dv1;
  dv0dv2 = dv0 * dv2;
  if (dv0dv1 > 0.0f && dv0dv2 > 0.0f)
    return 0;
  D[0] = N1[1] * N2[2] - N1[2] * N2[1];
  D[1] = N1[2] * N2[0] - N1[0] * N2[2];
  D[2] = N1[0] * N2[1] - N1[1] * N2[0];
  ;
  max = fabs(D[0]);
  index = 0;
  b = fabs(D[1]);
  c = fabs(D[2]);
  if (b > max)
    max = b, index = 1;
  if (c > max)
    max = c, index = 2;
  vp0 = V0[index];
  vp1 = V1[index];
  vp2 = V2[index];
  up0 = U0[index];
  up1 = U1[index];
  up2 = U2[index];
  if (dv0dv1 > 0.0f) {
    isect1[0] = vp2 + (vp0 - vp2) * dv2 / (dv2 - dv0);
    isect1[1] = vp2 + (vp1 - vp2) * dv2 / (dv2 - dv1);
    ;
  } else if (dv0dv2 > 0.0f) {
    isect1[0] = vp1 + (vp0 - vp1) * dv1 / (dv1 - dv0);
    isect1[1] = vp1 + (vp2 - vp1) * dv1 / (dv1 - dv2);
    ;
  } else if (dv1 * dv2 > 0.0f || dv0 != 0.0f) {
    isect1[0] = vp0 + (vp1 - vp0) * dv0 / (dv0 - dv1);
    isect1[1] = vp0 + (vp2 - vp0) * dv0 / (dv0 - dv2);
    ;
  } else if (dv1 != 0.0f) {
    isect1[0] = vp1 + (vp0 - vp1) * dv1 / (dv1 - dv0);
    isect1[1] = vp1 + (vp2 - vp1) * dv1 / (dv1 - dv2);
    ;
  } else if (dv2 != 0.0f) {
    isect1[0] = vp2 + (vp0 - vp2) * dv2 / (dv2 - dv0);
    isect1[1] = vp2 + (vp1 - vp2) * dv2 / (dv2 - dv1);
    ;
  } else {
    return coplanar_tri_tri(N1, V0, V1, V2, U0, U1, U2);
  };
  if (du0du1 > 0.0f) {
    isect2[0] = up2 + (up0 - up2) * du2 / (du2 - du0);
    isect2[1] = up2 + (up1 - up2) * du2 / (du2 - du1);
    ;
  } else if (du0du2 > 0.0f) {
    isect2[0] = up1 + (up0 - up1) * du1 / (du1 - du0);
    isect2[1] = up1 + (up2 - up1) * du1 / (du1 - du2);
    ;
  } else if (du1 * du2 > 0.0f || du0 != 0.0f) {
    isect2[0] = up0 + (up1 - up0) * du0 / (du0 - du1);
    isect2[1] = up0 + (up2 - up0) * du0 / (du0 - du2);
    ;
  } else if (du1 != 0.0f) {
    isect2[0] = up1 + (up0 - up1) * du1 / (du1 - du0);
    isect2[1] = up1 + (up2 - up1) * du1 / (du1 - du2);
    ;
  } else if (du2 != 0.0f) {
    isect2[0] = up2 + (up0 - up2) * du2 / (du2 - du0);
    isect2[1] = up2 + (up1 - up2) * du2 / (du2 - du1);
    ;
  } else {
    return coplanar_tri_tri(N1, V0, V1, V2, U0, U1, U2);
  };
  if (isect1[0] > isect1[1]) {
    double c;
    c = isect1[0];
    isect1[0] = isect1[1];
    isect1[1] = c;
  };
  if (isect2[0] > isect2[1]) {
    double c;
    c = isect2[0];
    isect2[0] = isect2[1];
    isect2[1] = c;
  };
  if (isect1[1] < isect2[0] || isect2[1] < isect1[0])
    return 0;
  return 1;
}


x86 assembly (clang, -O0):
<tri_tri_intersect>:
push   %rbp
mov    %rsp,%rbp
sub    $0x1c0,%rsp
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    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
subsd  (%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x10(%rbp),%rax
subsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x10(%rbp),%rax
subsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
subsd  (%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x10(%rbp),%rax
subsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x10(%rbp),%rax
subsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm1
mulsd  -0x68(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0x50(%rbp),%xmm1
mulsd  -0x60(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x48(%rbp),%xmm1
mulsd  -0x70(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x90(%rbp),%xmm1
ff
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm2
movsd  -0x88(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mulsd  0x8(%rax),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x80(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x90(%rbp),%xmm1
ff
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm2
movsd  -0x88(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
mulsd  0x8(%rax),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x80(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  0x10(%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x90(%rbp),%xmm1
ff
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm2
movsd  -0x88(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
mulsd  0x8(%rax),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x80(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  0x10(%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x90(%rbp),%xmm1
ff
mov    -0x38(%rbp),%rax
movsd  (%rax),%xmm2
movsd  -0x88(%rbp),%xmm0
ff
mov    -0x38(%rbp),%rax
mulsd  0x8(%rax),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x80(%rbp),%xmm0
mov    -0x38(%rbp),%rax
movsd  0x10(%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
call   1040 <fabs@plt>
cvtsi2sd %eax,%xmm1
movsd  0x1c25(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    13f0 <tri_tri_intersect+0x2d0>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
call   1040 <fabs@plt>
cvtsi2sd %eax,%xmm1
movsd  0x1bf7(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    141e <tri_tri_intersect+0x2fe>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xd8(%rbp),%xmm0
ff
call   1040 <fabs@plt>
cvtsi2sd %eax,%xmm1
movsd  0x1bc9(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    144c <tri_tri_intersect+0x32c>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
mulsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0x138(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
mulsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0x140(%rbp)
ff
movsd  -0x138(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    14b2 <tri_tri_intersect+0x392>
movsd  -0x140(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    14b2 <tri_tri_intersect+0x392>
movl   $0x0,-0x4(%rbp)
jmp    2222 <tri_tri_intersect+0x1102>
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x28(%rbp),%rax
subsd  (%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x30(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x28(%rbp),%rax
subsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x30(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x28(%rbp),%rax
subsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x38(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x28(%rbp),%rax
subsd  (%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x38(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x28(%rbp),%rax
subsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x38(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x28(%rbp),%rax
subsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm1
mulsd  -0x68(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0x50(%rbp),%xmm1
mulsd  -0x60(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x48(%rbp),%xmm1
mulsd  -0x70(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0xb0(%rbp),%xmm1
ff
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm2
movsd  -0xa8(%rbp),%xmm0
mov    -0x28(%rbp),%rax
mulsd  0x8(%rax),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0xa0(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  0x10(%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0xb0(%rbp),%xmm1
ff
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm2
movsd  -0xa8(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mulsd  0x8(%rax),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0xa0(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  -0xc0(%rbp),%xmm0
ff
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0xb0(%rbp),%xmm1
ff
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm2
movsd  -0xa8(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
mulsd  0x8(%rax),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0xa0(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  -0xc0(%rbp),%xmm0
ff
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0xb0(%rbp),%xmm1
ff
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm2
movsd  -0xa8(%rbp),%xmm0
ff
mov    -0x20(%rbp),%rax
mulsd  0x8(%rax),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0xa0(%rbp),%xmm0
ff
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  -0xc0(%rbp),%xmm0
ff
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0xe0(%rbp),%xmm0
ff
call   1040 <fabs@plt>
cvtsi2sd %eax,%xmm1
movsd  0x18a7(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    176e <tri_tri_intersect+0x64e>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0xe8(%rbp),%xmm0
ff
call   1040 <fabs@plt>
cvtsi2sd %eax,%xmm1
movsd  0x1879(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    179c <tri_tri_intersect+0x67c>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0xf0(%rbp),%xmm0
ff
call   1040 <fabs@plt>
cvtsi2sd %eax,%xmm1
movsd  0x184b(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    17ca <tri_tri_intersect+0x6aa>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0xe0(%rbp),%xmm0
ff
mulsd  -0xe8(%rbp),%xmm0
ff
movsd  %xmm0,-0x148(%rbp)
ff
movsd  -0xe0(%rbp),%xmm0
ff
mulsd  -0xf0(%rbp),%xmm0
ff
movsd  %xmm0,-0x150(%rbp)
ff
movsd  -0x148(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1830 <tri_tri_intersect+0x710>
movsd  -0x150(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1830 <tri_tri_intersect+0x710>
movl   $0x0,-0x4(%rbp)
jmp    2222 <tri_tri_intersect+0x1102>
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0xa0(%rbp),%xmm2
ff
movsd  -0x80(%rbp),%xmm1
mulsd  -0xa8(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
movsd  -0xb0(%rbp),%xmm2
ff
movsd  -0x90(%rbp),%xmm1
ff
mulsd  -0xa0(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
movsd  -0xa8(%rbp),%xmm2
ff
movsd  -0x88(%rbp),%xmm1
ff
mulsd  -0xb0(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0x110(%rbp),%xmm0
ff
call   1040 <fabs@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x1a0(%rbp)
ff
movw   $0x0,-0x152(%rbp)
movsd  -0x108(%rbp),%xmm0
ff
call   1040 <fabs@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x190(%rbp)
ff
movsd  -0x100(%rbp),%xmm0
ff
call   1040 <fabs@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x198(%rbp)
ff
movsd  -0x190(%rbp),%xmm0
ff
ucomisd -0x1a0(%rbp),%xmm0
ff
jbe    1982 <tri_tri_intersect+0x862>
movsd  -0x190(%rbp),%xmm0
ff
movsd  %xmm0,-0x1a0(%rbp)
ff
movw   $0x1,-0x152(%rbp)
movsd  -0x198(%rbp),%xmm0
ff
ucomisd -0x1a0(%rbp),%xmm0
ff
jbe    19b1 <tri_tri_intersect+0x891>
movsd  -0x198(%rbp),%xmm0
ff
movsd  %xmm0,-0x1a0(%rbp)
ff
movw   $0x2,-0x152(%rbp)
mov    -0x10(%rbp),%rax
movswq -0x152(%rbp),%rcx
ff
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x160(%rbp)
ff
mov    -0x18(%rbp),%rax
movswq -0x152(%rbp),%rcx
ff
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x168(%rbp)
ff
mov    -0x20(%rbp),%rax
movswq -0x152(%rbp),%rcx
ff
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x170(%rbp)
ff
mov    -0x28(%rbp),%rax
movswq -0x152(%rbp),%rcx
ff
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x178(%rbp)
ff
mov    -0x30(%rbp),%rax
movswq -0x152(%rbp),%rcx
ff
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x180(%rbp)
ff
mov    -0x38(%rbp),%rax
movswq -0x152(%rbp),%rcx
ff
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x188(%rbp)
ff
movsd  -0x148(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1ae1 <tri_tri_intersect+0x9c1>
movsd  -0x170(%rbp),%xmm0
ff
movsd  -0x160(%rbp),%xmm1
ff
subsd  -0x170(%rbp),%xmm1
ff
mulsd  -0xf0(%rbp),%xmm1
ff
movsd  -0xf0(%rbp),%xmm2
ff
subsd  -0xe0(%rbp),%xmm2
ff
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
movsd  -0x170(%rbp),%xmm0
ff
movsd  -0x168(%rbp),%xmm1
ff
subsd  -0x170(%rbp),%xmm1
ff
mulsd  -0xf0(%rbp),%xmm1
ff
movsd  -0xf0(%rbp),%xmm2
ff
subsd  -0xe8(%rbp),%xmm2
ff
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
jmp    1dcb <tri_tri_intersect+0xcab>
movsd  -0x150(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1b7b <tri_tri_intersect+0xa5b>
movsd  -0x168(%rbp),%xmm0
ff
movsd  -0x160(%rbp),%xmm1
ff
subsd  -0x168(%rbp),%xmm1
ff
mulsd  -0xe8(%rbp),%xmm1
ff
movsd  -0xe8(%rbp),%xmm2
ff
subsd  -0xe0(%rbp),%xmm2
ff
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
movsd  -0x168(%rbp),%xmm0
ff
movsd  -0x170(%rbp),%xmm1
ff
subsd  -0x168(%rbp),%xmm1
ff
mulsd  -0xe8(%rbp),%xmm1
ff
movsd  -0xe8(%rbp),%xmm2
ff
subsd  -0xf0(%rbp),%xmm2
ff
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
jmp    1dc6 <tri_tri_intersect+0xca6>
movsd  -0xe8(%rbp),%xmm0
ff
mulsd  -0xf0(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
ja     1bb8 <tri_tri_intersect+0xa98>
movsd  -0xe0(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1bb8 <tri_tri_intersect+0xa98>
jp     1bb8 <tri_tri_intersect+0xa98>
jmp    1c3d <tri_tri_intersect+0xb1d>
movsd  -0x160(%rbp),%xmm0
ff
movsd  -0x168(%rbp),%xmm1
ff
subsd  -0x160(%rbp),%xmm1
ff
mulsd  -0xe0(%rbp),%xmm1
ff
movsd  -0xe0(%rbp),%xmm2
ff
subsd  -0xe8(%rbp),%xmm2
ff
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
movsd  -0x160(%rbp),%xmm0
ff
movsd  -0x170(%rbp),%xmm1
ff
subsd  -0x160(%rbp),%xmm1
ff
mulsd  -0xe0(%rbp),%xmm1
ff
movsd  -0xe0(%rbp),%xmm2
ff
subsd  -0xf0(%rbp),%xmm2
ff
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
jmp    1dc1 <tri_tri_intersect+0xca1>
movsd  -0xe8(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1c5d <tri_tri_intersect+0xb3d>
jp     1c5d <tri_tri_intersect+0xb3d>
jmp    1ce2 <tri_tri_intersect+0xbc2>
movsd  -0x168(%rbp),%xmm0
ff
movsd  -0x160(%rbp),%xmm1
ff
subsd  -0x168(%rbp),%xmm1
ff
mulsd  -0xe8(%rbp),%xmm1
ff
movsd  -0xe8(%rbp),%xmm2
ff
subsd  -0xe0(%rbp),%xmm2
ff
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
movsd  -0x168(%rbp),%xmm0
ff
movsd  -0x170(%rbp),%xmm1
ff
subsd  -0x168(%rbp),%xmm1
ff
mulsd  -0xe8(%rbp),%xmm1
ff
movsd  -0xe8(%rbp),%xmm2
ff
subsd  -0xf0(%rbp),%xmm2
ff
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
jmp    1dbc <tri_tri_intersect+0xc9c>
movsd  -0xf0(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1d02 <tri_tri_intersect+0xbe2>
jp     1d02 <tri_tri_intersect+0xbe2>
jmp    1d87 <tri_tri_intersect+0xc67>
movsd  -0x170(%rbp),%xmm0
ff
movsd  -0x160(%rbp),%xmm1
ff
subsd  -0x170(%rbp),%xmm1
ff
mulsd  -0xf0(%rbp),%xmm1
ff
movsd  -0xf0(%rbp),%xmm2
ff
subsd  -0xe0(%rbp),%xmm2
ff
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
movsd  -0x170(%rbp),%xmm0
ff
movsd  -0x168(%rbp),%xmm1
ff
subsd  -0x170(%rbp),%xmm1
ff
mulsd  -0xf0(%rbp),%xmm1
ff
movsd  -0xf0(%rbp),%xmm2
ff
subsd  -0xe8(%rbp),%xmm2
ff
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
jmp    1db7 <tri_tri_intersect+0xc97>
lea    -0x90(%rbp),%rdi
mov    -0x10(%rbp),%rsi
mov    -0x18(%rbp),%rdx
mov    -0x20(%rbp),%rcx
mov    -0x28(%rbp),%r8
mov    -0x30(%rbp),%r9
mov    -0x38(%rbp),%rax
mov    %rax,(%rsp)
call   1030 <coplanar_tri_tri@plt>
mov    %eax,-0x4(%rbp)
jmp    2222 <tri_tri_intersect+0x1102>
jmp    1dbc <tri_tri_intersect+0xc9c>
jmp    1dc1 <tri_tri_intersect+0xca1>
jmp    1dc6 <tri_tri_intersect+0xca6>
jmp    1dcb <tri_tri_intersect+0xcab>
movsd  -0x138(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1e65 <tri_tri_intersect+0xd45>
movsd  -0x188(%rbp),%xmm0
ff
movsd  -0x178(%rbp),%xmm1
ff
subsd  -0x188(%rbp),%xmm1
ff
mulsd  -0xd8(%rbp),%xmm1
ff
movsd  -0xd8(%rbp),%xmm2
ff
subsd  -0xc8(%rbp),%xmm2
ff
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
movsd  -0x188(%rbp),%xmm0
ff
movsd  -0x180(%rbp),%xmm1
ff
subsd  -0x188(%rbp),%xmm1
ff
mulsd  -0xd8(%rbp),%xmm1
ff
movsd  -0xd8(%rbp),%xmm2
ff
subsd  -0xd0(%rbp),%xmm2
ff
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
jmp    214f <tri_tri_intersect+0x102f>
movsd  -0x140(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1eff <tri_tri_intersect+0xddf>
movsd  -0x180(%rbp),%xmm0
ff
movsd  -0x178(%rbp),%xmm1
ff
subsd  -0x180(%rbp),%xmm1
ff
mulsd  -0xd0(%rbp),%xmm1
ff
movsd  -0xd0(%rbp),%xmm2
ff
subsd  -0xc8(%rbp),%xmm2
ff
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
movsd  -0x180(%rbp),%xmm0
ff
movsd  -0x188(%rbp),%xmm1
ff
subsd  -0x180(%rbp),%xmm1
ff
mulsd  -0xd0(%rbp),%xmm1
ff
movsd  -0xd0(%rbp),%xmm2
ff
subsd  -0xd8(%rbp),%xmm2
ff
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
jmp    214a <tri_tri_intersect+0x102a>
movsd  -0xd0(%rbp),%xmm0
ff
mulsd  -0xd8(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
ja     1f3c <tri_tri_intersect+0xe1c>
movsd  -0xc8(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1f3c <tri_tri_intersect+0xe1c>
jp     1f3c <tri_tri_intersect+0xe1c>
jmp    1fc1 <tri_tri_intersect+0xea1>
movsd  -0x178(%rbp),%xmm0
ff
movsd  -0x180(%rbp),%xmm1
ff
subsd  -0x178(%rbp),%xmm1
ff
mulsd  -0xc8(%rbp),%xmm1
ff
movsd  -0xc8(%rbp),%xmm2
ff
subsd  -0xd0(%rbp),%xmm2
ff
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
movsd  -0x178(%rbp),%xmm0
ff
movsd  -0x188(%rbp),%xmm1
ff
subsd  -0x178(%rbp),%xmm1
ff
mulsd  -0xc8(%rbp),%xmm1
ff
movsd  -0xc8(%rbp),%xmm2
ff
subsd  -0xd8(%rbp),%xmm2
ff
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
jmp    2145 <tri_tri_intersect+0x1025>
movsd  -0xd0(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1fe1 <tri_tri_intersect+0xec1>
jp     1fe1 <tri_tri_intersect+0xec1>
jmp    2066 <tri_tri_intersect+0xf46>
movsd  -0x180(%rbp),%xmm0
ff
movsd  -0x178(%rbp),%xmm1
ff
subsd  -0x180(%rbp),%xmm1
ff
mulsd  -0xd0(%rbp),%xmm1
movsd  -0xd0(%rbp),%xmm2
subsd  -0xc8(%rbp),%xmm2
ff
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
movsd  -0x180(%rbp),%xmm0
ff
movsd  -0x188(%rbp),%xmm1
ff
subsd  -0x180(%rbp),%xmm1
ff
mulsd  -0xd0(%rbp),%xmm1
ff
movsd  -0xd0(%rbp),%xmm2
ff
subsd  -0xd8(%rbp),%xmm2
ff
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
jmp    2140 <tri_tri_intersect+0x1020>
movsd  -0xd8(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    2086 <tri_tri_intersect+0xf66>
jp     2086 <tri_tri_intersect+0xf66>
jmp    210b <tri_tri_intersect+0xfeb>
movsd  -0x188(%rbp),%xmm0
ff
movsd  -0x178(%rbp),%xmm1
ff
subsd  -0x188(%rbp),%xmm1
ff
mulsd  -0xd8(%rbp),%xmm1
ff
movsd  -0xd8(%rbp),%xmm2
ff
subsd  -0xc8(%rbp),%xmm2
ff
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
movsd  -0x188(%rbp),%xmm0
ff
movsd  -0x180(%rbp),%xmm1
ff
subsd  -0x188(%rbp),%xmm1
ff
mulsd  -0xd8(%rbp),%xmm1
ff
movsd  -0xd8(%rbp),%xmm2
ff
subsd  -0xd0(%rbp),%xmm2
ff
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
jmp    213b <tri_tri_intersect+0x101b>
lea    -0x90(%rbp),%rdi
mov    -0x10(%rbp),%rsi
mov    -0x18(%rbp),%rdx
mov    -0x20(%rbp),%rcx
mov    -0x28(%rbp),%r8
mov    -0x30(%rbp),%r9
mov    -0x38(%rbp),%rax
mov    %rax,(%rsp)
call   1030 <coplanar_tri_tri@plt>
mov    %eax,-0x4(%rbp)
jmp    2222 <tri_tri_intersect+0x1102>
jmp    2140 <tri_tri_intersect+0x1020>
jmp    2145 <tri_tri_intersect+0x1025>
jmp    214a <tri_tri_intersect+0x102a>
jmp    214f <tri_tri_intersect+0x102f>
movsd  -0x120(%rbp),%xmm0
ff
ucomisd -0x118(%rbp),%xmm0
ff
jbe    2195 <tri_tri_intersect+0x1075>
movsd  -0x120(%rbp),%xmm0
ff
movsd  %xmm0,-0x1a8(%rbp)
ff
movsd  -0x118(%rbp),%xmm0
ff
movsd  %xmm0,-0x120(%rbp)
ff
movsd  -0x1a8(%rbp),%xmm0
ff
movsd  %xmm0,-0x118(%rbp)
ff
movsd  -0x130(%rbp),%xmm0
ff
ucomisd -0x128(%rbp),%xmm0
ff
jbe    21db <tri_tri_intersect+0x10bb>
movsd  -0x130(%rbp),%xmm0
ff
movsd  %xmm0,-0x1b0(%rbp)
ff
movsd  -0x128(%rbp),%xmm0
ff
movsd  %xmm0,-0x130(%rbp)
ff
movsd  -0x1b0(%rbp),%xmm0
ff
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0x118(%rbp),%xmm1
ff
movsd  -0x130(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
ja     220f <tri_tri_intersect+0x10ef>
movsd  -0x128(%rbp),%xmm1
ff
movsd  -0x120(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jbe    221b <tri_tri_intersect+0x10fb>
movl   $0x0,-0x4(%rbp)
jmp    2222 <tri_tri_intersect+0x1102>
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x1c0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<tri_tri_intersect>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x148,%rsp
mov    %r9,%rbp
mov    %r8,%r14
mov    %rcx,%r15
mov    %rdx,%r13
movsd  (%rsi),%xmm1
movsd  (%rdi),%xmm8
subsd  %xmm8,%xmm1
mov    %rsi,0x38(%rsp)
movupd 0x8(%rsi),%xmm2
mov    %rdi,0x30(%rsp)
movupd 0x8(%rdi),%xmm0
subpd  %xmm0,%xmm2
movsd  0x8(%rdx),%xmm5
subsd  %xmm0,%xmm5
movsd  (%rdx),%xmm3
movhpd 0x10(%rdx),%xmm3
movapd %xmm0,%xmm4
movsd  %xmm8,%xmm4
subpd  %xmm4,%xmm3
movapd %xmm3,%xmm6
shufpd $0x1,%xmm3,%xmm6
movapd %xmm3,%xmm4
mulpd  %xmm2,%xmm6
mulsd  %xmm2,%xmm3
shufpd $0x1,%xmm1,%xmm2
movsd  %xmm5,%xmm4
mulpd  %xmm2,%xmm4
subpd  %xmm4,%xmm6
movapd %xmm6,0xb0(%rsp)
mulsd  %xmm1,%xmm5
subsd  %xmm3,%xmm5
movsd  %xmm5,0xc0(%rsp)
movapd %xmm6,%xmm7
unpckhpd %xmm6,%xmm7
movsd  (%r8),%xmm1
movsd  0x8(%r8),%xmm2
movsd  0x10(%r8),%xmm4
movhpd 0x8(%rcx),%xmm2
mulpd  %xmm7,%xmm2
movapd %xmm6,0xa0(%rsp)
movapd %xmm6,%xmm3
unpcklpd %xmm6,%xmm3
movhpd (%rcx),%xmm1
mulpd  %xmm3,%xmm1
addpd  %xmm2,%xmm1
movapd %xmm5,0x60(%rsp)
movapd %xmm5,%xmm2
unpcklpd %xmm5,%xmm2
movhpd 0x10(%rcx),%xmm4
mulpd  %xmm2,%xmm4
addpd  %xmm1,%xmm4
movapd %xmm4,%xmm5
movsd  (%r9),%xmm1
movsd  0x8(%r9),%xmm4
unpcklpd %xmm0,%xmm4
movapd %xmm7,0x90(%rsp)
mulpd  %xmm7,%xmm4
unpcklpd %xmm8,%xmm1
mulpd  %xmm3,%xmm1
addpd  %xmm4,%xmm1
movapd %xmm0,%xmm3
movlpd 0x10(%r9),%xmm3
mulpd  %xmm2,%xmm3
addpd  %xmm1,%xmm3
movapd %xmm3,%xmm0
unpckhpd %xmm3,%xmm0
subpd  %xmm0,%xmm5
movapd %xmm5,0x20(%rsp)
subsd  %xmm0,%xmm3
movapd %xmm3,0x10(%rsp)
movapd %xmm5,%xmm0
unpckhpd %xmm5,%xmm0
call   1040 <fabs@plt>
mov    %eax,%ebx
movaps 0x20(%rsp),%xmm0
call   1040 <fabs@plt>
movd   %ebx,%xmm0
movd   %eax,%xmm1
punpckldq %xmm0,%xmm1
movdqa 0xd5c(%rip),%xmm2
pcmpgtd %xmm1,%xmm2
pxor   %xmm0,%xmm0
pcmpgtd %xmm2,%xmm0
punpckldq %xmm0,%xmm2
pandn  0x20(%rsp),%xmm2
movdqa %xmm2,0x20(%rsp)
movapd 0x10(%rsp),%xmm0
call   1040 <fabs@plt>
xorpd  %xmm0,%xmm0
pxor   %xmm2,%xmm2
test   %eax,%eax
jle    12dd <tri_tri_intersect+0x1bd>
movdqa 0x10(%rsp),%xmm2
movdqa 0x20(%rsp),%xmm1
pshufd $0xee,%xmm1,%xmm3
movdqa %xmm3,%xmm5
mulsd  %xmm1,%xmm5
movdqa %xmm3,%xmm4
mulsd  %xmm2,%xmm4
xor    %r12d,%r12d
ucomisd %xmm0,%xmm5
jbe    130f <tri_tri_intersect+0x1ef>
xorpd  %xmm0,%xmm0
ucomisd %xmm0,%xmm4
ja     183b <tri_tri_intersect+0x71b>
movapd %xmm5,0x40(%rsp)
movapd %xmm4,0x100(%rsp)
movdqa %xmm3,0xf0(%rsp)
movaps %xmm2,0x50(%rsp)
movsd  (%r14),%xmm3
movsd  0x8(%r14),%xmm4
movsd  (%r15),%xmm8
movsd  0x8(%r15),%xmm2
subsd  %xmm8,%xmm3
subsd  %xmm2,%xmm4
movsd  0x10(%r14),%xmm5
movsd  0x10(%r15),%xmm9
subsd  %xmm9,%xmm5
movsd  0x0(%rbp),%xmm0
movsd  0x8(%rbp),%xmm7
subsd  %xmm8,%xmm0
subsd  %xmm2,%xmm7
movsd  0x10(%rbp),%xmm6
subsd  %xmm9,%xmm6
movapd %xmm7,%xmm1
mulsd  %xmm5,%xmm1
mulsd  %xmm0,%xmm5
mulsd  %xmm4,%xmm0
mulsd  %xmm6,%xmm4
subsd  %xmm1,%xmm4
mulsd  %xmm3,%xmm6
subsd  %xmm6,%xmm5
mulsd  %xmm3,%xmm7
subsd  %xmm0,%xmm7
mov    0x30(%rsp),%rax
movsd  (%rax),%xmm3
movsd  0x8(%rax),%xmm0
movsd  0x10(%rax),%xmm1
mov    0x38(%rsp),%rax
movhpd 0x8(%rax),%xmm0
movapd %xmm5,0x130(%rsp)
unpcklpd %xmm5,%xmm5
mulpd  %xmm5,%xmm0
movapd %xmm4,0x110(%rsp)
movapd %xmm4,%xmm6
unpcklpd %xmm4,%xmm6
movhpd (%rax),%xmm3
mulpd  %xmm6,%xmm3
addpd  %xmm0,%xmm3
movapd %xmm7,0x120(%rsp)
movapd %xmm7,%xmm4
unpcklpd %xmm7,%xmm4
movhpd 0x10(%rax),%xmm1
mulpd  %xmm4,%xmm1
addpd  %xmm3,%xmm1
movsd  0x0(%r13),%xmm3
movsd  0x8(%r13),%xmm7
movsd  0x10(%r13),%xmm0
unpcklpd %xmm2,%xmm7
mulpd  %xmm5,%xmm7
unpcklpd %xmm8,%xmm3
mulpd  %xmm6,%xmm3
addpd  %xmm7,%xmm3
movapd %xmm0,%xmm2
unpcklpd %xmm9,%xmm2
mulpd  %xmm4,%xmm2
addpd  %xmm3,%xmm2
movapd %xmm2,%xmm0
unpckhpd %xmm2,%xmm0
subpd  %xmm0,%xmm1
movapd %xmm1,0x10(%rsp)
subsd  %xmm0,%xmm2
movapd %xmm2,0x70(%rsp)
movapd %xmm1,%xmm0
call   1040 <fabs@plt>
mov    %eax,%ebx
movaps 0x10(%rsp),%xmm0
movhlps %xmm0,%xmm0
call   1040 <fabs@plt>
movd   %ebx,%xmm0
movd   %eax,%xmm1
punpckldq %xmm1,%xmm0
movdqa 0xb76(%rip),%xmm1
pcmpgtd %xmm0,%xmm1
pxor   %xmm0,%xmm0
pcmpgtd %xmm1,%xmm0
punpckldq %xmm0,%xmm1
pandn  0x10(%rsp),%xmm1
movdqa %xmm1,0x10(%rsp)
movapd 0x70(%rsp),%xmm0
call   1040 <fabs@plt>
xorpd  %xmm0,%xmm0
xorpd  %xmm2,%xmm2
test   %eax,%eax
jle    14c3 <tri_tri_intersect+0x3a3>
movapd 0x70(%rsp),%xmm2
movdqa 0x10(%rsp),%xmm1
pshufd $0xee,%xmm1,%xmm3
movdqa %xmm1,%xmm4
mulsd  %xmm3,%xmm4
mulsd  %xmm2,%xmm1
ucomisd %xmm0,%xmm4
jbe    14ee <tri_tri_intersect+0x3ce>
xorpd  %xmm0,%xmm0
ucomisd %xmm0,%xmm1
ja     183b <tri_tri_intersect+0x71b>
movapd %xmm1,0xe0(%rsp)
movaps %xmm3,0xd0(%rsp)
movapd %xmm2,0x80(%rsp)
movapd 0x130(%rsp),%xmm3
movapd %xmm3,%xmm1
movapd 0x60(%rsp),%xmm5
mulsd  %xmm5,%xmm1
movapd 0x90(%rsp),%xmm2
movapd %xmm2,%xmm0
movapd %xmm4,0x70(%rsp)
movapd 0x120(%rsp),%xmm4
mulsd  %xmm4,%xmm0
subsd  %xmm1,%xmm0
movapd 0xa0(%rsp),%xmm6
mulsd  %xmm6,%xmm4
movapd 0x110(%rsp),%xmm1
mulsd  %xmm1,%xmm5
subsd  %xmm4,%xmm5
movapd %xmm5,0x60(%rsp)
mulsd  %xmm2,%xmm1
mulsd  %xmm3,%xmm6
subsd  %xmm1,%xmm6
movapd %xmm6,0xa0(%rsp)
call   1040 <fabs@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x90(%rsp)
movaps 0x60(%rsp),%xmm0
call   1040 <fabs@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x60(%rsp)
movaps 0xa0(%rsp),%xmm0
call   1040 <fabs@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
xor    %eax,%eax
movsd  0x90(%rsp),%xmm1
movsd  0x60(%rsp),%xmm2
ucomisd %xmm1,%xmm2
seta   %al
maxsd  %xmm1,%xmm2
ucomisd %xmm2,%xmm0
mov    $0x2,%ecx
cmovbe %rax,%rcx
xorpd  %xmm6,%xmm6
movapd 0x70(%rsp),%xmm0
ucomisd %xmm6,%xmm0
mov    0x30(%rsp),%rax
movsd  (%rax,%rcx,8),%xmm4
mov    0x38(%rsp),%rax
movsd  (%rax,%rcx,8),%xmm1
movsd  0x0(%r13,%rcx,8),%xmm5
movsd  (%r15,%rcx,8),%xmm3
movsd  (%r14,%rcx,8),%xmm2
movsd  0x0(%rbp,%rcx,8),%xmm0
jbe    1656 <tri_tri_intersect+0x536>
unpcklpd %xmm1,%xmm4
unpcklpd %xmm5,%xmm5
subpd  %xmm5,%xmm4
movapd 0x80(%rsp),%xmm1
unpcklpd %xmm1,%xmm1
mulpd  %xmm1,%xmm4
subpd  0x10(%rsp),%xmm1
divpd  %xmm1,%xmm4
addpd  %xmm5,%xmm4
movapd %xmm4,%xmm1
jmp    172d <tri_tri_intersect+0x60d>
movapd 0xe0(%rsp),%xmm7
ucomisd %xmm6,%xmm7
jbe    168e <tri_tri_intersect+0x56e>
unpcklpd %xmm5,%xmm4
unpcklpd %xmm1,%xmm1
subpd  %xmm1,%xmm4
movapd 0x10(%rsp),%xmm6
movapd %xmm6,%xmm5
unpckhpd %xmm6,%xmm5
mulpd  %xmm5,%xmm4
unpcklpd 0x80(%rsp),%xmm6
jmp    16f8 <tri_tri_intersect+0x5d8>
xorpd  %xmm9,%xmm9
movapd 0x10(%rsp),%xmm7
ucomisd %xmm9,%xmm7
movapd 0x80(%rsp),%xmm8
movapd 0xd0(%rsp),%xmm6
jne    1702 <tri_tri_intersect+0x5e2>
jp     1702 <tri_tri_intersect+0x5e2>
movapd %xmm6,%xmm7
mulsd  %xmm8,%xmm7
ucomisd %xmm9,%xmm7
ja     1702 <tri_tri_intersect+0x5e2>
xorpd  %xmm7,%xmm7
ucomisd %xmm7,%xmm6
jne    16d5 <tri_tri_intersect+0x5b5>
jnp    1850 <tri_tri_intersect+0x730>
unpcklpd %xmm5,%xmm4
unpcklpd %xmm1,%xmm1
subpd  %xmm1,%xmm4
movapd 0x10(%rsp),%xmm6
movapd %xmm6,%xmm5
unpckhpd %xmm6,%xmm5
mulpd  %xmm5,%xmm4
unpcklpd %xmm8,%xmm6
subpd  %xmm6,%xmm5
divpd  %xmm5,%xmm4
jmp    1729 <tri_tri_intersect+0x609>
unpcklpd %xmm5,%xmm1
unpcklpd %xmm4,%xmm4
subpd  %xmm4,%xmm1
movapd 0x10(%rsp),%xmm5
unpcklpd %xmm5,%xmm5
mulpd  %xmm5,%xmm1
unpcklpd %xmm8,%xmm6
subpd  %xmm6,%xmm5
divpd  %xmm5,%xmm1
addpd  %xmm4,%xmm1
movapd 0x20(%rsp),%xmm6
movapd 0x50(%rsp),%xmm7
movapd 0x40(%rsp),%xmm5
xorpd  %xmm4,%xmm4
ucomisd %xmm4,%xmm5
jbe    176e <tri_tri_intersect+0x64e>
unpcklpd %xmm3,%xmm2
unpcklpd %xmm0,%xmm0
subpd  %xmm0,%xmm2
unpcklpd %xmm7,%xmm7
mulpd  %xmm7,%xmm2
subpd  %xmm6,%xmm7
divpd  %xmm7,%xmm2
addpd  %xmm2,%xmm0
jmp    17ff <tri_tri_intersect+0x6df>
movapd 0x100(%rsp),%xmm5
ucomisd %xmm4,%xmm5
ja     17b0 <tri_tri_intersect+0x690>
xorpd  %xmm4,%xmm4
movapd 0xf0(%rsp),%xmm5
ucomisd %xmm4,%xmm5
jne    17db <tri_tri_intersect+0x6bb>
jp     17db <tri_tri_intersect+0x6bb>
movapd %xmm6,%xmm5
mulsd  %xmm7,%xmm5
ucomisd %xmm4,%xmm5
ja     17db <tri_tri_intersect+0x6bb>
xorpd  %xmm4,%xmm4
ucomisd %xmm4,%xmm6
jne    17b0 <tri_tri_intersect+0x690>
jnp    1894 <tri_tri_intersect+0x774>
unpcklpd %xmm3,%xmm0
unpcklpd %xmm2,%xmm2
subpd  %xmm2,%xmm0
movapd %xmm6,%xmm3
unpcklpd %xmm6,%xmm3
mulpd  %xmm3,%xmm0
shufpd $0x2,%xmm6,%xmm7
subpd  %xmm7,%xmm3
divpd  %xmm3,%xmm0
addpd  %xmm2,%xmm0
jmp    17ff <tri_tri_intersect+0x6df>
unpcklpd %xmm2,%xmm0
unpcklpd %xmm3,%xmm3
subpd  %xmm3,%xmm0
unpcklpd %xmm6,%xmm7
unpckhpd %xmm6,%xmm6
mulpd  %xmm6,%xmm0
subpd  %xmm7,%xmm6
divpd  %xmm6,%xmm0
addpd  %xmm3,%xmm0
movapd %xmm1,%xmm2
unpckhpd %xmm1,%xmm2
movapd %xmm2,%xmm3
minsd  %xmm1,%xmm3
maxsd  %xmm2,%xmm1
movapd %xmm0,%xmm2
unpckhpd %xmm0,%xmm2
movapd %xmm2,%xmm4
maxsd  %xmm0,%xmm4
minsd  %xmm2,%xmm0
ucomisd %xmm1,%xmm0
setbe  %al
ucomisd %xmm4,%xmm3
setbe  %cl
and    %al,%cl
movzbl %cl,%r12d
mov    %r12d,%eax
add    $0x148,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
ucomisd %xmm7,%xmm8
movapd 0x50(%rsp),%xmm7
jne    185f <tri_tri_intersect+0x73f>
jnp    18a4 <tri_tri_intersect+0x784>
unpcklpd %xmm1,%xmm4
unpcklpd %xmm5,%xmm5
subpd  %xmm5,%xmm4
unpcklpd %xmm8,%xmm8
mulpd  %xmm8,%xmm4
subpd  0x10(%rsp),%xmm8
divpd  %xmm8,%xmm4
addpd  %xmm5,%xmm4
movapd %xmm4,%xmm1
movapd 0x20(%rsp),%xmm6
jmp    1739 <tri_tri_intersect+0x619>
ucomisd %xmm4,%xmm7
jne    1749 <tri_tri_intersect+0x629>
jp     1749 <tri_tri_intersect+0x629>
mov    %rbp,(%rsp)
lea    0xb0(%rsp),%rdi
mov    0x30(%rsp),%rsi
mov    0x38(%rsp),%rdx
mov    %r13,%rcx
mov    %r15,%r8
mov    %r14,%r9
call   1030 <coplanar_tri_tri@plt>
mov    %eax,%r12d
jmp    183b <tri_tri_intersect+0x71b>

LLVM IR (-O0):
define i32 @tri_tri_intersect(double* %0, double* %1, double* %2, double* %3, double* %4, double* %5) {
%7 = alloca i32
%8 = alloca double*
%9 = alloca double*
%10 = alloca double*
%11 = alloca double*
%12 = alloca double*
%13 = alloca double*
%14 = alloca [3 x double]
%15 = alloca [3 x double]
%16 = alloca [3 x double]
%17 = alloca [3 x double]
%18 = alloca double
%19 = alloca double
%20 = alloca double
%21 = alloca double
%22 = alloca double
%23 = alloca double
%24 = alloca double
%25 = alloca double
%26 = alloca [3 x double]
%27 = alloca [2 x double]
%28 = alloca [2 x double]
%29 = alloca double
%30 = alloca double
%31 = alloca double
%32 = alloca double
%33 = alloca i16
%34 = alloca double
%35 = alloca double
%36 = alloca double
%37 = alloca double
%38 = alloca double
%39 = alloca double
%40 = alloca double
%41 = alloca double
%42 = alloca double
%43 = alloca double
%44 = alloca double
store double* %0, double** %8
store double* %1, double** %9
store double* %2, double** %10
store double* %3, double** %11
store double* %4, double** %12
store double* %5, double** %13
%45 = load double*, double** %9
%46 = getelementptr inbounds double, double* %45, i64 0
%47 = load double, double* %46
%48 = load double*, double** %8
%49 = getelementptr inbounds double, double* %48, i64 0
%50 = load double, double* %49
%51 = fsub double %47, %50
%52 = getelementptr inbounds [3 x double], [3 x double]* %14, i64 0, i64 0
store double %51, double* %52
%53 = load double*, double** %9
%54 = getelementptr inbounds double, double* %53, i64 1
%55 = load double, double* %54
%56 = load double*, double** %8
%57 = getelementptr inbounds double, double* %56, i64 1
%58 = load double, double* %57
%59 = fsub double %55, %58
%60 = getelementptr inbounds [3 x double], [3 x double]* %14, i64 0, i64 1
store double %59, double* %60
%61 = load double*, double** %9
%62 = getelementptr inbounds double, double* %61, i64 2
%63 = load double, double* %62
%64 = load double*, double** %8
%65 = getelementptr inbounds double, double* %64, i64 2
%66 = load double, double* %65
%67 = fsub double %63, %66
%68 = getelementptr inbounds [3 x double], [3 x double]* %14, i64 0, i64 2
store double %67, double* %68
%69 = load double*, double** %10
%70 = getelementptr inbounds double, double* %69, i64 0
%71 = load double, double* %70
%72 = load double*, double** %8
%73 = getelementptr inbounds double, double* %72, i64 0
%74 = load double, double* %73
%75 = fsub double %71, %74
%76 = getelementptr inbounds [3 x double], [3 x double]* %15, i64 0, i64 0
store double %75, double* %76
%77 = load double*, double** %10
%78 = getelementptr inbounds double, double* %77, i64 1
%79 = load double, double* %78
%80 = load double*, double** %8
%81 = getelementptr inbounds double, double* %80, i64 1
%82 = load double, double* %81
%83 = fsub double %79, %82
%84 = getelementptr inbounds [3 x double], [3 x double]* %15, i64 0, i64 1
store double %83, double* %84
%85 = load double*, double** %10
%86 = getelementptr inbounds double, double* %85, i64 2
%87 = load double, double* %86
%88 = load double*, double** %8
%89 = getelementptr inbounds double, double* %88, i64 2
%90 = load double, double* %89
%91 = fsub double %87, %90
%92 = getelementptr inbounds [3 x double], [3 x double]* %15, i64 0, i64 2
store double %91, double* %92
%93 = getelementptr inbounds [3 x double], [3 x double]* %14, i64 0, i64 1
%94 = load double, double* %93
%95 = getelementptr inbounds [3 x double], [3 x double]* %15, i64 0, i64 2
%96 = load double, double* %95
%97 = getelementptr inbounds [3 x double], [3 x double]* %14, i64 0, i64 2
%98 = load double, double* %97
%99 = getelementptr inbounds [3 x double], [3 x double]* %15, i64 0, i64 1
%100 = load double, double* %99
%101 = fmul double %98, %100
%102 = fneg double %101
%103 = call double @llvm.fmuladd.f64(double %94, double %96, double %102)
%104 = getelementptr inbounds [3 x double], [3 x double]* %16, i64 0, i64 0
store double %103, double* %104
%105 = getelementptr inbounds [3 x double], [3 x double]* %14, i64 0, i64 2
%106 = load double, double* %105
%107 = getelementptr inbounds [3 x double], [3 x double]* %15, i64 0, i64 0
%108 = load double, double* %107
%109 = getelementptr inbounds [3 x double], [3 x double]* %14, i64 0, i64 0
%110 = load double, double* %109
%111 = getelementptr inbounds [3 x double], [3 x double]* %15, i64 0, i64 2
%112 = load double, double* %111
%113 = fmul double %110, %112
%114 = fneg double %113
%115 = call double @llvm.fmuladd.f64(double %106, double %108, double %114)
%116 = getelementptr inbounds [3 x double], [3 x double]* %16, i64 0, i64 1
store double %115, double* %116
%117 = getelementptr inbounds [3 x double], [3 x double]* %14, i64 0, i64 0
%118 = load double, double* %117
%119 = getelementptr inbounds [3 x double], [3 x double]* %15, i64 0, i64 1
%120 = load double, double* %119
%121 = getelementptr inbounds [3 x double], [3 x double]* %14, i64 0, i64 1
%122 = load double, double* %121
%123 = getelementptr inbounds [3 x double], [3 x double]* %15, i64 0, i64 0
%124 = load double, double* %123
%125 = fmul double %122, %124
%126 = fneg double %125
%127 = call double @llvm.fmuladd.f64(double %118, double %120, double %126)
%128 = getelementptr inbounds [3 x double], [3 x double]* %16, i64 0, i64 2
store double %127, double* %128
%129 = getelementptr inbounds [3 x double], [3 x double]* %16, i64 0, i64 0
%130 = load double, double* %129
%131 = load double*, double** %8
%132 = getelementptr inbounds double, double* %131, i64 0
%133 = load double, double* %132
%134 = getelementptr inbounds [3 x double], [3 x double]* %16, i64 0, i64 1
%135 = load double, double* %134
%136 = load double*, double** %8
%137 = getelementptr inbounds double, double* %136, i64 1
%138 = load double, double* %137
%139 = fmul double %135, %138
%140 = call double @llvm.fmuladd.f64(double %130, double %133, double %139)
%141 = getelementptr inbounds [3 x double], [3 x double]* %16, i64 0, i64 2
%142 = load double, double* %141
%143 = load double*, double** %8
%144 = getelementptr inbounds double, double* %143, i64 2
%145 = load double, double* %144
%146 = call double @llvm.fmuladd.f64(double %142, double %145, double %140)
%147 = fneg double %146
store double %147, double* %18
%148 = getelementptr inbounds [3 x double], [3 x double]* %16, i64 0, i64 0
%149 = load double, double* %148
%150 = load double*, double** %11
%151 = getelementptr inbounds double, double* %150, i64 0
%152 = load double, double* %151
%153 = getelementptr inbounds [3 x double], [3 x double]* %16, i64 0, i64 1
%154 = load double, double* %153
%155 = load double*, double** %11
%156 = getelementptr inbounds double, double* %155, i64 1
%157 = load double, double* %156
%158 = fmul double %154, %157
%159 = call double @llvm.fmuladd.f64(double %149, double %152, double %158)
%160 = getelementptr inbounds [3 x double], [3 x double]* %16, i64 0, i64 2
%161 = load double, double* %160
%162 = load double*, double** %11
%163 = getelementptr inbounds double, double* %162, i64 2
%164 = load double, double* %163
%165 = call double @llvm.fmuladd.f64(double %161, double %164, double %159)
%166 = load double, double* %18
%167 = fadd double %165, %166
store double %167, double* %20
%168 = getelementptr inbounds [3 x double], [3 x double]* %16, i64 0, i64 0
%169 = load double, double* %168
%170 = load double*, double** %12
%171 = getelementptr inbounds double, double* %170, i64 0
%172 = load double, double* %171
%173 = getelementptr inbounds [3 x double], [3 x double]* %16, i64 0, i64 1
%174 = load double, double* %173
%175 = load double*, double** %12
%176 = getelementptr inbounds double, double* %175, i64 1
%177 = load double, double* %176
%178 = fmul double %174, %177
%179 = call double @llvm.fmuladd.f64(double %169, double %172, double %178)
%180 = getelementptr inbounds [3 x double], [3 x double]* %16, i64 0, i64 2
%181 = load double, double* %180
%182 = load double*, double** %12
%183 = getelementptr inbounds double, double* %182, i64 2
%184 = load double, double* %183
%185 = call double @llvm.fmuladd.f64(double %181, double %184, double %179)
%186 = load double, double* %18
%187 = fadd double %185, %186
store double %187, double* %21
%188 = getelementptr inbounds [3 x double], [3 x double]* %16, i64 0, i64 0
%189 = load double, double* %188
%190 = load double*, double** %13
%191 = getelementptr inbounds double, double* %190, i64 0
%192 = load double, double* %191
%193 = getelementptr inbounds [3 x double], [3 x double]* %16, i64 0, i64 1
%194 = load double, double* %193
%195 = load double*, double** %13
%196 = getelementptr inbounds double, double* %195, i64 1
%197 = load double, double* %196
%198 = fmul double %194, %197
%199 = call double @llvm.fmuladd.f64(double %189, double %192, double %198)
%200 = getelementptr inbounds [3 x double], [3 x double]* %16, i64 0, i64 2
%201 = load double, double* %200
%202 = load double*, double** %13
%203 = getelementptr inbounds double, double* %202, i64 2
%204 = load double, double* %203
%205 = call double @llvm.fmuladd.f64(double %201, double %204, double %199)
%206 = load double, double* %18
%207 = fadd double %205, %206
store double %207, double* %22
%208 = load double, double* %20
%209 = call i32 @fabs(double %208)
%210 = sitofp i32 %209 to double
%211 = fcmp olt double %210, 1.000000e-05
br i1 %211, label %212, label %213
212: ; preds = %6
store double 0.000000e+00, double* %20
br label %213
213: ; preds = %212, %6
%214 = load double, double* %21
%215 = call i32 @fabs(double %214)
%216 = sitofp i32 %215 to double
%217 = fcmp olt double %216, 1.000000e-05
br i1 %217, label %218, label %219
218: ; preds = %213
store double 0.000000e+00, double* %21
br label %219
219: ; preds = %218, %213
%220 = load double, double* %22
%221 = call i32 @fabs(double %220)
%222 = sitofp i32 %221 to double
%223 = fcmp olt double %222, 1.000000e-05
br i1 %223, label %224, label %225
224: ; preds = %219
store double 0.000000e+00, double* %22
br label %225
225: ; preds = %224, %219
%226 = load double, double* %20
%227 = load double, double* %21
%228 = fmul double %226, %227
store double %228, double* %29
%229 = load double, double* %20
%230 = load double, double* %22
%231 = fmul double %229, %230
store double %231, double* %30
%232 = load double, double* %29
%233 = fcmp ogt double %232, 0.000000e+00
br i1 %233, label %234, label %238
234: ; preds = %225
%235 = load double, double* %30
%236 = fcmp ogt double %235, 0.000000e+00
br i1 %236, label %237, label %238
237: ; preds = %234
store i32 0, i32* %7
br label %880
238: ; preds = %234, %225
%239 = load double*, double** %12
%240 = getelementptr inbounds double, double* %239, i64 0
%241 = load double, double* %240
%242 = load double*, double** %11
%243 = getelementptr inbounds double, double* %242, i64 0
%244 = load double, double* %243
%245 = fsub double %241, %244
%246 = getelementptr inbounds [3 x double], [3 x double]* %14, i64 0, i64 0
store double %245, double* %246
%247 = load double*, double** %12
%248 = getelementptr inbounds double, double* %247, i64 1
%249 = load double, double* %248
%250 = load double*, double** %11
%251 = getelementptr inbounds double, double* %250, i64 1
%252 = load double, double* %251
%253 = fsub double %249, %252
%254 = getelementptr inbounds [3 x double], [3 x double]* %14, i64 0, i64 1
store double %253, double* %254
%255 = load double*, double** %12
%256 = getelementptr inbounds double, double* %255, i64 2
%257 = load double, double* %256
%258 = load double*, double** %11
%259 = getelementptr inbounds double, double* %258, i64 2
%260 = load double, double* %259
%261 = fsub double %257, %260
%262 = getelementptr inbounds [3 x double], [3 x double]* %14, i64 0, i64 2
store double %261, double* %262
%263 = load double*, double** %13
%264 = getelementptr inbounds double, double* %263, i64 0
%265 = load double, double* %264
%266 = load double*, double** %11
%267 = getelementptr inbounds double, double* %266, i64 0
%268 = load double, double* %267
%269 = fsub double %265, %268
%270 = getelementptr inbounds [3 x double], [3 x double]* %15, i64 0, i64 0
store double %269, double* %270
%271 = load double*, double** %13
%272 = getelementptr inbounds double, double* %271, i64 1
%273 = load double, double* %272
%274 = load double*, double** %11
%275 = getelementptr inbounds double, double* %274, i64 1
%276 = load double, double* %275
%277 = fsub double %273, %276
%278 = getelementptr inbounds [3 x double], [3 x double]* %15, i64 0, i64 1
store double %277, double* %278
%279 = load double*, double** %13
%280 = getelementptr inbounds double, double* %279, i64 2
%281 = load double, double* %280
%282 = load double*, double** %11
%283 = getelementptr inbounds double, double* %282, i64 2
%284 = load double, double* %283
%285 = fsub double %281, %284
%286 = getelementptr inbounds [3 x double], [3 x double]* %15, i64 0, i64 2
store double %285, double* %286
%287 = getelementptr inbounds [3 x double], [3 x double]* %14, i64 0, i64 1
%288 = load double, double* %287
%289 = getelementptr inbounds [3 x double], [3 x double]* %15, i64 0, i64 2
%290 = load double, double* %289
%291 = getelementptr inbounds [3 x double], [3 x double]* %14, i64 0, i64 2
%292 = load double, double* %291
%293 = getelementptr inbounds [3 x double], [3 x double]* %15, i64 0, i64 1
%294 = load double, double* %293
%295 = fmul double %292, %294
%296 = fneg double %295
%297 = call double @llvm.fmuladd.f64(double %288, double %290, double %296)
%298 = getelementptr inbounds [3 x double], [3 x double]* %17, i64 0, i64 0
store double %297, double* %298
%299 = getelementptr inbounds [3 x double], [3 x double]* %14, i64 0, i64 2
%300 = load double, double* %299
%301 = getelementptr inbounds [3 x double], [3 x double]* %15, i64 0, i64 0
%302 = load double, double* %301
%303 = getelementptr inbounds [3 x double], [3 x double]* %14, i64 0, i64 0
%304 = load double, double* %303
%305 = getelementptr inbounds [3 x double], [3 x double]* %15, i64 0, i64 2
%306 = load double, double* %305
%307 = fmul double %304, %306
%308 = fneg double %307
%309 = call double @llvm.fmuladd.f64(double %300, double %302, double %308)
%310 = getelementptr inbounds [3 x double], [3 x double]* %17, i64 0, i64 1
store double %309, double* %310
%311 = getelementptr inbounds [3 x double], [3 x double]* %14, i64 0, i64 0
%312 = load double, double* %311
%313 = getelementptr inbounds [3 x double], [3 x double]* %15, i64 0, i64 1
%314 = load double, double* %313
%315 = getelementptr inbounds [3 x double], [3 x double]* %14, i64 0, i64 1
%316 = load double, double* %315
%317 = getelementptr inbounds [3 x double], [3 x double]* %15, i64 0, i64 0
%318 = load double, double* %317
%319 = fmul double %316, %318
%320 = fneg double %319
%321 = call double @llvm.fmuladd.f64(double %312, double %314, double %320)
%322 = getelementptr inbounds [3 x double], [3 x double]* %17, i64 0, i64 2
store double %321, double* %322
%323 = getelementptr inbounds [3 x double], [3 x double]* %17, i64 0, i64 0
%324 = load double, double* %323
%325 = load double*, double** %11
%326 = getelementptr inbounds double, double* %325, i64 0
%327 = load double, double* %326
%328 = getelementptr inbounds [3 x double], [3 x double]* %17, i64 0, i64 1
%329 = load double, double* %328
%330 = load double*, double** %11
%331 = getelementptr inbounds double, double* %330, i64 1
%332 = load double, double* %331
%333 = fmul double %329, %332
%334 = call double @llvm.fmuladd.f64(double %324, double %327, double %333)
%335 = getelementptr inbounds [3 x double], [3 x double]* %17, i64 0, i64 2
%336 = load double, double* %335
%337 = load double*, double** %11
%338 = getelementptr inbounds double, double* %337, i64 2
%339 = load double, double* %338
%340 = call double @llvm.fmuladd.f64(double %336, double %339, double %334)
%341 = fneg double %340
store double %341, double* %19
%342 = getelementptr inbounds [3 x double], [3 x double]* %17, i64 0, i64 0
%343 = load double, double* %342
%344 = load double*, double** %8
%345 = getelementptr inbounds double, double* %344, i64 0
%346 = load double, double* %345
%347 = getelementptr inbounds [3 x double], [3 x double]* %17, i64 0, i64 1
%348 = load double, double* %347
%349 = load double*, double** %8
%350 = getelementptr inbounds double, double* %349, i64 1
%351 = load double, double* %350
%352 = fmul double %348, %351
%353 = call double @llvm.fmuladd.f64(double %343, double %346, double %352)
%354 = getelementptr inbounds [3 x double], [3 x double]* %17, i64 0, i64 2
%355 = load double, double* %354
%356 = load double*, double** %8
%357 = getelementptr inbounds double, double* %356, i64 2
%358 = load double, double* %357
%359 = call double @llvm.fmuladd.f64(double %355, double %358, double %353)
%360 = load double, double* %19
%361 = fadd double %359, %360
store double %361, double* %23
%362 = getelementptr inbounds [3 x double], [3 x double]* %17, i64 0, i64 0
%363 = load double, double* %362
%364 = load double*, double** %9
%365 = getelementptr inbounds double, double* %364, i64 0
%366 = load double, double* %365
%367 = getelementptr inbounds [3 x double], [3 x double]* %17, i64 0, i64 1
%368 = load double, double* %367
%369 = load double*, double** %9
%370 = getelementptr inbounds double, double* %369, i64 1
%371 = load double, double* %370
%372 = fmul double %368, %371
%373 = call double @llvm.fmuladd.f64(double %363, double %366, double %372)
%374 = getelementptr inbounds [3 x double], [3 x double]* %17, i64 0, i64 2
%375 = load double, double* %374
%376 = load double*, double** %9
%377 = getelementptr inbounds double, double* %376, i64 2
%378 = load double, double* %377
%379 = call double @llvm.fmuladd.f64(double %375, double %378, double %373)
%380 = load double, double* %19
%381 = fadd double %379, %380
store double %381, double* %24
%382 = getelementptr inbounds [3 x double], [3 x double]* %17, i64 0, i64 0
%383 = load double, double* %382
%384 = load double*, double** %10
%385 = getelementptr inbounds double, double* %384, i64 0
%386 = load double, double* %385
%387 = getelementptr inbounds [3 x double], [3 x double]* %17, i64 0, i64 1
%388 = load double, double* %387
%389 = load double*, double** %10
%390 = getelementptr inbounds double, double* %389, i64 1
%391 = load double, double* %390
%392 = fmul double %388, %391
%393 = call double @llvm.fmuladd.f64(double %383, double %386, double %392)
%394 = getelementptr inbounds [3 x double], [3 x double]* %17, i64 0, i64 2
%395 = load double, double* %394
%396 = load double*, double** %10
%397 = getelementptr inbounds double, double* %396, i64 2
%398 = load double, double* %397
%399 = call double @llvm.fmuladd.f64(double %395, double %398, double %393)
%400 = load double, double* %19
%401 = fadd double %399, %400
store double %401, double* %25
%402 = load double, double* %23
%403 = call i32 @fabs(double %402)
%404 = sitofp i32 %403 to double
%405 = fcmp olt double %404, 1.000000e-05
br i1 %405, label %406, label %407
406: ; preds = %238
store double 0.000000e+00, double* %23
br label %407
407: ; preds = %406, %238
%408 = load double, double* %24
%409 = call i32 @fabs(double %408)
%410 = sitofp i32 %409 to double
%411 = fcmp olt double %410, 1.000000e-05
br i1 %411, label %412, label %413
412: ; preds = %407
store double 0.000000e+00, double* %24
br label %413
413: ; preds = %412, %407
%414 = load double, double* %25
%415 = call i32 @fabs(double %414)
%416 = sitofp i32 %415 to double
%417 = fcmp olt double %416, 1.000000e-05
br i1 %417, label %418, label %419
418: ; preds = %413
store double 0.000000e+00, double* %25
br label %419
419: ; preds = %418, %413
%420 = load double, double* %23
%421 = load double, double* %24
%422 = fmul double %420, %421
store double %422, double* %31
%423 = load double, double* %23
%424 = load double, double* %25
%425 = fmul double %423, %424
store double %425, double* %32
%426 = load double, double* %31
%427 = fcmp ogt double %426, 0.000000e+00
br i1 %427, label %428, label %432
428: ; preds = %419
%429 = load double, double* %32
%430 = fcmp ogt double %429, 0.000000e+00
br i1 %430, label %431, label %432
431: ; preds = %428
store i32 0, i32* %7
br label %880
432: ; preds = %428, %419
%433 = getelementptr inbounds [3 x double], [3 x double]* %16, i64 0, i64 1
%434 = load double, double* %433
%435 = getelementptr inbounds [3 x double], [3 x double]* %17, i64 0, i64 2
%436 = load double, double* %435
%437 = getelementptr inbounds [3 x double], [3 x double]* %16, i64 0, i64 2
%438 = load double, double* %437
%439 = getelementptr inbounds [3 x double], [3 x double]* %17, i64 0, i64 1
%440 = load double, double* %439
%441 = fmul double %438, %440
%442 = fneg double %441
%443 = call double @llvm.fmuladd.f64(double %434, double %436, double %442)
%444 = getelementptr inbounds [3 x double], [3 x double]* %26, i64 0, i64 0
store double %443, double* %444
%445 = getelementptr inbounds [3 x double], [3 x double]* %16, i64 0, i64 2
%446 = load double, double* %445
%447 = getelementptr inbounds [3 x double], [3 x double]* %17, i64 0, i64 0
%448 = load double, double* %447
%449 = getelementptr inbounds [3 x double], [3 x double]* %16, i64 0, i64 0
%450 = load double, double* %449
%451 = getelementptr inbounds [3 x double], [3 x double]* %17, i64 0, i64 2
%452 = load double, double* %451
%453 = fmul double %450, %452
%454 = fneg double %453
%455 = call double @llvm.fmuladd.f64(double %446, double %448, double %454)
%456 = getelementptr inbounds [3 x double], [3 x double]* %26, i64 0, i64 1
store double %455, double* %456
%457 = getelementptr inbounds [3 x double], [3 x double]* %16, i64 0, i64 0
%458 = load double, double* %457
%459 = getelementptr inbounds [3 x double], [3 x double]* %17, i64 0, i64 1
%460 = load double, double* %459
%461 = getelementptr inbounds [3 x double], [3 x double]* %16, i64 0, i64 1
%462 = load double, double* %461
%463 = getelementptr inbounds [3 x double], [3 x double]* %17, i64 0, i64 0
%464 = load double, double* %463
%465 = fmul double %462, %464
%466 = fneg double %465
%467 = call double @llvm.fmuladd.f64(double %458, double %460, double %466)
%468 = getelementptr inbounds [3 x double], [3 x double]* %26, i64 0, i64 2
store double %467, double* %468
%469 = getelementptr inbounds [3 x double], [3 x double]* %26, i64 0, i64 0
%470 = load double, double* %469
%471 = call i32 @fabs(double %470)
%472 = sitofp i32 %471 to double
store double %472, double* %42
store i16 0, i16* %33
%473 = getelementptr inbounds [3 x double], [3 x double]* %26, i64 0, i64 1
%474 = load double, double* %473
%475 = call i32 @fabs(double %474)
%476 = sitofp i32 %475 to double
store double %476, double* %40
%477 = getelementptr inbounds [3 x double], [3 x double]* %26, i64 0, i64 2
%478 = load double, double* %477
%479 = call i32 @fabs(double %478)
%480 = sitofp i32 %479 to double
store double %480, double* %41
%481 = load double, double* %40
%482 = load double, double* %42
%483 = fcmp ogt double %481, %482
br i1 %483, label %484, label %486
484: ; preds = %432
%485 = load double, double* %40
store double %485, double* %42
store i16 1, i16* %33
br label %486
486: ; preds = %484, %432
%487 = load double, double* %41
%488 = load double, double* %42
%489 = fcmp ogt double %487, %488
br i1 %489, label %490, label %492
490: ; preds = %486
%491 = load double, double* %41
store double %491, double* %42
store i16 2, i16* %33
br label %492
492: ; preds = %490, %486
%493 = load double*, double** %8
%494 = load i16, i16* %33
%495 = sext i16 %494 to i64
%496 = getelementptr inbounds double, double* %493, i64 %495
%497 = load double, double* %496
store double %497, double* %34
%498 = load double*, double** %9
%499 = load i16, i16* %33
%500 = sext i16 %499 to i64
%501 = getelementptr inbounds double, double* %498, i64 %500
%502 = load double, double* %501
store double %502, double* %35
%503 = load double*, double** %10
%504 = load i16, i16* %33
%505 = sext i16 %504 to i64
%506 = getelementptr inbounds double, double* %503, i64 %505
%507 = load double, double* %506
store double %507, double* %36
%508 = load double*, double** %11
%509 = load i16, i16* %33
%510 = sext i16 %509 to i64
%511 = getelementptr inbounds double, double* %508, i64 %510
%512 = load double, double* %511
store double %512, double* %37
%513 = load double*, double** %12
%514 = load i16, i16* %33
%515 = sext i16 %514 to i64
%516 = getelementptr inbounds double, double* %513, i64 %515
%517 = load double, double* %516
store double %517, double* %38
%518 = load double*, double** %13
%519 = load i16, i16* %33
%520 = sext i16 %519 to i64
%521 = getelementptr inbounds double, double* %518, i64 %520
%522 = load double, double* %521
store double %522, double* %39
%523 = load double, double* %31
%524 = fcmp ogt double %523, 0.000000e+00
br i1 %524, label %525, label %550
525: ; preds = %492
%526 = load double, double* %36
%527 = load double, double* %34
%528 = load double, double* %36
%529 = fsub double %527, %528
%530 = load double, double* %25
%531 = fmul double %529, %530
%532 = load double, double* %25
%533 = load double, double* %23
%534 = fsub double %532, %533
%535 = fdiv double %531, %534
%536 = fadd double %526, %535
%537 = getelementptr inbounds [2 x double], [2 x double]* %27, i64 0, i64 0
store double %536, double* %537
%538 = load double, double* %36
%539 = load double, double* %35
%540 = load double, double* %36
%541 = fsub double %539, %540
%542 = load double, double* %25
%543 = fmul double %541, %542
%544 = load double, double* %25
%545 = load double, double* %24
%546 = fsub double %544, %545
%547 = fdiv double %543, %546
%548 = fadd double %538, %547
%549 = getelementptr inbounds [2 x double], [2 x double]* %27, i64 0, i64 1
store double %548, double* %549
br label %680
550: ; preds = %492
%551 = load double, double* %32
%552 = fcmp ogt double %551, 0.000000e+00
br i1 %552, label %553, label %578
553: ; preds = %550
%554 = load double, double* %35
%555 = load double, double* %34
%556 = load double, double* %35
%557 = fsub double %555, %556
%558 = load double, double* %24
%559 = fmul double %557, %558
%560 = load double, double* %24
%561 = load double, double* %23
%562 = fsub double %560, %561
%563 = fdiv double %559, %562
%564 = fadd double %554, %563
%565 = getelementptr inbounds [2 x double], [2 x double]* %27, i64 0, i64 0
store double %564, double* %565
%566 = load double, double* %35
%567 = load double, double* %36
%568 = load double, double* %35
%569 = fsub double %567, %568
%570 = load double, double* %24
%571 = fmul double %569, %570
%572 = load double, double* %24
%573 = load double, double* %25
%574 = fsub double %572, %573
%575 = fdiv double %571, %574
%576 = fadd double %566, %575
%577 = getelementptr inbounds [2 x double], [2 x double]* %27, i64 0, i64 1
store double %576, double* %577
br label %679
578: ; preds = %550
%579 = load double, double* %24
%580 = load double, double* %25
%581 = fmul double %579, %580
%582 = fcmp ogt double %581, 0.000000e+00
br i1 %582, label %586, label %583
583: ; preds = %578
%584 = load double, double* %23
%585 = fcmp une double %584, 0.000000e+00
br i1 %585, label %586, label %611
586: ; preds = %583, %578
%587 = load double, double* %34
%588 = load double, double* %35
%589 = load double, double* %34
%590 = fsub double %588, %589
%591 = load double, double* %23
%592 = fmul double %590, %591
%593 = load double, double* %23
%594 = load double, double* %24
%595 = fsub double %593, %594
%596 = fdiv double %592, %595
%597 = fadd double %587, %596
%598 = getelementptr inbounds [2 x double], [2 x double]* %27, i64 0, i64 0
store double %597, double* %598
%599 = load double, double* %34
%600 = load double, double* %36
%601 = load double, double* %34
%602 = fsub double %600, %601
%603 = load double, double* %23
%604 = fmul double %602, %603
%605 = load double, double* %23
%606 = load double, double* %25
%607 = fsub double %605, %606
%608 = fdiv double %604, %607
%609 = fadd double %599, %608
%610 = getelementptr inbounds [2 x double], [2 x double]* %27, i64 0, i64 1
store double %609, double* %610
br label %678
611: ; preds = %583
%612 = load double, double* %24
%613 = fcmp une double %612, 0.000000e+00
br i1 %613, label %614, label %639
614: ; preds = %611
%615 = load double, double* %35
%616 = load double, double* %34
%617 = load double, double* %35
%618 = fsub double %616, %617
%619 = load double, double* %24
%620 = fmul double %618, %619
%621 = load double, double* %24
%622 = load double, double* %23
%623 = fsub double %621, %622
%624 = fdiv double %620, %623
%625 = fadd double %615, %624
%626 = getelementptr inbounds [2 x double], [2 x double]* %27, i64 0, i64 0
store double %625, double* %626
%627 = load double, double* %35
%628 = load double, double* %36
%629 = load double, double* %35
%630 = fsub double %628, %629
%631 = load double, double* %24
%632 = fmul double %630, %631
%633 = load double, double* %24
%634 = load double, double* %25
%635 = fsub double %633, %634
%636 = fdiv double %632, %635
%637 = fadd double %627, %636
%638 = getelementptr inbounds [2 x double], [2 x double]* %27, i64 0, i64 1
store double %637, double* %638
br label %677
639: ; preds = %611
%640 = load double, double* %25
%641 = fcmp une double %640, 0.000000e+00
br i1 %641, label %642, label %667
642: ; preds = %639
%643 = load double, double* %36
%644 = load double, double* %34
%645 = load double, double* %36
%646 = fsub double %644, %645
%647 = load double, double* %25
%648 = fmul double %646, %647
%649 = load double, double* %25
%650 = load double, double* %23
%651 = fsub double %649, %650
%652 = fdiv double %648, %651
%653 = fadd double %643, %652
%654 = getelementptr inbounds [2 x double], [2 x double]* %27, i64 0, i64 0
store double %653, double* %654
%655 = load double, double* %36
%656 = load double, double* %35
%657 = load double, double* %36
%658 = fsub double %656, %657
%659 = load double, double* %25
%660 = fmul double %658, %659
%661 = load double, double* %25
%662 = load double, double* %24
%663 = fsub double %661, %662
%664 = fdiv double %660, %663
%665 = fadd double %655, %664
%666 = getelementptr inbounds [2 x double], [2 x double]* %27, i64 0, i64 1
store double %665, double* %666
br label %676
667: ; preds = %639
%668 = getelementptr inbounds [3 x double], [3 x double]* %16, i64 0, i64 0
%669 = load double*, double** %8
%670 = load double*, double** %9
%671 = load double*, double** %10
%672 = load double*, double** %11
%673 = load double*, double** %12
%674 = load double*, double** %13
%675 = call i32 @coplanar_tri_tri(double* %668, double* %669, double* %670, double* %671, double* %672, double* %673, double* %674)
store i32 %675, i32* %7
br label %880
676: ; preds = %642
br label %677
677: ; preds = %676, %614
br label %678
678: ; preds = %677, %586
br label %679
679: ; preds = %678, %553
br label %680
680: ; preds = %679, %525
%681 = load double, double* %29
%682 = fcmp ogt double %681, 0.000000e+00
br i1 %682, label %683, label %708
683: ; preds = %680
%684 = load double, double* %39
%685 = load double, double* %37
%686 = load double, double* %39
%687 = fsub double %685, %686
%688 = load double, double* %22
%689 = fmul double %687, %688
%690 = load double, double* %22
%691 = load double, double* %20
%692 = fsub double %690, %691
%693 = fdiv double %689, %692
%694 = fadd double %684, %693
%695 = getelementptr inbounds [2 x double], [2 x double]* %28, i64 0, i64 0
store double %694, double* %695
%696 = load double, double* %39
%697 = load double, double* %38
%698 = load double, double* %39
%699 = fsub double %697, %698
%700 = load double, double* %22
%701 = fmul double %699, %700
%702 = load double, double* %22
%703 = load double, double* %21
%704 = fsub double %702, %703
%705 = fdiv double %701, %704
%706 = fadd double %696, %705
%707 = getelementptr inbounds [2 x double], [2 x double]* %28, i64 0, i64 1
store double %706, double* %707
br label %838
708: ; preds = %680
%709 = load double, double* %30
%710 = fcmp ogt double %709, 0.000000e+00
br i1 %710, label %711, label %736
711: ; preds = %708
%712 = load double, double* %38
%713 = load double, double* %37
%714 = load double, double* %38
%715 = fsub double %713, %714
%716 = load double, double* %21
%717 = fmul double %715, %716
%718 = load double, double* %21
%719 = load double, double* %20
%720 = fsub double %718, %719
%721 = fdiv double %717, %720
%722 = fadd double %712, %721
%723 = getelementptr inbounds [2 x double], [2 x double]* %28, i64 0, i64 0
store double %722, double* %723
%724 = load double, double* %38
%725 = load double, double* %39
%726 = load double, double* %38
%727 = fsub double %725, %726
%728 = load double, double* %21
%729 = fmul double %727, %728
%730 = load double, double* %21
%731 = load double, double* %22
%732 = fsub double %730, %731
%733 = fdiv double %729, %732
%734 = fadd double %724, %733
%735 = getelementptr inbounds [2 x double], [2 x double]* %28, i64 0, i64 1
store double %734, double* %735
br label %837
736: ; preds = %708
%737 = load double, double* %21
%738 = load double, double* %22
%739 = fmul double %737, %738
%740 = fcmp ogt double %739, 0.000000e+00
br i1 %740, label %744, label %741
741: ; preds = %736
%742 = load double, double* %20
%743 = fcmp une double %742, 0.000000e+00
br i1 %743, label %744, label %769
744: ; preds = %741, %736
%745 = load double, double* %37
%746 = load double, double* %38
%747 = load double, double* %37
%748 = fsub double %746, %747
%749 = load double, double* %20
%750 = fmul double %748, %749
%751 = load double, double* %20
%752 = load double, double* %21
%753 = fsub double %751, %752
%754 = fdiv double %750, %753
%755 = fadd double %745, %754
%756 = getelementptr inbounds [2 x double], [2 x double]* %28, i64 0, i64 0
store double %755, double* %756
%757 = load double, double* %37
%758 = load double, double* %39
%759 = load double, double* %37
%760 = fsub double %758, %759
%761 = load double, double* %20
%762 = fmul double %760, %761
%763 = load double, double* %20
%764 = load double, double* %22
%765 = fsub double %763, %764
%766 = fdiv double %762, %765
%767 = fadd double %757, %766
%768 = getelementptr inbounds [2 x double], [2 x double]* %28, i64 0, i64 1
store double %767, double* %768
br label %836
769: ; preds = %741
%770 = load double, double* %21
%771 = fcmp une double %770, 0.000000e+00
br i1 %771, label %772, label %797
772: ; preds = %769
%773 = load double, double* %38
%774 = load double, double* %37
%775 = load double, double* %38
%776 = fsub double %774, %775
%777 = load double, double* %21
%778 = fmul double %776, %777
%779 = load double, double* %21
%780 = load double, double* %20
%781 = fsub double %779, %780
%782 = fdiv double %778, %781
%783 = fadd double %773, %782
%784 = getelementptr inbounds [2 x double], [2 x double]* %28, i64 0, i64 0
store double %783, double* %784
%785 = load double, double* %38
%786 = load double, double* %39
%787 = load double, double* %38
%788 = fsub double %786, %787
%789 = load double, double* %21
%790 = fmul double %788, %789
%791 = load double, double* %21
%792 = load double, double* %22
%793 = fsub double %791, %792
%794 = fdiv double %790, %793
%795 = fadd double %785, %794
%796 = getelementptr inbounds [2 x double], [2 x double]* %28, i64 0, i64 1
store double %795, double* %796
br label %835
797: ; preds = %769
%798 = load double, double* %22
%799 = fcmp une double %798, 0.000000e+00
br i1 %799, label %800, label %825
800: ; preds = %797
%801 = load double, double* %39
%802 = load double, double* %37
%803 = load double, double* %39
%804 = fsub double %802, %803
%805 = load double, double* %22
%806 = fmul double %804, %805
%807 = load double, double* %22
%808 = load double, double* %20
%809 = fsub double %807, %808
%810 = fdiv double %806, %809
%811 = fadd double %801, %810
%812 = getelementptr inbounds [2 x double], [2 x double]* %28, i64 0, i64 0
store double %811, double* %812
%813 = load double, double* %39
%814 = load double, double* %38
%815 = load double, double* %39
%816 = fsub double %814, %815
%817 = load double, double* %22
%818 = fmul double %816, %817
%819 = load double, double* %22
%820 = load double, double* %21
%821 = fsub double %819, %820
%822 = fdiv double %818, %821
%823 = fadd double %813, %822
%824 = getelementptr inbounds [2 x double], [2 x double]* %28, i64 0, i64 1
store double %823, double* %824
br label %834
825: ; preds = %797
%826 = getelementptr inbounds [3 x double], [3 x double]* %16, i64 0, i64 0
%827 = load double*, double** %8
%828 = load double*, double** %9
%829 = load double*, double** %10
%830 = load double*, double** %11
%831 = load double*, double** %12
%832 = load double*, double** %13
%833 = call i32 @coplanar_tri_tri(double* %826, double* %827, double* %828, double* %829, double* %830, double* %831, double* %832)
store i32 %833, i32* %7
br label %880
834: ; preds = %800
br label %835
835: ; preds = %834, %772
br label %836
836: ; preds = %835, %744
br label %837
837: ; preds = %836, %711
br label %838
838: ; preds = %837, %683
%839 = getelementptr inbounds [2 x double], [2 x double]* %27, i64 0, i64 0
%840 = load double, double* %839
%841 = getelementptr inbounds [2 x double], [2 x double]* %27, i64 0, i64 1
%842 = load double, double* %841
%843 = fcmp ogt double %840, %842
br i1 %843, label %844, label %852
844: ; preds = %838
%845 = getelementptr inbounds [2 x double], [2 x double]* %27, i64 0, i64 0
%846 = load double, double* %845
store double %846, double* %43
%847 = getelementptr inbounds [2 x double], [2 x double]* %27, i64 0, i64 1
%848 = load double, double* %847
%849 = getelementptr inbounds [2 x double], [2 x double]* %27, i64 0, i64 0
store double %848, double* %849
%850 = load double, double* %43
%851 = getelementptr inbounds [2 x double], [2 x double]* %27, i64 0, i64 1
store double %850, double* %851
br label %852
852: ; preds = %844, %838
%853 = getelementptr inbounds [2 x double], [2 x double]* %28, i64 0, i64 0
%854 = load double, double* %853
%855 = getelementptr inbounds [2 x double], [2 x double]* %28, i64 0, i64 1
%856 = load double, double* %855
%857 = fcmp ogt double %854, %856
br i1 %857, label %858, label %866
858: ; preds = %852
%859 = getelementptr inbounds [2 x double], [2 x double]* %28, i64 0, i64 0
%860 = load double, double* %859
store double %860, double* %44
%861 = getelementptr inbounds [2 x double], [2 x double]* %28, i64 0, i64 1
%862 = load double, double* %861
%863 = getelementptr inbounds [2 x double], [2 x double]* %28, i64 0, i64 0
store double %862, double* %863
%864 = load double, double* %44
%865 = getelementptr inbounds [2 x double], [2 x double]* %28, i64 0, i64 1
store double %864, double* %865
br label %866
866: ; preds = %858, %852
%867 = getelementptr inbounds [2 x double], [2 x double]* %27, i64 0, i64 1
%868 = load double, double* %867
%869 = getelementptr inbounds [2 x double], [2 x double]* %28, i64 0, i64 0
%870 = load double, double* %869
%871 = fcmp olt double %868, %870
br i1 %871, label %878, label %872
872: ; preds = %866
%873 = getelementptr inbounds [2 x double], [2 x double]* %28, i64 0, i64 1
%874 = load double, double* %873
%875 = getelementptr inbounds [2 x double], [2 x double]* %27, i64 0, i64 0
%876 = load double, double* %875
%877 = fcmp olt double %874, %876
br i1 %877, label %878, label %879
878: ; preds = %872, %866
store i32 0, i32* %7
br label %880
879: ; preds = %872
store i32 1, i32* %7
br label %880
880: ; preds = %879, %878, %825, %667, %431, %237
%881 = load i32, i32* %7
ret i32 %881
}

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