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

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
double fabs(float);
float sqrt(float);
void getOrientation(float v1[2][3], float v2[2][3], float q[4], float R[3][3],
                    float h) {
  for (int i = 0; i < 3; i++)
    for (int j = 0; j < 3; j++) {
      for (int k = 0; k < 2; k++)
        R[i][j] += v1[k][i] * v2[k][j];
    }
  float F[4][4];
  F[0][0] = R[0][0] + R[1][1] + R[2][2] + h;
  F[0][1] = R[1][2] - R[2][1];
  F[0][2] = R[2][0] - R[0][2];
  F[0][3] = R[0][1] - R[1][0];
  F[1][1] = R[0][0] - R[1][1] - R[2][2] + h;
  F[1][2] = R[0][1] + R[1][0];
  F[1][3] = R[0][2] + R[2][0];
  F[2][2] = -R[0][0] + R[1][1] - R[2][2] + h;
  F[2][3] = R[1][2] + R[2][1];
  F[3][3] = -R[0][0] - R[1][1] + R[2][2] + h;
  for (int i = 1; i < 4; i++)
    for (int j = 0; j < i; j++)
      F[i][j] = F[j][i];
  int converged = 0;
  int its = 0;
  while (!converged && its < 100) {
    float q2[4];
    float m = 0;
    for (int i = 0; i < 4; i++) {
      q2[i] = 0.;
      for (int j = 0; j < 4; j++)
        q2[i] += F[i][j] * q[j];
    }
    float q3[4];
    for (int i = 0; i < 4; i++) {
      q3[i] = 0.;
      for (int j = 0; j < 4; j++)
        q3[i] += F[i][j] * q2[j];
      m += q3[i] * q3[i];
    }
    if (m == 0.) {
      q3[0] = 1.;
      m = 1.;
    }
    m = sqrt(m);
    converged = 1;
    for (int i = 0; i < 4; i++) {
      float n = q3[i] / m;
      if (fabs(q[i] - n) > 0.005)
        converged = 0;
      q[i] = n;
    }
    its++;
  }
}


