int intersect_triangle1(double orig[3], double dir[3], double vert0[3],
                        double vert1[3], double vert2[3], double *t, double *u,
                        double *v) {
  double edge1[3], edge2[3], tvec[3], pvec[3], qvec[3];
  double det, inv_det;
  edge1[0] = vert1[0] - vert0[0];
  edge1[1] = vert1[1] - vert0[1];
  edge1[2] = vert1[2] - vert0[2];
  ;
  edge2[0] = vert2[0] - vert0[0];
  edge2[1] = vert2[1] - vert0[1];
  edge2[2] = vert2[2] - vert0[2];
  ;
  pvec[0] = dir[1] * edge2[2] - dir[2] * edge2[1];
  pvec[1] = dir[2] * edge2[0] - dir[0] * edge2[2];
  pvec[2] = dir[0] * edge2[1] - dir[1] * edge2[0];
  ;
  det = (edge1[0] * pvec[0] + edge1[1] * pvec[1] + edge1[2] * pvec[2]);
  if (det > 0.000001) {
    tvec[0] = orig[0] - vert0[0];
    tvec[1] = orig[1] - vert0[1];
    tvec[2] = orig[2] - vert0[2];
    ;
    *u = (tvec[0] * pvec[0] + tvec[1] * pvec[1] + tvec[2] * pvec[2]);
    if (*u < 0.0 || *u > det)
      return 0;
    qvec[0] = tvec[1] * edge1[2] - tvec[2] * edge1[1];
    qvec[1] = tvec[2] * edge1[0] - tvec[0] * edge1[2];
    qvec[2] = tvec[0] * edge1[1] - tvec[1] * edge1[0];
    ;
    *v = (dir[0] * qvec[0] + dir[1] * qvec[1] + dir[2] * qvec[2]);
    if (*v < 0.0 || *u + *v > det)
      return 0;
  } else if (det < -0.000001) {
    tvec[0] = orig[0] - vert0[0];
    tvec[1] = orig[1] - vert0[1];
    tvec[2] = orig[2] - vert0[2];
    ;
    *u = (tvec[0] * pvec[0] + tvec[1] * pvec[1] + tvec[2] * pvec[2]);
    if (*u > 0.0 || *u < det)
      return 0;
    qvec[0] = tvec[1] * edge1[2] - tvec[2] * edge1[1];
    qvec[1] = tvec[2] * edge1[0] - tvec[0] * edge1[2];
    qvec[2] = tvec[0] * edge1[1] - tvec[1] * edge1[0];
    ;
    *v = (dir[0] * qvec[0] + dir[1] * qvec[1] + dir[2] * qvec[2]);
    if (*v > 0.0 || *u + *v < det)
      return 0;
  } else
    return 0;
  inv_det = 1.0 / det;
  *t = (edge2[0] * qvec[0] + edge2[1] * qvec[1] + edge2[2] * qvec[2]) * inv_det;
  (*u) *= inv_det;
  (*v) *= inv_det;
  return 1;
}


