int tri_tri_intersect_with_isectline(double V0[3], double V1[3], double V2[3],
                                     double U0[3], double U1[3], double U2[3],
                                     int *coplanar, double isectpt1[3],
                                     double isectpt2[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 isectpointA1[3], isectpointA2[3];
  double isectpointB1[3], isectpointB2[3];
  double du0du1, du0du2, dv0dv1, dv0dv2;
  short index;
  double vp0, vp1, vp2;
  double up0, up1, up2;
  double b, c, max;
  double tmp, diff[3];
  int smallest1, smallest2;
  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) < 0.005)
    du0 = 0.0;
  if (fabs(du1) < 0.005)
    du1 = 0.0;
  if (fabs(du2) < 0.005)
    du2 = 0.0;
  du0du1 = du0 * du1;
  du0du2 = du0 * du2;
  if (du0du1 > 0.0 && du0du2 > 0.0)
    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) < 0.005)
    dv0 = 0.0;
  if (fabs(dv1) < 0.005)
    dv1 = 0.0;
  if (fabs(dv2) < 0.005)
    dv2 = 0.0;
  dv0dv1 = dv0 * dv1;
  dv0dv2 = dv0 * dv2;
  if (dv0dv1 > 0.0 && dv0dv2 > 0.0)
    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];
  *coplanar = compute_intervals_isectline(
      V0, V1, V2, vp0, vp1, vp2, dv0, dv1, dv2, dv0dv1, dv0dv2, &isect1[0],
      &isect1[1], isectpointA1, isectpointA2);
  if (*coplanar)
    return coplanar_tri_tri(N1, V0, V1, V2, U0, U1, U2);
  compute_intervals_isectline(U0, U1, U2, up0, up1, up2, du0, du1, du2, du0du1,
                              du0du2, &isect2[0], &isect2[1], isectpointB1,
                              isectpointB2);
  if (isect1[0] > isect1[1]) {
    float c;
    c = isect1[0];
    isect1[0] = isect1[1];
    isect1[1] = c;
    smallest1 = 1;
  } else
    smallest1 = 0;
  ;
  if (isect2[0] > isect2[1]) {
    float c;
    c = isect2[0];
    isect2[0] = isect2[1];
    isect2[1] = c;
    smallest2 = 1;
  } else
    smallest2 = 0;
  ;
  if (isect1[1] < isect2[0] || isect2[1] < isect1[0])
    return 0;
  if (isect2[0] < isect1[0]) {
    if (smallest1 == 0) {
      isectpt1[0] = isectpointA1[0];
      isectpt1[1] = isectpointA1[1];
      isectpt1[2] = isectpointA1[2];
      ;
    } else {
      isectpt1[0] = isectpointA2[0];
      isectpt1[1] = isectpointA2[1];
      isectpt1[2] = isectpointA2[2];
      ;
    }
    if (isect2[1] < isect1[1]) {
      if (smallest2 == 0) {
        isectpt2[0] = isectpointB2[0];
        isectpt2[1] = isectpointB2[1];
        isectpt2[2] = isectpointB2[2];
        ;
      } else {
        isectpt2[0] = isectpointB1[0];
        isectpt2[1] = isectpointB1[1];
        isectpt2[2] = isectpointB1[2];
        ;
      }
    } else {
      if (smallest1 == 0) {
        isectpt2[0] = isectpointA2[0];
        isectpt2[1] = isectpointA2[1];
        isectpt2[2] = isectpointA2[2];
        ;
      } else {
        isectpt2[0] = isectpointA1[0];
        isectpt2[1] = isectpointA1[1];
        isectpt2[2] = isectpointA1[2];
        ;
      }
    }
  } else {
    if (smallest2 == 0) {
      isectpt1[0] = isectpointB1[0];
      isectpt1[1] = isectpointB1[1];
      isectpt1[2] = isectpointB1[2];
      ;
    } else {
      isectpt1[0] = isectpointB2[0];
      isectpt1[1] = isectpointB2[1];
      isectpt1[2] = isectpointB2[2];
      ;
    }
    if (isect2[1] > isect1[1]) {
      if (smallest1 == 0) {
        isectpt2[0] = isectpointA2[0];
        isectpt2[1] = isectpointA2[1];
        isectpt2[2] = isectpointA2[2];
        ;
      } else {
        isectpt2[0] = isectpointA1[0];
        isectpt2[1] = isectpointA1[1];
        isectpt2[2] = isectpointA1[2];
        ;
      }
    } else {
      if (smallest2 == 0) {
        isectpt2[0] = isectpointB2[0];
        isectpt2[1] = isectpointB2[1];
        isectpt2[2] = isectpointB2[2];
        ;
      } else {
        isectpt2[0] = isectpointB1[0];
        isectpt2[1] = isectpointB1[1];
        isectpt2[2] = isectpointB1[2];
        ;
      }
    }
  }
  return 1;
}