x86 assembly (clang, -O0):
<getOrientation>:
push   %rbp
mov    %rsp,%rbp
sub    $0xd0,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
movss  %xmm0,-0x24(%rbp)
movl   $0x0,-0x28(%rbp)
cmpl   $0x3,-0x28(%rbp)
jge    11fc <getOrientation+0xdc>
movl   $0x0,-0x2c(%rbp)
cmpl   $0x3,-0x2c(%rbp)
jge    11e9 <getOrientation+0xc9>
movl   $0x0,-0x30(%rbp)
cmpl   $0x2,-0x30(%rbp)
jge    11d6 <getOrientation+0xb6>
mov    -0x8(%rbp),%rax
movslq -0x30(%rbp),%rcx
imul   $0xc,%rcx,%rcx
add    %rcx,%rax
movslq -0x28(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x30(%rbp),%rcx
imul   $0xc,%rcx,%rcx
add    %rcx,%rax
movslq -0x2c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm2
mov    -0x20(%rbp),%rax
movslq -0x28(%rbp),%rcx
imul   $0xc,%rcx,%rcx
add    %rcx,%rax
movslq -0x2c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,(%rax,%rcx,4)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    1169 <getOrientation+0x49>
jmp    11db <getOrientation+0xbb>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1158 <getOrientation+0x38>
jmp    11ee <getOrientation+0xce>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1147 <getOrientation+0x27>
mov    -0x20(%rbp),%rax
movss  (%rax),%xmm0
mov    -0x20(%rbp),%rax
addss  0x10(%rax),%xmm0
mov    -0x20(%rbp),%rax
addss  0x20(%rax),%xmm0
addss  -0x24(%rbp),%xmm0
movss  %xmm0,-0x70(%rbp)
mov    -0x20(%rbp),%rax
movss  0x14(%rax),%xmm0
mov    -0x20(%rbp),%rax
subss  0x1c(%rax),%xmm0
movss  %xmm0,-0x6c(%rbp)
mov    -0x20(%rbp),%rax
movss  0x18(%rax),%xmm0
mov    -0x20(%rbp),%rax
subss  0x8(%rax),%xmm0
movss  %xmm0,-0x68(%rbp)
mov    -0x20(%rbp),%rax
movss  0x4(%rax),%xmm0
mov    -0x20(%rbp),%rax
subss  0xc(%rax),%xmm0
movss  %xmm0,-0x64(%rbp)
mov    -0x20(%rbp),%rax
movss  (%rax),%xmm0
mov    -0x20(%rbp),%rax
subss  0x10(%rax),%xmm0
mov    -0x20(%rbp),%rax
subss  0x20(%rax),%xmm0
addss  -0x24(%rbp),%xmm0
movss  %xmm0,-0x5c(%rbp)
mov    -0x20(%rbp),%rax
movss  0x4(%rax),%xmm0
mov    -0x20(%rbp),%rax
addss  0xc(%rax),%xmm0
movss  %xmm0,-0x58(%rbp)
mov    -0x20(%rbp),%rax
movss  0x8(%rax),%xmm0
mov    -0x20(%rbp),%rax
addss  0x18(%rax),%xmm0
movss  %xmm0,-0x54(%rbp)
mov    -0x20(%rbp),%rax
movss  (%rax),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mov    -0x20(%rbp),%rax
addss  0x10(%rax),%xmm0
mov    -0x20(%rbp),%rax
subss  0x20(%rax),%xmm0
addss  -0x24(%rbp),%xmm0
movss  %xmm0,-0x48(%rbp)
mov    -0x20(%rbp),%rax
movss  0x14(%rax),%xmm0
mov    -0x20(%rbp),%rax
addss  0x1c(%rax),%xmm0
movss  %xmm0,-0x44(%rbp)
mov    -0x20(%rbp),%rax
movss  (%rax),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mov    -0x20(%rbp),%rax
subss  0x10(%rax),%xmm0
mov    -0x20(%rbp),%rax
addss  0x20(%rax),%xmm0
addss  -0x24(%rbp),%xmm0
movss  %xmm0,-0x34(%rbp)
movl   $0x1,-0x74(%rbp)
cmpl   $0x4,-0x74(%rbp)
jge    13a5 <getOrientation+0x285>
movl   $0x0,-0x78(%rbp)
mov    -0x78(%rbp),%eax
cmp    -0x74(%rbp),%eax
jge    1392 <getOrientation+0x272>
movslq -0x78(%rbp),%rcx
lea    -0x70(%rbp),%rax
shl    $0x4,%rcx
add    %rcx,%rax
movslq -0x74(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movslq -0x74(%rbp),%rcx
lea    -0x70(%rbp),%rax
shl    $0x4,%rcx
add    %rcx,%rax
movslq -0x78(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x78(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x78(%rbp)
jmp    1348 <getOrientation+0x228>
jmp    1397 <getOrientation+0x277>
mov    -0x74(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x74(%rbp)
jmp    1337 <getOrientation+0x217>
movl   $0x0,-0x7c(%rbp)
movl   $0x0,-0x80(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x7c(%rbp)
mov    %al,-0xc1(%rbp)
jne    13d2 <getOrientation+0x2b2>
cmpl   $0x64,-0x80(%rbp)
setl   %al
mov    %al,-0xc1(%rbp)
mov    -0xc1(%rbp),%al
test   $0x1,%al
jne    13e5 <getOrientation+0x2c5>
jmp    169f <getOrientation+0x57f>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x94(%rbp)
ff
movl   $0x0,-0x98(%rbp)
cmpl   $0x4,-0x98(%rbp)
jge    14ad <getOrientation+0x38d>
movslq -0x98(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,-0x90(%rbp,%rax,4)
ff ff
movl   $0x0,-0x9c(%rbp)
cmpl   $0x4,-0x9c(%rbp)
jge    1494 <getOrientation+0x374>
movslq -0x98(%rbp),%rcx
lea    -0x70(%rbp),%rax
shl    $0x4,%rcx
add    %rcx,%rax
movslq -0x9c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x9c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm2
movslq -0x98(%rbp),%rax
movss  -0x90(%rbp,%rax,4),%xmm1
ff ff
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x90(%rbp,%rax,4)
ff ff
mov    -0x9c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x9c(%rbp)
jmp    1424 <getOrientation+0x304>
jmp    1499 <getOrientation+0x379>
mov    -0x98(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x98(%rbp)
jmp    13fa <getOrientation+0x2da>
movl   $0x0,-0xb4(%rbp)
cmpl   $0x4,-0xb4(%rbp)
jge    159d <getOrientation+0x47d>
movslq -0xb4(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,-0xb0(%rbp,%rax,4)
ff ff
movl   $0x0,-0xb8(%rbp)
cmpl   $0x4,-0xb8(%rbp)
jge    1551 <getOrientation+0x431>
movslq -0xb4(%rbp),%rcx
lea    -0x70(%rbp),%rax
shl    $0x4,%rcx
add    %rcx,%rax
movslq -0xb8(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movslq -0xb8(%rbp),%rax
movss  -0x90(%rbp,%rax,4),%xmm2
ff ff
movslq -0xb4(%rbp),%rax
movss  -0xb0(%rbp,%rax,4),%xmm1
ff ff
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0xb0(%rbp,%rax,4)
ff ff
mov    -0xb8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xb8(%rbp)
jmp    14e1 <getOrientation+0x3c1>
movslq -0xb4(%rbp),%rax
movss  -0xb0(%rbp,%rax,4),%xmm0
ff ff
movslq -0xb4(%rbp),%rax
movss  -0xb0(%rbp,%rax,4),%xmm2
ff ff
movss  -0x94(%rbp),%xmm1
ff
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x94(%rbp)
ff
mov    -0xb4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xb4(%rbp)
jmp    14b7 <getOrientation+0x397>
movss  -0x94(%rbp),%xmm0
ff
cvtss2sd %xmm0,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    15dc <getOrientation+0x4bc>
jp     15dc <getOrientation+0x4bc>
movss  0xa3c(%rip),%xmm0
movss  %xmm0,-0xb0(%rbp)
ff
movss  0xa2c(%rip),%xmm0
movss  %xmm0,-0x94(%rbp)
ff
movss  -0x94(%rbp),%xmm0
ff
call   1040 <sqrt@plt>
movss  %xmm0,-0x94(%rbp)
ff
movl   $0x1,-0x7c(%rbp)
movl   $0x0,-0xbc(%rbp)
cmpl   $0x4,-0xbc(%rbp)
jge    1691 <getOrientation+0x571>
movslq -0xbc(%rbp),%rax
movss  -0xb0(%rbp,%rax,4),%xmm0
ff ff
divss  -0x94(%rbp),%xmm0
ff
movss  %xmm0,-0xc0(%rbp)
ff
mov    -0x18(%rbp),%rax
movslq -0xbc(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
subss  -0xc0(%rbp),%xmm0
ff
call   1030 <fabs@plt>
movsd  0x9b4(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1665 <getOrientation+0x545>
movl   $0x0,-0x7c(%rbp)
movss  -0xc0(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
movslq -0xbc(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0xbc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xbc(%rbp)
jmp    1602 <getOrientation+0x4e2>
mov    -0x80(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x80(%rbp)
jmp    13b3 <getOrientation+0x293>
add    $0xd0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<getOrientation>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
sub    $0x60,%rsp
movss  (%rdi),%xmm1
mulss  (%rsi),%xmm1
addss  (%rcx),%xmm1
movss  %xmm1,(%rcx)
movss  0xc(%rdi),%xmm7
mulss  0xc(%rsi),%xmm7
addss  %xmm1,%xmm7
movss  %xmm7,(%rcx)
movss  (%rdi),%xmm2
mulss  0x4(%rsi),%xmm2
addss  0x4(%rcx),%xmm2
movss  %xmm2,0x4(%rcx)
movss  0xc(%rdi),%xmm8
mulss  0x10(%rsi),%xmm8
addss  %xmm2,%xmm8
movss  %xmm8,0x4(%rcx)
movss  (%rdi),%xmm3
mulss  0x8(%rsi),%xmm3
addss  0x8(%rcx),%xmm3
movss  %xmm3,0x8(%rcx)
movss  0xc(%rdi),%xmm9
mulss  0x14(%rsi),%xmm9
addss  %xmm3,%xmm9
movss  %xmm9,0x8(%rcx)
movss  0x4(%rdi),%xmm3
mulss  (%rsi),%xmm3
addss  0xc(%rcx),%xmm3
movss  %xmm3,0xc(%rcx)
movss  0x10(%rdi),%xmm1
mulss  0xc(%rsi),%xmm1
addss  %xmm3,%xmm1
movss  %xmm1,0xc(%rcx)
movss  0x4(%rdi),%xmm4
mulss  0x4(%rsi),%xmm4
addss  0x10(%rcx),%xmm4
movss  %xmm4,0x10(%rcx)
movss  0x10(%rdi),%xmm3
mulss  0x10(%rsi),%xmm3
addss  %xmm4,%xmm3
movss  %xmm3,0x10(%rcx)
movss  0x4(%rdi),%xmm5
mulss  0x8(%rsi),%xmm5
addss  0x14(%rcx),%xmm5
movss  %xmm5,0x14(%rcx)
movss  0x10(%rdi),%xmm10
mulss  0x14(%rsi),%xmm10
addss  %xmm5,%xmm10
movss  %xmm10,0x14(%rcx)
movss  0x8(%rdi),%xmm5
mulss  (%rsi),%xmm5
addss  0x18(%rcx),%xmm5
movss  %xmm5,0x18(%rcx)
movss  0x14(%rdi),%xmm2
mulss  0xc(%rsi),%xmm2
addss  %xmm5,%xmm2
movss  %xmm2,0x18(%rcx)
movss  0x8(%rdi),%xmm5
mulss  0x4(%rsi),%xmm5
addss  0x1c(%rcx),%xmm5
movss  %xmm5,0x1c(%rcx)
movss  0x14(%rdi),%xmm4
mulss  0x10(%rsi),%xmm4
addss  %xmm5,%xmm4
movss  %xmm4,0x1c(%rcx)
movss  0x8(%rdi),%xmm6
mulss  0x8(%rsi),%xmm6
addss  0x20(%rcx),%xmm6
movss  %xmm6,0x20(%rcx)
movss  0x14(%rdi),%xmm5
mulss  0x14(%rsi),%xmm5
mov    %rdx,%rbp
addss  %xmm6,%xmm5
movss  %xmm5,0x20(%rcx)
movaps %xmm7,%xmm6
addss  %xmm3,%xmm6
addss  %xmm5,%xmm6
addss  %xmm0,%xmm6
movaps %xmm6,0x50(%rsp)
movaps %xmm10,%xmm6
subss  %xmm4,%xmm6
movss  %xmm6,0x20(%rsp)
movaps %xmm2,%xmm6
subss  %xmm9,%xmm6
movss  %xmm6,0x1c(%rsp)
movaps %xmm8,%xmm6
subss  %xmm1,%xmm6
movss  %xmm6,0x18(%rsp)
movaps %xmm7,%xmm6
subss  %xmm3,%xmm6
subss  %xmm5,%xmm6
addss  %xmm0,%xmm6
movaps %xmm6,0x30(%rsp)
addss  %xmm8,%xmm1
movss  %xmm1,0x2c(%rsp)
addss  %xmm9,%xmm2
movss  %xmm2,0x28(%rsp)
movaps %xmm3,%xmm1
subss  %xmm7,%xmm1
subss  %xmm5,%xmm1
addss  %xmm0,%xmm1
movss  %xmm1,0x14(%rsp)
addss  %xmm10,%xmm4
movss  %xmm4,0x24(%rsp)
xorps  0xce0(%rip),%xmm7
subss  %xmm3,%xmm7
addss  %xmm5,%xmm7
addss  %xmm0,%xmm7
movaps %xmm7,0x40(%rsp)
movss  0xc(%rdx),%xmm6
xor    %r14d,%r14d
nopl   0x0(%rax)
movss  0x0(%rbp),%xmm4
movss  0x4(%rbp),%xmm3
movaps 0x50(%rsp),%xmm14
movaps %xmm14,%xmm0
mulss  %xmm4,%xmm0
xorps  %xmm15,%xmm15
addss  %xmm15,%xmm0
movss  0x20(%rsp),%xmm11
movaps %xmm11,%xmm1
mulss  %xmm3,%xmm1
addss  %xmm0,%xmm1
movss  0x8(%rbp),%xmm5
movss  0x1c(%rsp),%xmm12
movaps %xmm12,%xmm2
mulss  %xmm5,%xmm2
addss  %xmm1,%xmm2
movss  0x18(%rsp),%xmm13
movaps %xmm13,%xmm8
movaps %xmm6,%xmm0
mulss  %xmm6,%xmm8
addss  %xmm2,%xmm8
movaps %xmm11,%xmm1
mulss  %xmm4,%xmm1
addss  %xmm15,%xmm1
movaps 0x30(%rsp),%xmm2
mulss  %xmm3,%xmm2
addss  %xmm1,%xmm2
movss  0x2c(%rsp),%xmm9
movaps %xmm9,%xmm6
mulss  %xmm5,%xmm6
addss  %xmm2,%xmm6
movss  0x28(%rsp),%xmm10
movaps %xmm10,%xmm1
mulss  %xmm0,%xmm1
addss  %xmm6,%xmm1
movaps %xmm12,%xmm2
mulss  %xmm4,%xmm2
addss  %xmm15,%xmm2
movaps %xmm9,%xmm6
mulss  %xmm3,%xmm6
addss  %xmm2,%xmm6
movss  0x14(%rsp),%xmm7
mulss  %xmm5,%xmm7
addss  %xmm6,%xmm7
movss  0x24(%rsp),%xmm6
movaps %xmm6,%xmm2
mulss  %xmm0,%xmm2
addss  %xmm7,%xmm2
mulss  %xmm13,%xmm4
addss  %xmm15,%xmm4
mulss  %xmm10,%xmm3
addss  %xmm4,%xmm3
mulss  %xmm6,%xmm5
addss  %xmm3,%xmm5
mulss  0x40(%rsp),%xmm0
addss  %xmm5,%xmm0
mulss  %xmm8,%xmm14
addss  %xmm15,%xmm14
movaps %xmm11,%xmm4
mulss  %xmm1,%xmm4
addss  %xmm14,%xmm4
movaps %xmm12,%xmm3
mulss  %xmm2,%xmm3
addss  %xmm4,%xmm3
movaps %xmm13,%xmm7
mulss  %xmm0,%xmm7
addss  %xmm3,%xmm7
movaps %xmm7,%xmm3
mulss  %xmm7,%xmm3
addss  %xmm15,%xmm3
movaps %xmm11,%xmm4
mulss  %xmm8,%xmm4
addss  %xmm15,%xmm4
movaps 0x30(%rsp),%xmm5
mulss  %xmm1,%xmm5
addss  %xmm4,%xmm5
movaps %xmm9,%xmm4
mulss  %xmm2,%xmm4
addss  %xmm5,%xmm4
movaps %xmm10,%xmm5
mulss  %xmm0,%xmm5
addss  %xmm4,%xmm5
movss  %xmm5,0xc(%rsp)
movaps %xmm5,%xmm4
mulss  %xmm5,%xmm4
addss  %xmm3,%xmm4
movaps %xmm12,%xmm3
mulss  %xmm8,%xmm3
addss  %xmm15,%xmm3
mulss  %xmm1,%xmm9
addss  %xmm3,%xmm9
movss  0x14(%rsp),%xmm3
mulss  %xmm2,%xmm3
addss  %xmm9,%xmm3
movaps %xmm6,%xmm5
mulss  %xmm0,%xmm5
addss  %xmm3,%xmm5
movss  %xmm5,0x8(%rsp)
movaps %xmm5,%xmm3
mulss  %xmm5,%xmm3
addss  %xmm4,%xmm3
mulss  %xmm13,%xmm8
addss  %xmm15,%xmm8
mulss  %xmm10,%xmm1
addss  %xmm8,%xmm1
mulss  %xmm6,%xmm2
addss  %xmm1,%xmm2
mulss  0x40(%rsp),%xmm0
addss  %xmm2,%xmm0
movss  %xmm0,0x10(%rsp)
mulss  %xmm0,%xmm0
addss  %xmm3,%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm15,%xmm0
jne    154a <getOrientation+0x42a>
jp     154a <getOrientation+0x42a>
movss  0xac6(%rip),%xmm7
jne    1556 <getOrientation+0x436>
jp     1556 <getOrientation+0x436>
movss  0xaba(%rip),%xmm0
ucomiss %xmm1,%xmm0
jb     1570 <getOrientation+0x450>
sqrtss %xmm0,%xmm0
jmp    157f <getOrientation+0x45f>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movss  %xmm7,(%rsp)
call   1040 <sqrt@plt>
movss  (%rsp),%xmm7
movss  %xmm0,0x4(%rsp)
divss  %xmm0,%xmm7
movss  %xmm7,(%rsp)
movss  0x0(%rbp),%xmm0
subss  %xmm7,%xmm0
call   1030 <fabs@plt>
movsd  0xa74(%rip),%xmm1
ucomisd %xmm1,%xmm0
seta   %r15b
movss  (%rsp),%xmm0
movss  %xmm0,0x0(%rbp)
movss  0xc(%rsp),%xmm1
divss  0x4(%rsp),%xmm1
movss  %xmm1,0xc(%rsp)
movss  0x4(%rbp),%xmm0
subss  %xmm1,%xmm0
call   1030 <fabs@plt>
ucomisd 0xa3a(%rip),%xmm0
seta   %bl
movss  0xc(%rsp),%xmm0
movss  %xmm0,0x4(%rbp)
movss  0x8(%rsp),%xmm1
divss  0x4(%rsp),%xmm1
movss  %xmm1,0x8(%rsp)
movss  0x8(%rbp),%xmm0
subss  %xmm1,%xmm0
call   1030 <fabs@plt>
ucomisd 0xa04(%rip),%xmm0
seta   %r12b
movss  0x8(%rsp),%xmm0
movss  %xmm0,0x8(%rbp)
movss  0x10(%rsp),%xmm1
divss  0x4(%rsp),%xmm1
movss  %xmm1,0x10(%rsp)
movss  0xc(%rbp),%xmm0
subss  %xmm1,%xmm0
call   1030 <fabs@plt>
ucomisd 0x9cd(%rip),%xmm0
seta   %al
or     %r12b,%al
or     %r15b,%bl
or     %al,%bl
movss  0x10(%rsp),%xmm0
movss  %xmm0,0xc(%rbp)
cmp    $0x1,%bl
jne    167a <getOrientation+0x55a>
movaps %xmm0,%xmm6
lea    0x1(%r14),%eax
cmp    $0x63,%r14d
mov    %eax,%r14d
jb     1340 <getOrientation+0x220>
add    $0x60,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define void @getOrientation([3 x float]* nocapture %0, [3 x float]* nocapture %1, float* nocapture %2, [3 x float]* nocapture %3, float %4) {
%6 = getelementptr inbounds [3 x float], [3 x float]* %0, i64 0, i64 0
%7 = getelementptr inbounds [3 x float], [3 x float]* %3, i64 0, i64 0
%8 = load float, float* %6
%9 = getelementptr inbounds [3 x float], [3 x float]* %1, i64 0, i64 0
%10 = load float, float* %9
%11 = load float, float* %7
%12 = tail call float @llvm.fmuladd.f32(float %8, float %10, float %11)
store float %12, float* %7
%13 = getelementptr inbounds [3 x float], [3 x float]* %0, i64 1, i64 0
%14 = load float, float* %13
%15 = getelementptr inbounds [3 x float], [3 x float]* %1, i64 1, i64 0
%16 = load float, float* %15
%17 = tail call float @llvm.fmuladd.f32(float %14, float %16, float %12)
store float %17, float* %7
%18 = getelementptr inbounds [3 x float], [3 x float]* %3, i64 0, i64 1
%19 = load float, float* %6
%20 = getelementptr inbounds [3 x float], [3 x float]* %1, i64 0, i64 1
%21 = load float, float* %20
%22 = load float, float* %18
%23 = tail call float @llvm.fmuladd.f32(float %19, float %21, float %22)
store float %23, float* %18
%24 = load float, float* %13
%25 = getelementptr inbounds [3 x float], [3 x float]* %1, i64 1, i64 1
%26 = load float, float* %25
%27 = tail call float @llvm.fmuladd.f32(float %24, float %26, float %23)
store float %27, float* %18
%28 = getelementptr inbounds [3 x float], [3 x float]* %3, i64 0, i64 2
%29 = load float, float* %6
%30 = getelementptr inbounds [3 x float], [3 x float]* %1, i64 0, i64 2
%31 = load float, float* %30
%32 = load float, float* %28
%33 = tail call float @llvm.fmuladd.f32(float %29, float %31, float %32)
store float %33, float* %28
%34 = load float, float* %13
%35 = getelementptr inbounds [3 x float], [3 x float]* %1, i64 1, i64 2
%36 = load float, float* %35
%37 = tail call float @llvm.fmuladd.f32(float %34, float %36, float %33)
store float %37, float* %28
%38 = getelementptr inbounds [3 x float], [3 x float]* %0, i64 0, i64 1
%39 = getelementptr inbounds [3 x float], [3 x float]* %3, i64 1, i64 0
%40 = load float, float* %38
%41 = load float, float* %9
%42 = load float, float* %39
%43 = tail call float @llvm.fmuladd.f32(float %40, float %41, float %42)
store float %43, float* %39
%44 = getelementptr inbounds [3 x float], [3 x float]* %0, i64 1, i64 1
%45 = load float, float* %44
%46 = load float, float* %15
%47 = tail call float @llvm.fmuladd.f32(float %45, float %46, float %43)
store float %47, float* %39
%48 = getelementptr inbounds [3 x float], [3 x float]* %3, i64 1, i64 1
%49 = load float, float* %38
%50 = load float, float* %20
%51 = load float, float* %48
%52 = tail call float @llvm.fmuladd.f32(float %49, float %50, float %51)
store float %52, float* %48
%53 = load float, float* %44
%54 = load float, float* %25
%55 = tail call float @llvm.fmuladd.f32(float %53, float %54, float %52)
store float %55, float* %48
%56 = getelementptr inbounds [3 x float], [3 x float]* %3, i64 1, i64 2
%57 = load float, float* %38
%58 = load float, float* %30
%59 = load float, float* %56
%60 = tail call float @llvm.fmuladd.f32(float %57, float %58, float %59)
store float %60, float* %56
%61 = load float, float* %44
%62 = load float, float* %35
%63 = tail call float @llvm.fmuladd.f32(float %61, float %62, float %60)
store float %63, float* %56
%64 = getelementptr inbounds [3 x float], [3 x float]* %0, i64 0, i64 2
%65 = getelementptr inbounds [3 x float], [3 x float]* %3, i64 2, i64 0
%66 = load float, float* %64
%67 = load float, float* %9
%68 = load float, float* %65
%69 = tail call float @llvm.fmuladd.f32(float %66, float %67, float %68)
store float %69, float* %65
%70 = getelementptr inbounds [3 x float], [3 x float]* %0, i64 1, i64 2
%71 = load float, float* %70
%72 = load float, float* %15
%73 = tail call float @llvm.fmuladd.f32(float %71, float %72, float %69)
store float %73, float* %65
%74 = getelementptr inbounds [3 x float], [3 x float]* %3, i64 2, i64 1
%75 = load float, float* %64
%76 = load float, float* %20
%77 = load float, float* %74
%78 = tail call float @llvm.fmuladd.f32(float %75, float %76, float %77)
store float %78, float* %74
%79 = load float, float* %70
%80 = load float, float* %25
%81 = tail call float @llvm.fmuladd.f32(float %79, float %80, float %78)
store float %81, float* %74
%82 = getelementptr inbounds [3 x float], [3 x float]* %3, i64 2, i64 2
%83 = load float, float* %64
%84 = load float, float* %30
%85 = load float, float* %82
%86 = tail call float @llvm.fmuladd.f32(float %83, float %84, float %85)
store float %86, float* %82
%87 = load float, float* %70
%88 = load float, float* %35
%89 = tail call float @llvm.fmuladd.f32(float %87, float %88, float %86)
store float %89, float* %82
%90 = fadd float %17, %55
%91 = fadd float %90, %89
%92 = fadd float %91, %4
%93 = fsub float %63, %81
%94 = fsub float %73, %37
%95 = fsub float %27, %47
%96 = fsub float %17, %55
%97 = fsub float %96, %89
%98 = fadd float %97, %4
%99 = fadd float %27, %47
%100 = fadd float %73, %37
%101 = fsub float %55, %17
%102 = fsub float %101, %89
%103 = fadd float %102, %4
%104 = fadd float %63, %81
%105 = fneg float %17
%106 = fsub float %105, %55
%107 = fadd float %106, %89
%108 = fadd float %107, %4
%109 = getelementptr inbounds float, float* %2, i64 3
%110 = load float, float* %109
%111 = getelementptr inbounds float, float* %2, i64 1
%112 = getelementptr inbounds float, float* %2, i64 2
br label %113
113: ; preds = %5, %113
%114 = phi float [ %110, %5 ], [ %174, %113 ]
%115 = phi i32 [ 0, %5 ], [ %182, %113 ]
%116 = load float, float* %2
%117 = tail call float @llvm.fmuladd.f32(float %92, float %116, float 0.000000e+00)
%118 = load float, float* %111
%119 = tail call float @llvm.fmuladd.f32(float %93, float %118, float %117)
%120 = load float, float* %112
%121 = tail call float @llvm.fmuladd.f32(float %94, float %120, float %119)
%122 = tail call float @llvm.fmuladd.f32(float %95, float %114, float %121)
%123 = tail call float @llvm.fmuladd.f32(float %93, float %116, float 0.000000e+00)
%124 = tail call float @llvm.fmuladd.f32(float %98, float %118, float %123)
%125 = tail call float @llvm.fmuladd.f32(float %99, float %120, float %124)
%126 = tail call float @llvm.fmuladd.f32(float %100, float %114, float %125)
%127 = tail call float @llvm.fmuladd.f32(float %94, float %116, float 0.000000e+00)
%128 = tail call float @llvm.fmuladd.f32(float %99, float %118, float %127)
%129 = tail call float @llvm.fmuladd.f32(float %103, float %120, float %128)
%130 = tail call float @llvm.fmuladd.f32(float %104, float %114, float %129)
%131 = tail call float @llvm.fmuladd.f32(float %95, float %116, float 0.000000e+00)
%132 = tail call float @llvm.fmuladd.f32(float %100, float %118, float %131)
%133 = tail call float @llvm.fmuladd.f32(float %104, float %120, float %132)
%134 = tail call float @llvm.fmuladd.f32(float %108, float %114, float %133)
%135 = tail call float @llvm.fmuladd.f32(float %92, float %122, float 0.000000e+00)
%136 = tail call float @llvm.fmuladd.f32(float %93, float %126, float %135)
%137 = tail call float @llvm.fmuladd.f32(float %94, float %130, float %136)
%138 = tail call float @llvm.fmuladd.f32(float %95, float %134, float %137)
%139 = tail call float @llvm.fmuladd.f32(float %138, float %138, float 0.000000e+00)
%140 = tail call float @llvm.fmuladd.f32(float %93, float %122, float 0.000000e+00)
%141 = tail call float @llvm.fmuladd.f32(float %98, float %126, float %140)
%142 = tail call float @llvm.fmuladd.f32(float %99, float %130, float %141)
%143 = tail call float @llvm.fmuladd.f32(float %100, float %134, float %142)
%144 = tail call float @llvm.fmuladd.f32(float %143, float %143, float %139)
%145 = tail call float @llvm.fmuladd.f32(float %94, float %122, float 0.000000e+00)
%146 = tail call float @llvm.fmuladd.f32(float %99, float %126, float %145)
%147 = tail call float @llvm.fmuladd.f32(float %103, float %130, float %146)
%148 = tail call float @llvm.fmuladd.f32(float %104, float %134, float %147)
%149 = tail call float @llvm.fmuladd.f32(float %148, float %148, float %144)
%150 = tail call float @llvm.fmuladd.f32(float %95, float %122, float 0.000000e+00)
%151 = tail call float @llvm.fmuladd.f32(float %100, float %126, float %150)
%152 = tail call float @llvm.fmuladd.f32(float %104, float %130, float %151)
%153 = tail call float @llvm.fmuladd.f32(float %108, float %134, float %152)
%154 = tail call float @llvm.fmuladd.f32(float %153, float %153, float %149)
%155 = fcmp oeq float %154, 0.000000e+00
%156 = select i1 %155, float 1.000000e+00, float %138
%157 = select i1 %155, float 1.000000e+00, float %154
%158 = tail call float @sqrt(float %157)
%159 = fdiv float %156, %158
%160 = load float, float* %2
%161 = fsub float %160, %159
%162 = tail call double @fabs(float %161)
%163 = fcmp ogt double %162, 5.000000e-03
store float %159, float* %2
%164 = fdiv float %143, %158
%165 = load float, float* %111
%166 = fsub float %165, %164
%167 = tail call double @fabs(float %166)
%168 = fcmp ogt double %167, 5.000000e-03
store float %164, float* %111
%169 = fdiv float %148, %158
%170 = load float, float* %112
%171 = fsub float %170, %169
%172 = tail call double @fabs(float %171)
%173 = fcmp ogt double %172, 5.000000e-03
store float %169, float* %112
%174 = fdiv float %153, %158
%175 = load float, float* %109
%176 = fsub float %175, %174
%177 = tail call double @fabs(float %176)
%178 = fcmp ogt double %177, 5.000000e-03
%179 = select i1 %178, i1 true, i1 %173
%180 = select i1 %179, i1 true, i1 %168
%181 = select i1 %180, i1 true, i1 %163
store float %174, float* %109
%182 = add nuw nsw i32 %115, 1
%183 = icmp ult i32 %115, 99
%184 = select i1 %181, i1 %183, i1 false
br i1 %184, label %113, label %185
185: ; preds = %113
ret void
}