int intersect_triangle2(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]);
  tvec[0] = orig[0] - vert0[0];
  tvec[1] = orig[1] - vert0[1];
  tvec[2] = orig[2] - vert0[2];
  ;
  inv_det = 1.0 / det;
  if (det > 0.000001) {
    *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) {
    *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;
  *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_triangle2>:
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
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  0xd03(%rip),%xmm0
divsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0xd8(%rbp),%xmm0
ff
movsd  0xcdb(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    14ee <intersect_triangle2+0x3ee>
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     139b <intersect_triangle2+0x29b>
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm0
ucomisd -0xd8(%rbp),%xmm0
ff
jbe    13a7 <intersect_triangle2+0x2a7>
movl   $0x0,-0x4(%rbp)
jmp    175a <intersect_triangle2+0x65a>
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     14dd <intersect_triangle2+0x3dd>
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    0x18(%rbp),%rax
addsd  (%rax),%xmm0
ucomisd -0xd8(%rbp),%xmm0
ff
jbe    14e9 <intersect_triangle2+0x3e9>
movl   $0x0,-0x4(%rbp)
jmp    175a <intersect_triangle2+0x65a>
jmp    16e4 <intersect_triangle2+0x5e4>
movsd  0xb1a(%rip),%xmm0
ucomisd -0xd8(%rbp),%xmm0
ff
jbe    16d3 <intersect_triangle2+0x5d3>
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     1578 <intersect_triangle2+0x478>
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm1
movsd  -0xd8(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jbe    1584 <intersect_triangle2+0x484>
movl   $0x0,-0x4(%rbp)
jmp    175a <intersect_triangle2+0x65a>
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     16c2 <intersect_triangle2+0x5c2>
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm1
mov    0x18(%rbp),%rax
addsd  (%rax),%xmm1
movsd  -0xd8(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jbe    16ce <intersect_triangle2+0x5ce>
movl   $0x0,-0x4(%rbp)
jmp    175a <intersect_triangle2+0x65a>
jmp    16df <intersect_triangle2+0x5df>
movl   $0x0,-0x4(%rbp)
jmp    175a <intersect_triangle2+0x65a>
jmp    16e4 <intersect_triangle2+0x5e4>
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_triangle2>:
mov    0x10(%rsp),%r10
mov    0x8(%rsp),%r11
movsd  (%rdx),%xmm13
movsd  0x8(%rcx),%xmm9
movupd 0x8(%rdx),%xmm1
movsd  (%rcx),%xmm4
movhpd 0x10(%rcx),%xmm4
subsd  %xmm1,%xmm9
movapd %xmm1,%xmm2
movsd  0x8(%r8),%xmm8
subsd  %xmm1,%xmm8
movupd 0x8(%rdi),%xmm0
subpd  %xmm1,%xmm0
unpckhpd %xmm1,%xmm1
movsd  %xmm13,%xmm2
subpd  %xmm2,%xmm4
movapd %xmm4,%xmm12
shufpd $0x1,%xmm4,%xmm12
movsd  (%r8),%xmm10
subsd  %xmm13,%xmm10
movsd  0x10(%r8),%xmm11
subsd  %xmm1,%xmm11
movsd  (%rsi),%xmm2
movsd  0x8(%rsi),%xmm1
movsd  0x10(%rsi),%xmm3
movapd %xmm8,%xmm6
mulsd  %xmm3,%xmm6
movapd %xmm10,%xmm7
mulsd  %xmm1,%xmm7
mulsd  %xmm11,%xmm1
subsd  %xmm6,%xmm1
movapd %xmm11,%xmm6
mulsd  %xmm2,%xmm6
mulsd  %xmm10,%xmm3
subsd  %xmm6,%xmm3
mulsd  %xmm8,%xmm2
subsd  %xmm7,%xmm2
movapd %xmm9,%xmm6
mulsd  %xmm3,%xmm6
movapd %xmm4,%xmm5
mulsd  %xmm1,%xmm5
addsd  %xmm6,%xmm5
movapd %xmm4,%xmm7
unpckhpd %xmm4,%xmm7
mulsd  %xmm2,%xmm7
addsd  %xmm5,%xmm7
movsd  (%rdi),%xmm6
subsd  %xmm13,%xmm6
ucomisd 0xe21(%rip),%xmm7
jbe    1290 <intersect_triangle2+0x190>
mulsd  %xmm0,%xmm3
mulsd  %xmm6,%xmm1
addsd  %xmm3,%xmm1
movapd %xmm0,%xmm3
unpckhpd %xmm0,%xmm3
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
movsd  %xmm2,(%r11)
xor    %eax,%eax
xorpd  %xmm1,%xmm1
ucomisd %xmm2,%xmm1
ja     128f <intersect_triangle2+0x18f>
ucomisd %xmm7,%xmm2
ja     128f <intersect_triangle2+0x18f>
unpcklpd %xmm6,%xmm3
movapd %xmm4,%xmm1
movsd  %xmm9,%xmm1
mulpd  %xmm3,%xmm1
mulpd  %xmm0,%xmm12
subpd  %xmm1,%xmm12
mulsd  %xmm0,%xmm4
mulsd  %xmm9,%xmm6
subsd  %xmm4,%xmm6
movapd %xmm12,%xmm0
unpckhpd %xmm12,%xmm0
mulsd  0x8(%rsi),%xmm0
movsd  (%rsi),%xmm1
mulsd  %xmm12,%xmm1
addsd  %xmm0,%xmm1
movsd  0x10(%rsi),%xmm0
mulsd  %xmm6,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%r10)
xorpd  %xmm1,%xmm1
ucomisd %xmm0,%xmm1
ja     128f <intersect_triangle2+0x18f>
addsd  (%r11),%xmm0
ucomisd %xmm7,%xmm0
jbe    1344 <intersect_triangle2+0x244>
ret
xor    %eax,%eax
movsd  0xd76(%rip),%xmm5
ucomisd %xmm7,%xmm5
jbe    128f <intersect_triangle2+0x18f>
mulsd  %xmm0,%xmm3
mulsd  %xmm6,%xmm1
addsd  %xmm3,%xmm1
movapd %xmm0,%xmm3
unpckhpd %xmm0,%xmm3
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
movsd  %xmm2,(%r11)
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm2
ja     128f <intersect_triangle2+0x18f>
ucomisd %xmm2,%xmm7
ja     128f <intersect_triangle2+0x18f>
unpcklpd %xmm6,%xmm3
movapd %xmm4,%xmm1
movsd  %xmm9,%xmm1
mulpd  %xmm3,%xmm1
mulpd  %xmm0,%xmm12
subpd  %xmm1,%xmm12
mulsd  %xmm0,%xmm4
mulsd  %xmm9,%xmm6
subsd  %xmm4,%xmm6
movapd %xmm12,%xmm0
unpckhpd %xmm12,%xmm0
mulsd  0x8(%rsi),%xmm0
movsd  (%rsi),%xmm1
mulsd  %xmm12,%xmm1
addsd  %xmm0,%xmm1
movsd  0x10(%rsi),%xmm0
mulsd  %xmm6,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%r10)
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
ja     128f <intersect_triangle2+0x18f>
addsd  (%r11),%xmm0
ucomisd %xmm0,%xmm7
ja     128f <intersect_triangle2+0x18f>
movsd  0xcb4(%rip),%xmm0
divsd  %xmm7,%xmm0
mulsd  %xmm12,%xmm10
unpckhpd %xmm12,%xmm12
mulsd  %xmm12,%xmm8
addsd  %xmm10,%xmm8
mulsd  %xmm6,%xmm11
addsd  %xmm8,%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_triangle2(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** %10
%131 = getelementptr inbounds double, double* %130, i64 0
%132 = load double, double* %131
%133 = load double*, double** %12
%134 = getelementptr inbounds double, double* %133, i64 0
%135 = load double, double* %134
%136 = fsub double %132, %135
%137 = getelementptr inbounds [3 x double], [3 x double]* %20, i64 0, i64 0
store double %136, double* %137
%138 = load double*, double** %10
%139 = getelementptr inbounds double, double* %138, i64 1
%140 = load double, double* %139
%141 = load double*, double** %12
%142 = getelementptr inbounds double, double* %141, i64 1
%143 = load double, double* %142
%144 = fsub double %140, %143
%145 = getelementptr inbounds [3 x double], [3 x double]* %20, i64 0, i64 1
store double %144, double* %145
%146 = load double*, double** %10
%147 = getelementptr inbounds double, double* %146, i64 2
%148 = load double, double* %147
%149 = load double*, double** %12
%150 = getelementptr inbounds double, double* %149, i64 2
%151 = load double, double* %150
%152 = fsub double %148, %151
%153 = getelementptr inbounds [3 x double], [3 x double]* %20, i64 0, i64 2
store double %152, double* %153
%154 = load double, double* %23
%155 = fdiv double 1.000000e+00, %154
store double %155, double* %24
%156 = load double, double* %23
%157 = fcmp ogt double %156, 0x3EB0C6F7A0B5ED8D
br i1 %157, label %158, label %253
158: ; preds = %8
%159 = getelementptr inbounds [3 x double], [3 x double]* %20, i64 0, i64 0
%160 = load double, double* %159
%161 = getelementptr inbounds [3 x double], [3 x double]* %21, i64 0, i64 0
%162 = load double, double* %161
%163 = getelementptr inbounds [3 x double], [3 x double]* %20, i64 0, i64 1
%164 = load double, double* %163
%165 = getelementptr inbounds [3 x double], [3 x double]* %21, i64 0, i64 1
%166 = load double, double* %165
%167 = fmul double %164, %166
%168 = call double @llvm.fmuladd.f64(double %160, double %162, double %167)
%169 = getelementptr inbounds [3 x double], [3 x double]* %20, i64 0, i64 2
%170 = load double, double* %169
%171 = getelementptr inbounds [3 x double], [3 x double]* %21, i64 0, i64 2
%172 = load double, double* %171
%173 = call double @llvm.fmuladd.f64(double %170, double %172, double %168)
%174 = load double*, double** %16
store double %173, double* %174
%175 = load double*, double** %16
%176 = load double, double* %175
%177 = fcmp olt double %176, 0.000000e+00
br i1 %177, label %183, label %178
178: ; preds = %158
%179 = load double*, double** %16
%180 = load double, double* %179
%181 = load double, double* %23
%182 = fcmp ogt double %180, %181
br i1 %182, label %183, label %184
183: ; preds = %178, %158
store i32 0, i32* %9
br label %380
184: ; preds = %178
%185 = getelementptr inbounds [3 x double], [3 x double]* %20, i64 0, i64 1
%186 = load double, double* %185
%187 = getelementptr inbounds [3 x double], [3 x double]* %18, i64 0, i64 2
%188 = load double, double* %187
%189 = getelementptr inbounds [3 x double], [3 x double]* %20, i64 0, i64 2
%190 = load double, double* %189
%191 = getelementptr inbounds [3 x double], [3 x double]* %18, i64 0, i64 1
%192 = load double, double* %191
%193 = fmul double %190, %192
%194 = fneg double %193
%195 = call double @llvm.fmuladd.f64(double %186, double %188, double %194)
%196 = getelementptr inbounds [3 x double], [3 x double]* %22, i64 0, i64 0
store double %195, double* %196
%197 = getelementptr inbounds [3 x double], [3 x double]* %20, i64 0, i64 2
%198 = load double, double* %197
%199 = getelementptr inbounds [3 x double], [3 x double]* %18, i64 0, i64 0
%200 = load double, double* %199
%201 = getelementptr inbounds [3 x double], [3 x double]* %20, i64 0, i64 0
%202 = load double, double* %201
%203 = getelementptr inbounds [3 x double], [3 x double]* %18, i64 0, i64 2
%204 = load double, double* %203
%205 = fmul double %202, %204
%206 = fneg double %205
%207 = call double @llvm.fmuladd.f64(double %198, double %200, double %206)
%208 = getelementptr inbounds [3 x double], [3 x double]* %22, i64 0, i64 1
store double %207, double* %208
%209 = getelementptr inbounds [3 x double], [3 x double]* %20, i64 0, i64 0
%210 = load double, double* %209
%211 = getelementptr inbounds [3 x double], [3 x double]* %18, i64 0, i64 1
%212 = load double, double* %211
%213 = getelementptr inbounds [3 x double], [3 x double]* %20, i64 0, i64 1
%214 = load double, double* %213
%215 = getelementptr inbounds [3 x double], [3 x double]* %18, i64 0, i64 0
%216 = load double, double* %215
%217 = fmul double %214, %216
%218 = fneg double %217
%219 = call double @llvm.fmuladd.f64(double %210, double %212, double %218)
%220 = getelementptr inbounds [3 x double], [3 x double]* %22, i64 0, i64 2
store double %219, double* %220
%221 = load double*, double** %11
%222 = getelementptr inbounds double, double* %221, i64 0
%223 = load double, double* %222
%224 = getelementptr inbounds [3 x double], [3 x double]* %22, i64 0, i64 0
%225 = load double, double* %224
%226 = load double*, double** %11
%227 = getelementptr inbounds double, double* %226, i64 1
%228 = load double, double* %227
%229 = getelementptr inbounds [3 x double], [3 x double]* %22, i64 0, i64 1
%230 = load double, double* %229
%231 = fmul double %228, %230
%232 = call double @llvm.fmuladd.f64(double %223, double %225, double %231)
%233 = load double*, double** %11
%234 = getelementptr inbounds double, double* %233, i64 2
%235 = load double, double* %234
%236 = getelementptr inbounds [3 x double], [3 x double]* %22, i64 0, i64 2
%237 = load double, double* %236
%238 = call double @llvm.fmuladd.f64(double %235, double %237, double %232)
%239 = load double*, double** %17
store double %238, double* %239
%240 = load double*, double** %17
%241 = load double, double* %240
%242 = fcmp olt double %241, 0.000000e+00
br i1 %242, label %251, label %243
243: ; preds = %184
%244 = load double*, double** %16
%245 = load double, double* %244
%246 = load double*, double** %17
%247 = load double, double* %246
%248 = fadd double %245, %247
%249 = load double, double* %23
%250 = fcmp ogt double %248, %249
br i1 %250, label %251, label %252
251: ; preds = %243, %184
store i32 0, i32* %9
br label %380
252: ; preds = %243
br label %353
253: ; preds = %8
%254 = load double, double* %23
%255 = fcmp olt double %254, 0xBEB0C6F7A0B5ED8D
br i1 %255, label %256, label %351
256: ; preds = %253
%257 = getelementptr inbounds [3 x double], [3 x double]* %20, i64 0, i64 0
%258 = load double, double* %257
%259 = getelementptr inbounds [3 x double], [3 x double]* %21, i64 0, i64 0
%260 = load double, double* %259
%261 = getelementptr inbounds [3 x double], [3 x double]* %20, i64 0, i64 1
%262 = load double, double* %261
%263 = getelementptr inbounds [3 x double], [3 x double]* %21, i64 0, i64 1
%264 = load double, double* %263
%265 = fmul double %262, %264
%266 = call double @llvm.fmuladd.f64(double %258, double %260, double %265)
%267 = getelementptr inbounds [3 x double], [3 x double]* %20, i64 0, i64 2
%268 = load double, double* %267
%269 = getelementptr inbounds [3 x double], [3 x double]* %21, i64 0, i64 2
%270 = load double, double* %269
%271 = call double @llvm.fmuladd.f64(double %268, double %270, double %266)
%272 = load double*, double** %16
store double %271, double* %272
%273 = load double*, double** %16
%274 = load double, double* %273
%275 = fcmp ogt double %274, 0.000000e+00
br i1 %275, label %281, label %276
276: ; preds = %256
%277 = load double*, double** %16
%278 = load double, double* %277
%279 = load double, double* %23
%280 = fcmp olt double %278, %279
br i1 %280, label %281, label %282
281: ; preds = %276, %256
store i32 0, i32* %9
br label %380
282: ; preds = %276
%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]* %18, i64 0, i64 2
%286 = load double, double* %285
%287 = getelementptr inbounds [3 x double], [3 x double]* %20, i64 0, i64 2
%288 = load double, double* %287
%289 = getelementptr inbounds [3 x double], [3 x double]* %18, i64 0, i64 1
%290 = load double, double* %289
%291 = fmul double %288, %290
%292 = fneg double %291
%293 = call double @llvm.fmuladd.f64(double %284, double %286, double %292)
%294 = getelementptr inbounds [3 x double], [3 x double]* %22, i64 0, i64 0
store double %293, double* %294
%295 = getelementptr inbounds [3 x double], [3 x double]* %20, i64 0, i64 2
%296 = load double, double* %295
%297 = getelementptr inbounds [3 x double], [3 x double]* %18, i64 0, i64 0
%298 = load double, double* %297
%299 = getelementptr inbounds [3 x double], [3 x double]* %20, i64 0, i64 0
%300 = load double, double* %299
%301 = getelementptr inbounds [3 x double], [3 x double]* %18, i64 0, i64 2
%302 = load double, double* %301
%303 = fmul double %300, %302
%304 = fneg double %303
%305 = call double @llvm.fmuladd.f64(double %296, double %298, double %304)
%306 = getelementptr inbounds [3 x double], [3 x double]* %22, i64 0, i64 1
store double %305, double* %306
%307 = getelementptr inbounds [3 x double], [3 x double]* %20, i64 0, i64 0
%308 = load double, double* %307
%309 = getelementptr inbounds [3 x double], [3 x double]* %18, i64 0, i64 1
%310 = load double, double* %309
%311 = getelementptr inbounds [3 x double], [3 x double]* %20, i64 0, i64 1
%312 = load double, double* %311
%313 = getelementptr inbounds [3 x double], [3 x double]* %18, i64 0, i64 0
%314 = load double, double* %313
%315 = fmul double %312, %314
%316 = fneg double %315
%317 = call double @llvm.fmuladd.f64(double %308, double %310, double %316)
%318 = getelementptr inbounds [3 x double], [3 x double]* %22, i64 0, i64 2
store double %317, double* %318
%319 = load double*, double** %11
%320 = getelementptr inbounds double, double* %319, i64 0
%321 = load double, double* %320
%322 = getelementptr inbounds [3 x double], [3 x double]* %22, i64 0, i64 0
%323 = load double, double* %322
%324 = load double*, double** %11
%325 = getelementptr inbounds double, double* %324, i64 1
%326 = load double, double* %325
%327 = getelementptr inbounds [3 x double], [3 x double]* %22, i64 0, i64 1
%328 = load double, double* %327
%329 = fmul double %326, %328
%330 = call double @llvm.fmuladd.f64(double %321, double %323, double %329)
%331 = load double*, double** %11
%332 = getelementptr inbounds double, double* %331, i64 2
%333 = load double, double* %332
%334 = getelementptr inbounds [3 x double], [3 x double]* %22, i64 0, i64 2
%335 = load double, double* %334
%336 = call double @llvm.fmuladd.f64(double %333, double %335, double %330)
%337 = load double*, double** %17
store double %336, double* %337
%338 = load double*, double** %17
%339 = load double, double* %338
%340 = fcmp ogt double %339, 0.000000e+00
br i1 %340, label %349, label %341
341: ; preds = %282
%342 = load double*, double** %16
%343 = load double, double* %342
%344 = load double*, double** %17
%345 = load double, double* %344
%346 = fadd double %343, %345
%347 = load double, double* %23
%348 = fcmp olt double %346, %347
br i1 %348, label %349, label %350
349: ; preds = %341, %282
store i32 0, i32* %9
br label %380
350: ; preds = %341
br label %352
351: ; preds = %253
store i32 0, i32* %9
br label %380
352: ; preds = %350
br label %353
353: ; preds = %352, %252
%354 = getelementptr inbounds [3 x double], [3 x double]* %19, i64 0, i64 0
%355 = load double, double* %354
%356 = getelementptr inbounds [3 x double], [3 x double]* %22, i64 0, i64 0
%357 = load double, double* %356
%358 = getelementptr inbounds [3 x double], [3 x double]* %19, i64 0, i64 1
%359 = load double, double* %358
%360 = getelementptr inbounds [3 x double], [3 x double]* %22, i64 0, i64 1
%361 = load double, double* %360
%362 = fmul double %359, %361
%363 = call double @llvm.fmuladd.f64(double %355, double %357, double %362)
%364 = getelementptr inbounds [3 x double], [3 x double]* %19, i64 0, i64 2
%365 = load double, double* %364
%366 = getelementptr inbounds [3 x double], [3 x double]* %22, i64 0, i64 2
%367 = load double, double* %366
%368 = call double @llvm.fmuladd.f64(double %365, double %367, double %363)
%369 = load double, double* %24
%370 = fmul double %368, %369
%371 = load double*, double** %15
store double %370, double* %371
%372 = load double, double* %24
%373 = load double*, double** %16
%374 = load double, double* %373
%375 = fmul double %374, %372
store double %375, double* %373
%376 = load double, double* %24
%377 = load double*, double** %17
%378 = load double, double* %377
%379 = fmul double %378, %376
store double %379, double* %377
store i32 1, i32* %9
br label %380
380: ; preds = %353, %351, %349, %281, %251, %183
%381 = load i32, i32* %9
ret i32 %381
}

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