x86 assembly (clang, -O0):
<tri_tri_intersect_with_isectline>:
push   %rbp
mov    %rsp,%rbp
sub    $0x260,%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    -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),%xmm1
ff
movaps 0xc33(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  0xc17(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    13fe <tri_tri_intersect_with_isectline+0x2de>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0xd0(%rbp),%xmm1
ff
movaps 0xc03(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  0xbe7(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    142e <tri_tri_intersect_with_isectline+0x30e>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xd8(%rbp),%xmm1
ff
movaps 0xbd3(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  0xbb7(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    145e <tri_tri_intersect_with_isectline+0x33e>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
mulsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0x1b8(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
mulsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0x1c0(%rbp)
ff
movsd  -0x1b8(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    14c4 <tri_tri_intersect_with_isectline+0x3a4>
movsd  -0x1c0(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    14c4 <tri_tri_intersect_with_isectline+0x3a4>
movl   $0x0,-0x4(%rbp)
jmp    1fdb <tri_tri_intersect_with_isectline+0xebb>
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
ff
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),%xmm1
ff
movaps 0x8af(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  0x893(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1782 <tri_tri_intersect_with_isectline+0x662>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0xe8(%rbp),%xmm1
ff
movaps 0x87f(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  0x863(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    17b2 <tri_tri_intersect_with_isectline+0x692>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0xf0(%rbp),%xmm1
ff
movaps 0x84f(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  0x833(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    17e2 <tri_tri_intersect_with_isectline+0x6c2>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0xe0(%rbp),%xmm0
ff
mulsd  -0xe8(%rbp),%xmm0
ff
movsd  %xmm0,-0x1c8(%rbp)
ff
movsd  -0xe0(%rbp),%xmm0
ff
mulsd  -0xf0(%rbp),%xmm0
ff
movsd  %xmm0,-0x1d0(%rbp)
ff
movsd  -0x1c8(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1848 <tri_tri_intersect_with_isectline+0x728>
movsd  -0x1d0(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1848 <tri_tri_intersect_with_isectline+0x728>
movl   $0x0,-0x4(%rbp)
jmp    1fdb <tri_tri_intersect_with_isectline+0xebb>
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
movaps 0x6ea(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x220(%rbp)
ff
movw   $0x0,-0x1d2(%rbp)
movsd  -0x108(%rbp),%xmm0
ff
movaps 0x6c6(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x210(%rbp)
ff
movsd  -0x100(%rbp),%xmm0
ff
movaps 0x6ab(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x218(%rbp)
ff
movsd  -0x210(%rbp),%xmm0
ff
ucomisd -0x220(%rbp),%xmm0
ff
jbe    19a0 <tri_tri_intersect_with_isectline+0x880>
movsd  -0x210(%rbp),%xmm0
ff
movsd  %xmm0,-0x220(%rbp)
ff
movw   $0x1,-0x1d2(%rbp)
movsd  -0x218(%rbp),%xmm0
ff
ucomisd -0x220(%rbp),%xmm0
ff
jbe    19cf <tri_tri_intersect_with_isectline+0x8af>
movsd  -0x218(%rbp),%xmm0
ff
movsd  %xmm0,-0x220(%rbp)
ff
movw   $0x2,-0x1d2(%rbp)
mov    -0x10(%rbp),%rax
movswq -0x1d2(%rbp),%rcx
ff
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x1e0(%rbp)
ff
mov    -0x18(%rbp),%rax
movswq -0x1d2(%rbp),%rcx
ff
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x1e8(%rbp)
mov    -0x20(%rbp),%rax
movswq -0x1d2(%rbp),%rcx
ff
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x1f0(%rbp)
ff
mov    -0x28(%rbp),%rax
movswq -0x1d2(%rbp),%rcx
ff
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x1f8(%rbp)
ff
mov    -0x30(%rbp),%rax
movswq -0x1d2(%rbp),%rcx
ff
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x200(%rbp)
ff
mov    -0x38(%rbp),%rax
movswq -0x1d2(%rbp),%rcx
ff
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x208(%rbp)
ff
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    -0x20(%rbp),%rdx
movsd  -0x1e0(%rbp),%xmm0
ff
movsd  -0x1e8(%rbp),%xmm1
ff
movsd  -0x1f0(%rbp),%xmm2
ff
movsd  -0xe0(%rbp),%xmm3
ff
movsd  -0xe8(%rbp),%xmm4
ff
movsd  -0xf0(%rbp),%xmm5
ff
movsd  -0x1c8(%rbp),%xmm6
ff
movsd  -0x1d0(%rbp),%xmm7
ff
lea    -0x120(%rbp),%rcx
lea    -0x120(%rbp),%r8
add    $0x8,%r8
lea    -0x150(%rbp),%r9
lea    -0x170(%rbp),%rax
mov    %rax,(%rsp)
mov    $0x8,%al
call   1040 <compute_intervals_isectline@plt>
mov    %eax,%ecx
mov    0x10(%rbp),%rax
mov    %ecx,(%rax)
mov    0x10(%rbp),%rax
cmpl   $0x0,(%rax)
je     1b23 <tri_tri_intersect_with_isectline+0xa03>
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)
mov    $0x0,%al
call   1030 <coplanar_tri_tri@plt>
mov    %eax,-0x4(%rbp)
jmp    1fdb <tri_tri_intersect_with_isectline+0xebb>
mov    -0x28(%rbp),%rdi
mov    -0x30(%rbp),%rsi
mov    -0x38(%rbp),%rdx
movsd  -0x1f8(%rbp),%xmm0
ff
movsd  -0x200(%rbp),%xmm1
ff
movsd  -0x208(%rbp),%xmm2
ff
movsd  -0xc8(%rbp),%xmm3
ff
movsd  -0xd0(%rbp),%xmm4
ff
movsd  -0xd8(%rbp),%xmm5
ff
movsd  -0x1b8(%rbp),%xmm6
ff
movsd  -0x1c0(%rbp),%xmm7
ff
lea    -0x130(%rbp),%rcx
lea    -0x130(%rbp),%r8
add    $0x8,%r8
lea    -0x190(%rbp),%r9
lea    -0x1b0(%rbp),%rax
mov    %rax,(%rsp)
mov    $0x8,%al
call   1040 <compute_intervals_isectline@plt>
movsd  -0x120(%rbp),%xmm0
ff
ucomisd -0x118(%rbp),%xmm0
ff
jbe    1bf7 <tri_tri_intersect_with_isectline+0xad7>
movsd  -0x120(%rbp),%xmm0
ff
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x24c(%rbp)
ff
movsd  -0x118(%rbp),%xmm0
ff
movsd  %xmm0,-0x120(%rbp)
ff
movss  -0x24c(%rbp),%xmm0
ff
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
movl   $0x1,-0x244(%rbp)
jmp    1c01 <tri_tri_intersect_with_isectline+0xae1>
movl   $0x0,-0x244(%rbp)
movsd  -0x130(%rbp),%xmm0
ff
ucomisd -0x128(%rbp),%xmm0
ff
jbe    1c5e <tri_tri_intersect_with_isectline+0xb3e>
movsd  -0x130(%rbp),%xmm0
ff
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x250(%rbp)
ff
movsd  -0x128(%rbp),%xmm0
ff
movsd  %xmm0,-0x130(%rbp)
ff
movss  -0x250(%rbp),%xmm0
ff
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
movl   $0x1,-0x248(%rbp)
jmp    1c68 <tri_tri_intersect_with_isectline+0xb48>
movl   $0x0,-0x248(%rbp)
movsd  -0x118(%rbp),%xmm1
ff
movsd  -0x130(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
ja     1c9c <tri_tri_intersect_with_isectline+0xb7c>
movsd  -0x128(%rbp),%xmm1
ff
movsd  -0x120(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jbe    1ca8 <tri_tri_intersect_with_isectline+0xb88>
movl   $0x0,-0x4(%rbp)
jmp    1fdb <tri_tri_intersect_with_isectline+0xebb>
movsd  -0x130(%rbp),%xmm1
ff
movsd  -0x120(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jbe    1e4d <tri_tri_intersect_with_isectline+0xd2d>
cmpl   $0x0,-0x244(%rbp)
jne    1d06 <tri_tri_intersect_with_isectline+0xbe6>
movsd  -0x150(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x148(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x140(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x10(%rax)
jmp    1d38 <tri_tri_intersect_with_isectline+0xc18>
movsd  -0x170(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x168(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x160(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x128(%rbp),%xmm1
ff
movsd  -0x118(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jbe    1dcd <tri_tri_intersect_with_isectline+0xcad>
cmpl   $0x0,-0x248(%rbp)
jne    1d96 <tri_tri_intersect_with_isectline+0xc76>
movsd  -0x1b0(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x1a8(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x1a0(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,0x10(%rax)
jmp    1dc8 <tri_tri_intersect_with_isectline+0xca8>
movsd  -0x190(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x188(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x180(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,0x10(%rax)
jmp    1e48 <tri_tri_intersect_with_isectline+0xd28>
cmpl   $0x0,-0x244(%rbp)
jne    1e11 <tri_tri_intersect_with_isectline+0xcf1>
movsd  -0x170(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x168(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x160(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,0x10(%rax)
jmp    1e43 <tri_tri_intersect_with_isectline+0xd23>
movsd  -0x150(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x148(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x140(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,0x10(%rax)
jmp    1e48 <tri_tri_intersect_with_isectline+0xd28>
jmp    1fd4 <tri_tri_intersect_with_isectline+0xeb4>
cmpl   $0x0,-0x248(%rbp)
jne    1e91 <tri_tri_intersect_with_isectline+0xd71>
movsd  -0x190(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x188(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x180(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x10(%rax)
jmp    1ec3 <tri_tri_intersect_with_isectline+0xda3>
movsd  -0x1b0(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x1a8(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x1a0(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x128(%rbp),%xmm0
ff
ucomisd -0x118(%rbp),%xmm0
ff
jbe    1f54 <tri_tri_intersect_with_isectline+0xe34>
cmpl   $0x0,-0x244(%rbp)
jne    1f1d <tri_tri_intersect_with_isectline+0xdfd>
movsd  -0x170(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x168(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x160(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,0x10(%rax)
jmp    1f4f <tri_tri_intersect_with_isectline+0xe2f>
movsd  -0x150(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x148(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x140(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,0x10(%rax)
jmp    1fcf <tri_tri_intersect_with_isectline+0xeaf>
cmpl   $0x0,-0x248(%rbp)
jne    1f98 <tri_tri_intersect_with_isectline+0xe78>
movsd  -0x1b0(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x1a8(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x1a0(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,0x10(%rax)
jmp    1fca <tri_tri_intersect_with_isectline+0xeaa>
movsd  -0x190(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x188(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x180(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,0x10(%rax)
jmp    1fcf <tri_tri_intersect_with_isectline+0xeaf>
jmp    1fd4 <tri_tri_intersect_with_isectline+0xeb4>
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x260,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<tri_tri_intersect_with_isectline>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x178,%rsp
mov    %r9,%r12
mov    %r8,%r14
mov    %rcx,%r15
mov    %rdx,%r13
mov    %rsi,%rbx
mov    %rdi,%rbp
movsd  0x8(%rsi),%xmm9
movupd (%rdi),%xmm4
movapd %xmm4,%xmm1
unpckhpd %xmm4,%xmm1
movapd %xmm9,0x150(%rsp)
subsd  %xmm1,%xmm9
movsd  0x10(%rsi),%xmm15
movsd  0x10(%rdi),%xmm13
movsd  (%rsi),%xmm2
movapd %xmm2,0x140(%rsp)
unpcklpd %xmm15,%xmm2
movapd %xmm4,%xmm1
unpcklpd %xmm13,%xmm1
subpd  %xmm1,%xmm2
movapd %xmm2,%xmm3
shufpd $0x1,%xmm2,%xmm3
movupd (%rdx),%xmm11
movapd %xmm11,0xb0(%rsp)
subpd  %xmm4,%xmm11
movsd  0x10(%rdx),%xmm5
movapd %xmm5,0xc0(%rsp)
subsd  %xmm13,%xmm5
movapd %xmm2,%xmm7
unpckhpd %xmm2,%xmm7
movapd %xmm11,%xmm1
unpckhpd %xmm11,%xmm1
mulsd  %xmm7,%xmm1
unpcklpd %xmm9,%xmm2
mulsd  %xmm5,%xmm9
subsd  %xmm1,%xmm9
movsd  %xmm9,0x160(%rsp)
unpcklpd %xmm11,%xmm5
mulpd  %xmm2,%xmm5
mulpd  %xmm3,%xmm11
subpd  %xmm5,%xmm11
movupd %xmm11,0x168(%rsp)
movupd (%rcx),%xmm14
movupd (%r8),%xmm8
movapd %xmm4,%xmm1
movsd  %xmm11,%xmm1
movapd %xmm8,%xmm2
shufpd $0x1,%xmm11,%xmm2
mulpd  %xmm1,%xmm2
movapd %xmm9,%xmm1
unpcklpd %xmm9,%xmm1
movapd %xmm8,%xmm3
unpcklpd %xmm4,%xmm3
mulpd  %xmm1,%xmm3
addpd  %xmm2,%xmm3
movsd  0x10(%r8),%xmm7
movapd %xmm11,%xmm0
unpckhpd %xmm11,%xmm0
movapd %xmm7,0xd0(%rsp)
unpcklpd %xmm13,%xmm7
mulpd  %xmm0,%xmm7
addpd  %xmm3,%xmm7
movapd %xmm11,%xmm3
unpcklpd %xmm11,%xmm3
movupd 0x8(%r9),%xmm2
movapd %xmm14,%xmm6
shufpd $0x1,%xmm2,%xmm6
mulpd  %xmm3,%xmm6
movsd  (%r9),%xmm3
movapd %xmm14,%xmm12
unpcklpd %xmm3,%xmm12
mulpd  %xmm1,%xmm12
addpd  %xmm6,%xmm12
movsd  0x10(%rcx),%xmm10
movapd %xmm2,%xmm1
movsd  %xmm10,%xmm1
movapd %xmm0,0x130(%rsp)
mulpd  %xmm0,%xmm1
addpd  %xmm12,%xmm1
movapd %xmm7,%xmm6
unpckhpd %xmm7,%xmm6
subsd  %xmm6,%xmm7
subpd  %xmm6,%xmm1
movapd 0xd22(%rip),%xmm0
movapd %xmm7,%xmm6
andpd  %xmm0,%xmm6
cmpltsd 0xd31(%rip),%xmm6
andnpd %xmm7,%xmm6
movapd %xmm1,%xmm7
andpd  %xmm0,%xmm7
cmpnltpd 0xd0c(%rip),%xmm7
andpd  %xmm1,%xmm7
movapd %xmm7,%xmm1
mulsd  %xmm6,%xmm1
pshufd $0xee,%xmm7,%xmm5
movapd %xmm7,%xmm0
mulsd  %xmm5,%xmm0
xor    %eax,%eax
xorpd  %xmm12,%xmm12
ucomisd %xmm12,%xmm1
jbe    1336 <tri_tri_intersect_with_isectline+0x216>
ucomisd %xmm12,%xmm0
ja     17a6 <tri_tri_intersect_with_isectline+0x686>
movaps %xmm5,0xe0(%rsp)
movapd %xmm0,0xf0(%rsp)
movapd %xmm1,0x100(%rsp)
movaps %xmm7,0x110(%rsp)
movapd %xmm6,0x120(%rsp)
movapd %xmm14,%xmm1
unpckhpd %xmm14,%xmm1
subpd  %xmm14,%xmm8
movapd 0xd0(%rsp),%xmm0
subsd  %xmm10,%xmm0
subsd  %xmm14,%xmm3
unpcklpd %xmm10,%xmm1
subpd  %xmm1,%xmm2
movapd %xmm2,%xmm1
unpckhpd %xmm2,%xmm1
mulsd  %xmm8,%xmm1
movapd %xmm8,%xmm6
shufpd $0x1,%xmm0,%xmm6
mulsd  %xmm3,%xmm0
subsd  %xmm1,%xmm0
unpcklpd %xmm2,%xmm3
mulpd  %xmm6,%xmm3
mulpd  %xmm8,%xmm2
subpd  %xmm3,%xmm2
movapd 0x150(%rsp),%xmm3
shufpd $0x2,%xmm14,%xmm3
movapd %xmm0,%xmm1
unpcklpd %xmm0,%xmm1
mulpd  %xmm1,%xmm3
movapd 0x140(%rsp),%xmm5
unpcklpd %xmm14,%xmm5
xorpd  %xmm7,%xmm7
movapd %xmm2,%xmm12
unpckhpd %xmm2,%xmm12
mulpd  %xmm12,%xmm5
addpd  %xmm3,%xmm5
unpcklpd %xmm10,%xmm15
movapd %xmm2,%xmm3
unpcklpd %xmm2,%xmm3
mulpd  %xmm3,%xmm15
addpd  %xmm5,%xmm15
movapd %xmm4,%xmm5
movapd 0xb0(%rsp),%xmm6
unpckhpd %xmm6,%xmm5
mulpd  %xmm1,%xmm5
unpcklpd %xmm6,%xmm4
mulpd  %xmm12,%xmm4
addpd  %xmm5,%xmm4
unpcklpd 0xc0(%rsp),%xmm13
mulpd  %xmm3,%xmm13
movapd %xmm15,%xmm1
unpckhpd %xmm15,%xmm1
subsd  %xmm1,%xmm15
addpd  %xmm4,%xmm13
subpd  %xmm1,%xmm13
movapd %xmm15,%xmm4
movapd 0xb95(%rip),%xmm10
andpd  %xmm10,%xmm4
cmpltsd 0xba7(%rip),%xmm4
andnpd %xmm15,%xmm4
movapd %xmm13,%xmm3
andpd  %xmm10,%xmm3
cmpnltpd 0xb7f(%rip),%xmm3
andpd  %xmm13,%xmm3
movapd %xmm3,%xmm6
mulsd  %xmm4,%xmm6
pshufd $0xee,%xmm3,%xmm5
ucomisd %xmm7,%xmm6
movapd %xmm3,%xmm7
mulsd  %xmm5,%xmm7
jbe    14bf <tri_tri_intersect_with_isectline+0x39f>
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm7
ja     17a6 <tri_tri_intersect_with_isectline+0x686>
movapd 0x130(%rsp),%xmm8
unpcklpd %xmm9,%xmm8
movapd %xmm0,%xmm1
unpcklpd %xmm2,%xmm1
mulpd  %xmm8,%xmm1
movapd %xmm0,%xmm8
movapd %xmm11,%xmm0
mulpd  %xmm2,%xmm0
subpd  %xmm1,%xmm0
mulsd  %xmm11,%xmm12
mulsd  %xmm8,%xmm9
subsd  %xmm12,%xmm9
andpd  %xmm10,%xmm0
pshufd $0xee,%xmm0,%xmm1
xor    %eax,%eax
ucomisd %xmm0,%xmm1
seta   %al
andpd  %xmm10,%xmm9
maxsd  %xmm0,%xmm1
ucomisd %xmm1,%xmm9
mov    $0x2,%ecx
cmovbe %rax,%rcx
movsd  0x0(%rbp,%rcx,8),%xmm0
movsd  (%rbx,%rcx,8),%xmm1
movsd  0x0(%r13,%rcx,8),%xmm2
movsd  (%r15,%rcx,8),%xmm8
movsd  %xmm8,0xd0(%rsp)
movsd  (%r14,%rcx,8),%xmm8
movsd  %xmm8,0xc0(%rsp)
movsd  (%r12,%rcx,8),%xmm8
movsd  %xmm8,0xb0(%rsp)
lea    0x28(%rsp),%r8
lea    0x70(%rsp),%rax
mov    %rax,(%rsp)
lea    0x20(%rsp),%rcx
lea    0x90(%rsp),%r9
mov    %rbp,%rdi
mov    %rbx,%rsi
mov    %r13,%rdx
mov    $0x8,%al
call   1040 <compute_intervals_isectline@plt>
mov    0x1b0(%rsp),%rcx
mov    %eax,(%rcx)
test   %eax,%eax
je     15c8 <tri_tri_intersect_with_isectline+0x4a8>
mov    %r12,(%rsp)
lea    0x160(%rsp),%rdi
mov    %rbp,%rsi
mov    %rbx,%rdx
mov    %r13,%rcx
mov    %r15,%r8
mov    %r14,%r9
xor    %eax,%eax
call   1030 <coplanar_tri_tri@plt>
jmp    17a6 <tri_tri_intersect_with_isectline+0x686>
lea    0x18(%rsp),%r8
lea    0x30(%rsp),%rax
mov    %rax,(%rsp)
lea    0x10(%rsp),%rcx
lea    0x50(%rsp),%r9
mov    %r15,%rdi
mov    %r14,%rsi
mov    %r12,%rdx
movsd  0xd0(%rsp),%xmm0
movsd  0xc0(%rsp),%xmm1
movsd  0xb0(%rsp),%xmm2
movaps 0x110(%rsp),%xmm3
movaps 0x120(%rsp),%xmm4
movaps 0xe0(%rsp),%xmm5
movaps 0x100(%rsp),%xmm6
movaps 0xf0(%rsp),%xmm7
mov    $0x8,%al
call   1040 <compute_intervals_isectline@plt>
movsd  0x20(%rsp),%xmm0
movsd  0x28(%rsp),%xmm2
ucomisd %xmm2,%xmm0
movapd %xmm0,%xmm6
movapd %xmm2,%xmm1
jbe    1668 <tri_tri_intersect_with_isectline+0x548>
xorps  %xmm1,%xmm1
cvtsd2ss %xmm0,%xmm1
movsd  %xmm2,0x20(%rsp)
cvtss2sd %xmm1,%xmm1
movsd  %xmm1,0x28(%rsp)
movapd %xmm2,%xmm6
movsd  0x10(%rsp),%xmm4
movsd  0x18(%rsp),%xmm5
ucomisd %xmm5,%xmm4
movapd %xmm5,%xmm3
movapd %xmm4,%xmm7
mov    $0x0,%eax
jbe    16a2 <tri_tri_intersect_with_isectline+0x582>
xorps  %xmm3,%xmm3
cvtsd2ss %xmm4,%xmm3
movsd  %xmm5,0x10(%rsp)
cvtss2sd %xmm3,%xmm3
movsd  %xmm3,0x18(%rsp)
movapd %xmm5,%xmm7
ucomisd %xmm1,%xmm7
ja     17a6 <tri_tri_intersect_with_isectline+0x686>
ucomisd %xmm3,%xmm6
ja     17a6 <tri_tri_intersect_with_isectline+0x686>
mov    0x1c0(%rsp),%rax
mov    0x1b8(%rsp),%rcx
ucomisd %xmm7,%xmm6
jbe    16f0 <tri_tri_intersect_with_isectline+0x5d0>
ucomisd %xmm2,%xmm0
jbe    1711 <tri_tri_intersect_with_isectline+0x5f1>
movaps 0x70(%rsp),%xmm0
movups %xmm0,(%rcx)
movsd  0x80(%rsp),%xmm0
movsd  %xmm0,0x10(%rcx)
ucomisd %xmm3,%xmm1
ja     1730 <tri_tri_intersect_with_isectline+0x610>
jmp    1765 <tri_tri_intersect_with_isectline+0x645>
ucomisd %xmm5,%xmm4
jbe    1746 <tri_tri_intersect_with_isectline+0x626>
movaps 0x30(%rsp),%xmm4
movups %xmm4,(%rcx)
movsd  0x40(%rsp),%xmm4
movsd  %xmm4,0x10(%rcx)
ucomisd %xmm1,%xmm3
jbe    1736 <tri_tri_intersect_with_isectline+0x616>
jmp    175f <tri_tri_intersect_with_isectline+0x63f>
movaps 0x90(%rsp),%xmm0
movups %xmm0,(%rcx)
movsd  0xa0(%rsp),%xmm0
movsd  %xmm0,0x10(%rcx)
ucomisd %xmm3,%xmm1
jbe    178b <tri_tri_intersect_with_isectline+0x66b>
ucomisd %xmm5,%xmm4
jbe    177b <tri_tri_intersect_with_isectline+0x65b>
movaps 0x50(%rsp),%xmm0
movups %xmm0,(%rax)
movsd  0x60(%rsp),%xmm0
jmp    179c <tri_tri_intersect_with_isectline+0x67c>
movaps 0x50(%rsp),%xmm4
movups %xmm4,(%rcx)
movsd  0x60(%rsp),%xmm4
movsd  %xmm4,0x10(%rcx)
ucomisd %xmm1,%xmm3
jbe    177b <tri_tri_intersect_with_isectline+0x65b>
ucomisd %xmm2,%xmm0
jbe    178b <tri_tri_intersect_with_isectline+0x66b>
movaps 0x90(%rsp),%xmm0
movups %xmm0,(%rax)
movsd  0xa0(%rsp),%xmm0
jmp    179c <tri_tri_intersect_with_isectline+0x67c>
movaps 0x30(%rsp),%xmm0
movups %xmm0,(%rax)
movsd  0x40(%rsp),%xmm0
jmp    179c <tri_tri_intersect_with_isectline+0x67c>
movaps 0x70(%rsp),%xmm0
movups %xmm0,(%rax)
movsd  0x80(%rsp),%xmm0
movsd  %xmm0,0x10(%rax)
mov    $0x1,%eax
add    $0x178,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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