x86 assembly (clang, -O0):
<intersect_triangle1>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
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    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x20(%rbp),%rax
subsd  (%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x20(%rbp),%rax
subsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x20(%rbp),%rax
subsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x20(%rbp),%rax
subsd  (%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x30(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x20(%rbp),%rax
subsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x30(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x20(%rbp),%rax
subsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%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
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  -0x70(%rbp),%xmm2
mov    -0x18(%rbp),%rax
movsd  (%rax),%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
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
movsd  -0x68(%rbp),%xmm2
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%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  -0x50(%rbp),%xmm1
movsd  -0xb0(%rbp),%xmm2
ff
movsd  -0x48(%rbp),%xmm0
mulsd  -0xa8(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x40(%rbp),%xmm0
movsd  -0xa0(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xd8(%rbp),%xmm0
ff
movsd  0xd3c(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    14d6 <intersect_triangle1+0x3d6>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x20(%rbp),%rax
subsd  (%rax),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x20(%rbp),%rax
subsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x20(%rbp),%rax
subsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x90(%rbp),%xmm1
ff
movsd  -0xb0(%rbp),%xmm2
ff
movsd  -0x88(%rbp),%xmm0
ff
mulsd  -0xa8(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x80(%rbp),%xmm0
movsd  -0xa0(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,(%rax)
mov    0x10(%rbp),%rax
xorps  %xmm0,%xmm0
ucomisd (%rax),%xmm0
ja     1383 <intersect_triangle1+0x283>
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm0
ucomisd -0xd8(%rbp),%xmm0
ff
jbe    138f <intersect_triangle1+0x28f>
movl   $0x0,-0x4(%rbp)
jmp    17a3 <intersect_triangle1+0x6a3>
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0x40(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  -0x48(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  -0x40(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
movsd  -0x48(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  -0x50(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm1
movsd  -0xd0(%rbp),%xmm2
ff
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
mulsd  -0xc8(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  -0xc0(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x18(%rbp),%rax
movsd  %xmm0,(%rax)
mov    0x18(%rbp),%rax
xorps  %xmm0,%xmm0
ucomisd (%rax),%xmm0
ja     14c5 <intersect_triangle1+0x3c5>
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    0x18(%rbp),%rax
addsd  (%rax),%xmm0
ucomisd -0xd8(%rbp),%xmm0
ff
jbe    14d1 <intersect_triangle1+0x3d1>
movl   $0x0,-0x4(%rbp)
jmp    17a3 <intersect_triangle1+0x6a3>
jmp    1715 <intersect_triangle1+0x615>
movsd  0xb2a(%rip),%xmm0
ucomisd -0xd8(%rbp),%xmm0
ff
jbe    1704 <intersect_triangle1+0x604>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x20(%rbp),%rax
subsd  (%rax),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x20(%rbp),%rax
subsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x20(%rbp),%rax
subsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x90(%rbp),%xmm1
ff
movsd  -0xb0(%rbp),%xmm2
ff
movsd  -0x88(%rbp),%xmm0
ff
mulsd  -0xa8(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x80(%rbp),%xmm0
movsd  -0xa0(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,(%rax)
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
ja     15a9 <intersect_triangle1+0x4a9>
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm1
movsd  -0xd8(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jbe    15b5 <intersect_triangle1+0x4b5>
movl   $0x0,-0x4(%rbp)
jmp    17a3 <intersect_triangle1+0x6a3>
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0x40(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  -0x48(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  -0x40(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
movsd  -0x48(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  -0x50(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm1
movsd  -0xd0(%rbp),%xmm2
ff
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
mulsd  -0xc8(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  -0xc0(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x18(%rbp),%rax
movsd  %xmm0,(%rax)
mov    0x18(%rbp),%rax
movsd  (%rax),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
ja     16f3 <intersect_triangle1+0x5f3>
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm1
mov    0x18(%rbp),%rax
addsd  (%rax),%xmm1
movsd  -0xd8(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jbe    16ff <intersect_triangle1+0x5ff>
movl   $0x0,-0x4(%rbp)
jmp    17a3 <intersect_triangle1+0x6a3>
jmp    1710 <intersect_triangle1+0x610>
movl   $0x0,-0x4(%rbp)
jmp    17a3 <intersect_triangle1+0x6a3>
jmp    1715 <intersect_triangle1+0x615>
movsd  0x8f3(%rip),%xmm0
divsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x70(%rbp),%xmm1
movsd  -0xd0(%rbp),%xmm2
ff
movsd  -0x68(%rbp),%xmm0
mulsd  -0xc8(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x60(%rbp),%xmm0
movsd  -0xc0(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mulsd  -0xe0(%rbp),%xmm0
ff
mov    -0x38(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xe0(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
mulsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
movsd  -0xe0(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
mulsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<intersect_triangle1>:
mov    0x10(%rsp),%r10
mov    0x8(%rsp),%r11
movupd (%rcx),%xmm15
movupd (%rdx),%xmm4
subpd  %xmm4,%xmm15
movapd %xmm15,%xmm10
shufpd $0x1,%xmm15,%xmm10
movsd  0x10(%rcx),%xmm12
movsd  0x10(%rdx),%xmm14
subsd  %xmm14,%xmm12
movsd  (%r8),%xmm11
movsd  0x8(%r8),%xmm8
subsd  %xmm4,%xmm11
movapd %xmm4,%xmm1
unpckhpd %xmm4,%xmm1
subsd  %xmm1,%xmm8
movsd  0x10(%r8),%xmm9
subsd  %xmm14,%xmm9
movsd  (%rsi),%xmm7
movsd  0x8(%rsi),%xmm3
movsd  0x10(%rsi),%xmm6
movapd %xmm8,%xmm0
mulsd  %xmm6,%xmm0
movapd %xmm11,%xmm2
mulsd  %xmm3,%xmm2
mulsd  %xmm9,%xmm3
subsd  %xmm0,%xmm3
movapd %xmm9,%xmm0
mulsd  %xmm7,%xmm0
mulsd  %xmm11,%xmm6
subsd  %xmm0,%xmm6
mulsd  %xmm8,%xmm7
subsd  %xmm2,%xmm7
movapd %xmm15,%xmm2
unpckhpd %xmm15,%xmm2
movapd %xmm2,%xmm0
mulsd  %xmm6,%xmm0
movapd %xmm15,%xmm5
mulsd  %xmm3,%xmm5
addsd  %xmm0,%xmm5
movapd %xmm12,%xmm13
mulsd  %xmm7,%xmm13
addsd  %xmm5,%xmm13
ucomisd 0xe29(%rip),%xmm13
jbe    129e <intersect_triangle1+0x19e>
movsd  0x8(%rdi),%xmm0
subsd  %xmm1,%xmm0
movsd  (%rdi),%xmm1
movhpd 0x10(%rdi),%xmm1
unpcklpd %xmm14,%xmm4
subpd  %xmm4,%xmm1
mulsd  %xmm0,%xmm6
mulsd  %xmm1,%xmm3
addsd  %xmm6,%xmm3
movapd %xmm1,%xmm4
unpckhpd %xmm1,%xmm4
mulsd  %xmm4,%xmm7
addsd  %xmm3,%xmm7
movsd  %xmm7,(%r11)
xor    %eax,%eax
xorpd  %xmm3,%xmm3
ucomisd %xmm7,%xmm3
ja     129d <intersect_triangle1+0x19d>
ucomisd %xmm13,%xmm7
ja     129d <intersect_triangle1+0x19d>
mulsd  %xmm2,%xmm4
movapd %xmm0,%xmm7
mulsd  %xmm12,%xmm7
subsd  %xmm4,%xmm7
unpcklpd %xmm1,%xmm0
unpcklpd %xmm12,%xmm15
mulpd  %xmm0,%xmm15
mulpd  %xmm1,%xmm10
subpd  %xmm15,%xmm10
movapd %xmm10,%xmm0
unpckhpd %xmm10,%xmm0
mulsd  0x8(%rsi),%xmm0
movsd  (%rsi),%xmm1
mulsd  %xmm7,%xmm1
addsd  %xmm0,%xmm1
movsd  0x10(%rsi),%xmm0
mulsd  %xmm10,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%r10)
xorpd  %xmm1,%xmm1
ucomisd %xmm0,%xmm1
ja     129d <intersect_triangle1+0x19d>
addsd  (%r11),%xmm0
ucomisd %xmm13,%xmm0
jbe    1371 <intersect_triangle1+0x271>
ret
xor    %eax,%eax
movsd  0xd60(%rip),%xmm0
ucomisd %xmm13,%xmm0
jbe    129d <intersect_triangle1+0x19d>
movsd  0x8(%rdi),%xmm0
subsd  %xmm1,%xmm0
movsd  (%rdi),%xmm1
movhpd 0x10(%rdi),%xmm1
unpcklpd %xmm14,%xmm4
subpd  %xmm4,%xmm1
mulsd  %xmm0,%xmm6
mulsd  %xmm1,%xmm3
addsd  %xmm6,%xmm3
movapd %xmm1,%xmm4
unpckhpd %xmm1,%xmm4
mulsd  %xmm4,%xmm7
addsd  %xmm3,%xmm7
movsd  %xmm7,(%r11)
xorpd  %xmm3,%xmm3
ucomisd %xmm3,%xmm7
ja     129d <intersect_triangle1+0x19d>
ucomisd %xmm7,%xmm13
ja     129d <intersect_triangle1+0x19d>
mulsd  %xmm2,%xmm4
movapd %xmm0,%xmm7
mulsd  %xmm12,%xmm7
subsd  %xmm4,%xmm7
unpcklpd %xmm1,%xmm0
unpcklpd %xmm12,%xmm15
mulpd  %xmm0,%xmm15
mulpd  %xmm1,%xmm10
subpd  %xmm15,%xmm10
movapd %xmm10,%xmm0
unpckhpd %xmm10,%xmm0
mulsd  0x8(%rsi),%xmm0
movsd  (%rsi),%xmm1
mulsd  %xmm7,%xmm1
addsd  %xmm0,%xmm1
movsd  0x10(%rsi),%xmm0
mulsd  %xmm10,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%r10)
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
ja     129d <intersect_triangle1+0x19d>
addsd  (%r11),%xmm0
ucomisd %xmm0,%xmm13
ja     129d <intersect_triangle1+0x19d>
movsd  0xc97(%rip),%xmm0
divsd  %xmm13,%xmm0
mulsd  %xmm10,%xmm9
unpckhpd %xmm10,%xmm10
mulsd  %xmm10,%xmm8
mulsd  %xmm7,%xmm11
addsd  %xmm8,%xmm11
addsd  %xmm9,%xmm11
mulsd  %xmm0,%xmm11
movsd  %xmm11,(%r9)
movsd  (%r11),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,(%r11)
mulsd  (%r10),%xmm0
movsd  %xmm0,(%r10)
mov    $0x1,%eax
ret

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

LLVM IR (-O2):
define i32 @intersect_triangle1(double* nocapture %0, double* nocapture %1, double* nocapture %2, double* nocapture %3, double* nocapture %4, double* nocapture writeonly %5, double* nocapture %6, double* nocapture %7) {
%9 = bitcast double* %3 to <2 x double>*
%10 = load <2 x double>, <2 x double>* %9
%11 = bitcast double* %2 to <2 x double>*
%12 = load <2 x double>, <2 x double>* %11
%13 = fsub <2 x double> %10, %12
%14 = shufflevector <2 x double> %13, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%15 = getelementptr inbounds double, double* %3, i64 2
%16 = load double, double* %15
%17 = getelementptr inbounds double, double* %2, i64 2
%18 = load double, double* %17
%19 = fsub double %16, %18
%20 = load double, double* %4
%21 = extractelement <2 x double> %12, i64 0
%22 = fsub double %20, %21
%23 = getelementptr inbounds double, double* %4, i64 1
%24 = load double, double* %23
%25 = extractelement <2 x double> %12, i64 1
%26 = fsub double %24, %25
%27 = getelementptr inbounds double, double* %4, i64 2
%28 = load double, double* %27
%29 = fsub double %28, %18
%30 = getelementptr inbounds double, double* %1, i64 1
%31 = load double, double* %30
%32 = getelementptr inbounds double, double* %1, i64 2
%33 = load double, double* %32
%34 = fneg double %33
%35 = fmul double %26, %34
%36 = tail call double @llvm.fmuladd.f64(double %31, double %29, double %35)
%37 = load double, double* %1
%38 = fneg double %37
%39 = fmul double %29, %38
%40 = tail call double @llvm.fmuladd.f64(double %33, double %22, double %39)
%41 = fneg double %31
%42 = fmul double %22, %41
%43 = tail call double @llvm.fmuladd.f64(double %37, double %26, double %42)
%44 = extractelement <2 x double> %13, i64 1
%45 = fmul double %44, %40
%46 = extractelement <2 x double> %13, i64 0
%47 = tail call double @llvm.fmuladd.f64(double %46, double %36, double %45)
%48 = tail call double @llvm.fmuladd.f64(double %19, double %43, double %47)
%49 = fcmp ogt double %48, 0x3EB0C6F7A0B5ED8D
br i1 %49, label %50, label %92
50: ; preds = %8
%51 = load double, double* %0
%52 = getelementptr inbounds double, double* %0, i64 1
%53 = load double, double* %52
%54 = fsub double %53, %25
%55 = getelementptr inbounds double, double* %0, i64 2
%56 = load double, double* %55
%57 = insertelement <2 x double> poison, double %51, i64 0
%58 = insertelement <2 x double> %57, double %56, i64 1
%59 = insertelement <2 x double> %12, double %18, i64 1
%60 = fsub <2 x double> %58, %59
%61 = fmul double %40, %54
%62 = extractelement <2 x double> %60, i64 0
%63 = tail call double @llvm.fmuladd.f64(double %62, double %36, double %61)
%64 = extractelement <2 x double> %60, i64 1
%65 = tail call double @llvm.fmuladd.f64(double %64, double %43, double %63)
store double %65, double* %6
%66 = fcmp olt double %65, 0.000000e+00
%67 = fcmp ogt double %65, %48
%68 = select i1 %66, i1 true, i1 %67
br i1 %68, label %150, label %69
69: ; preds = %50
%70 = fneg double %64
%71 = fmul double %44, %70
%72 = tail call double @llvm.fmuladd.f64(double %54, double %19, double %71)
%73 = insertelement <2 x double> poison, double %54, i64 0
%74 = shufflevector <2 x double> %73, <2 x double> %60, <2 x i32> <i32 0, i32 2>
%75 = fneg <2 x double> %74
%76 = insertelement <2 x double> %13, double %19, i64 1
%77 = fmul <2 x double> %76, %75
%78 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %60, <2 x double> %14, <2 x double> %77)
%79 = load double, double* %1
%80 = load double, double* %30
%81 = extractelement <2 x double> %78, i64 1
%82 = fmul double %81, %80
%83 = tail call double @llvm.fmuladd.f64(double %79, double %72, double %82)
%84 = load double, double* %32
%85 = extractelement <2 x double> %78, i64 0
%86 = tail call double @llvm.fmuladd.f64(double %84, double %85, double %83)
store double %86, double* %7
%87 = fcmp olt double %86, 0.000000e+00
br i1 %87, label %150, label %88
88: ; preds = %69
%89 = load double, double* %6
%90 = fadd double %86, %89
%91 = fcmp ogt double %90, %48
br i1 %91, label %150, label %136
92: ; preds = %8
%93 = fcmp olt double %48, 0xBEB0C6F7A0B5ED8D
br i1 %93, label %94, label %150
94: ; preds = %92
%95 = load double, double* %0
%96 = getelementptr inbounds double, double* %0, i64 1
%97 = load double, double* %96
%98 = fsub double %97, %25
%99 = getelementptr inbounds double, double* %0, i64 2
%100 = load double, double* %99
%101 = insertelement <2 x double> poison, double %95, i64 0
%102 = insertelement <2 x double> %101, double %100, i64 1
%103 = insertelement <2 x double> %12, double %18, i64 1
%104 = fsub <2 x double> %102, %103
%105 = fmul double %40, %98
%106 = extractelement <2 x double> %104, i64 0
%107 = tail call double @llvm.fmuladd.f64(double %106, double %36, double %105)
%108 = extractelement <2 x double> %104, i64 1
%109 = tail call double @llvm.fmuladd.f64(double %108, double %43, double %107)
store double %109, double* %6
%110 = fcmp ogt double %109, 0.000000e+00
%111 = fcmp olt double %109, %48
%112 = select i1 %110, i1 true, i1 %111
br i1 %112, label %150, label %113
113: ; preds = %94
%114 = fneg double %108
%115 = fmul double %44, %114
%116 = tail call double @llvm.fmuladd.f64(double %98, double %19, double %115)
%117 = insertelement <2 x double> poison, double %98, i64 0
%118 = shufflevector <2 x double> %117, <2 x double> %104, <2 x i32> <i32 0, i32 2>
%119 = fneg <2 x double> %118
%120 = insertelement <2 x double> %13, double %19, i64 1
%121 = fmul <2 x double> %120, %119
%122 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %104, <2 x double> %14, <2 x double> %121)
%123 = load double, double* %1
%124 = load double, double* %30
%125 = extractelement <2 x double> %122, i64 1
%126 = fmul double %125, %124
%127 = tail call double @llvm.fmuladd.f64(double %123, double %116, double %126)
%128 = load double, double* %32
%129 = extractelement <2 x double> %122, i64 0
%130 = tail call double @llvm.fmuladd.f64(double %128, double %129, double %127)
store double %130, double* %7
%131 = fcmp ogt double %130, 0.000000e+00
br i1 %131, label %150, label %132
132: ; preds = %113
%133 = load double, double* %6
%134 = fadd double %130, %133
%135 = fcmp olt double %134, %48
br i1 %135, label %150, label %136
136: ; preds = %132, %88
%137 = phi double [ %72, %88 ], [ %116, %132 ]
%138 = phi <2 x double> [ %78, %88 ], [ %122, %132 ]
%139 = fdiv double 1.000000e+00, %48
%140 = extractelement <2 x double> %138, i64 1
%141 = fmul double %26, %140
%142 = tail call double @llvm.fmuladd.f64(double %22, double %137, double %141)
%143 = extractelement <2 x double> %138, i64 0
%144 = tail call double @llvm.fmuladd.f64(double %29, double %143, double %142)
%145 = fmul double %139, %144
store double %145, double* %5
%146 = load double, double* %6
%147 = fmul double %139, %146
store double %147, double* %6
%148 = load double, double* %7
%149 = fmul double %139, %148
store double %149, double* %7
br label %150
150: ; preds = %92, %113, %132, %94, %69, %88, %50, %136
%151 = phi i32 [ 1, %136 ], [ 0, %50 ], [ 0, %88 ], [ 0, %69 ], [ 0, %94 ], [ 0, %132 ], [ 0, %113 ], [ 0, %92 ]
ret i32 %151
}