#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 */
scalar_t__ cos(float);
scalar_t__ sin(float);
scalar_t__ sqrt(float);
float *Rotate16fv(float *M, float DegAng, const float Axis[3]) {
  float RadAng = DegAng * 0.0174532f;
  float ca = (float)cos(RadAng), sa = (float)sin(RadAng);
  if (Axis[0] == 1 && Axis[1] == 0 && Axis[2] == 0) {
    M[0] = 1;
    M[4] = 0;
    M[8] = 0;
    M[12] = 0;
    M[1] = 0;
    M[5] = ca;
    M[9] = -sa;
    M[13] = 0;
    M[2] = 0;
    M[6] = sa;
    M[10] = ca;
    M[14] = 0;
    M[3] = 0;
    M[7] = 0;
    M[11] = 0;
    M[15] = 1;
  }
  if (Axis[0] == 0 && Axis[1] == 1 && Axis[2] == 0) {
    M[0] = ca;
    M[4] = 0;
    M[8] = sa;
    M[12] = 0;
    M[1] = 0;
    M[5] = 1;
    M[9] = 0;
    M[13] = 0;
    M[2] = -sa;
    M[6] = 0;
    M[10] = ca;
    M[14] = 0;
    M[3] = 0;
    M[7] = 0;
    M[11] = 0;
    M[15] = 1;
  }
  if (Axis[0] == 0 && Axis[1] == 0 && Axis[2] == 1) {
    M[0] = ca;
    M[4] = -sa;
    M[8] = 0;
    M[12] = 0;
    M[1] = sa;
    M[5] = ca;
    M[9] = 0;
    M[13] = 0;
    M[2] = 0;
    M[6] = 0;
    M[10] = 1;
    M[14] = 0;
    M[3] = 0;
    M[7] = 0;
    M[11] = 0;
    M[15] = 1;
  } else {
    float l = Axis[0] * Axis[0] + Axis[1] * Axis[1] + Axis[2] * Axis[2];
    float x, y, z;
    x = Axis[0], y = Axis[1], z = Axis[2];
    if (l > 1.0001f || (l < 0.9999f && l != 0)) {
      l = 1.0f / (float)sqrt(l);
      x *= l;
      y *= l;
      z *= l;
    }
    float x2 = x * x, y2 = y * y, z2 = z * z;
    M[0] = x2 + ca * (1 - x2);
    M[4] = (x * y) + ca * (-x * y) + sa * (-z);
    M[8] = (x * z) + ca * (-x * z) + sa * y;
    M[1] = (x * y) + ca * (-x * y) + sa * z;
    M[5] = y2 + ca * (1 - y2);
    M[9] = (y * z) + ca * (-y * z) + sa * (-x);
    M[2] = (x * z) + ca * (-x * z) + sa * (-y);
    M[6] = (y * z) + ca * (-y * z) + sa * x;
    M[10] = z2 + ca * (1 - z2);
    M[12] = M[13] = M[14] = M[3] = M[7] = M[11] = 0;
    M[15] = 1;
  }
  return (M);
}


x86 assembly (clang, -O0):
<Rotate16fv>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %rdi,-0x8(%rbp)
movss  %xmm0,-0xc(%rbp)
mov    %rsi,-0x18(%rbp)
movss  0xeb7(%rip),%xmm0
mulss  -0xc(%rbp),%xmm0
movss  %xmm0,-0x1c(%rbp)
movss  -0x1c(%rbp),%xmm0
call   1040 <cos@plt>
cvtsi2ss %rax,%xmm0
movss  %xmm0,-0x20(%rbp)
movss  -0x1c(%rbp),%xmm0
call   1030 <sin@plt>
cvtsi2ss %rax,%xmm0
movss  %xmm0,-0x24(%rbp)
mov    -0x18(%rbp),%rax
movss  (%rax),%xmm0
movss  0xe71(%rip),%xmm1
ucomiss %xmm1,%xmm0
jne    12b2 <Rotate16fv+0x182>
jp     12b2 <Rotate16fv+0x182>
mov    -0x18(%rbp),%rax
movss  0x4(%rax),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jne    12b2 <Rotate16fv+0x182>
jp     12b2 <Rotate16fv+0x182>
mov    -0x18(%rbp),%rax
movss  0x8(%rax),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jne    12b2 <Rotate16fv+0x182>
jp     12b2 <Rotate16fv+0x182>
mov    -0x8(%rbp),%rax
movss  0xe20(%rip),%xmm0
movss  %xmm0,(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x10(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x20(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x30(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x4(%rax)
movss  -0x20(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x14(%rax)
movss  -0x24(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x24(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x34(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x8(%rax)
movss  -0x24(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x18(%rax)
movss  -0x20(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x28(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x38(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0xc(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x1c(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x2c(%rax)
mov    -0x8(%rbp),%rax
movss  0xd53(%rip),%xmm0
movss  %xmm0,0x3c(%rax)
mov    -0x18(%rbp),%rax
movss  (%rax),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jne    13e5 <Rotate16fv+0x2b5>
jp     13e5 <Rotate16fv+0x2b5>
mov    -0x18(%rbp),%rax
movss  0x4(%rax),%xmm0
movss  0xd23(%rip),%xmm1
ucomiss %xmm1,%xmm0
jne    13e5 <Rotate16fv+0x2b5>
jp     13e5 <Rotate16fv+0x2b5>
mov    -0x18(%rbp),%rax
movss  0x8(%rax),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jne    13e5 <Rotate16fv+0x2b5>
jp     13e5 <Rotate16fv+0x2b5>
movss  -0x20(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x10(%rax)
movss  -0x24(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x20(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x30(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x4(%rax)
mov    -0x8(%rbp),%rax
movss  0xcae(%rip),%xmm0
movss  %xmm0,0x14(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x24(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x34(%rax)
movss  -0x24(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x8(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x18(%rax)
movss  -0x20(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x28(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x38(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0xc(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x1c(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x2c(%rax)
mov    -0x8(%rbp),%rax
movss  0xc20(%rip),%xmm0
movss  %xmm0,0x3c(%rax)
mov    -0x18(%rbp),%rax
movss  (%rax),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jne    151d <Rotate16fv+0x3ed>
jp     151d <Rotate16fv+0x3ed>
mov    -0x18(%rbp),%rax
movss  0x4(%rax),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jne    151d <Rotate16fv+0x3ed>
jp     151d <Rotate16fv+0x3ed>
mov    -0x18(%rbp),%rax
movss  0x8(%rax),%xmm0
movss  0xbd5(%rip),%xmm1
ucomiss %xmm1,%xmm0
jne    151d <Rotate16fv+0x3ed>
jp     151d <Rotate16fv+0x3ed>
movss  -0x20(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x24(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x10(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x20(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x30(%rax)
movss  -0x24(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x4(%rax)
movss  -0x20(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x14(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x24(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x34(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x8(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x18(%rax)
mov    -0x8(%rbp),%rax
movss  0xb2e(%rip),%xmm0
movss  %xmm0,0x28(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x38(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0xc(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x1c(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x2c(%rax)
mov    -0x8(%rbp),%rax
movss  0xaed(%rip),%xmm0
movss  %xmm0,0x3c(%rax)
jmp    1912 <Rotate16fv+0x7e2>
mov    -0x18(%rbp),%rax
movss  (%rax),%xmm1
mov    -0x18(%rbp),%rax
movss  (%rax),%xmm2
mov    -0x18(%rbp),%rax
movss  0x4(%rax),%xmm0
mov    -0x18(%rbp),%rax
mulss  0x4(%rax),%xmm0
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
mov    -0x18(%rbp),%rax
movss  0x8(%rax),%xmm0
mov    -0x18(%rbp),%rax
movss  0x8(%rax),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x28(%rbp)
mov    -0x18(%rbp),%rax
movss  (%rax),%xmm0
movss  %xmm0,-0x2c(%rbp)
mov    -0x18(%rbp),%rax
movss  0x4(%rax),%xmm0
movss  %xmm0,-0x30(%rbp)
mov    -0x18(%rbp),%rax
movss  0x8(%rax),%xmm0
movss  %xmm0,-0x34(%rbp)
movss  -0x28(%rbp),%xmm0
movss  0xa6c(%rip),%xmm1
ucomiss %xmm1,%xmm0
ja     15d3 <Rotate16fv+0x4a3>
movss  0xa5f(%rip),%xmm0
ucomiss -0x28(%rbp),%xmm0
jbe    1620 <Rotate16fv+0x4f0>
movss  -0x28(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jne    15d3 <Rotate16fv+0x4a3>
jp     15d3 <Rotate16fv+0x4a3>
jmp    1620 <Rotate16fv+0x4f0>
movss  -0x28(%rbp),%xmm0
call   1050 <sqrt@plt>
cvtsi2ss %rax,%xmm1
movss  0xa16(%rip),%xmm0
divss  %xmm1,%xmm0
movss  %xmm0,-0x28(%rbp)
movss  -0x28(%rbp),%xmm0
mulss  -0x2c(%rbp),%xmm0
movss  %xmm0,-0x2c(%rbp)
movss  -0x28(%rbp),%xmm0
mulss  -0x30(%rbp),%xmm0
movss  %xmm0,-0x30(%rbp)
movss  -0x28(%rbp),%xmm0
mulss  -0x34(%rbp),%xmm0
movss  %xmm0,-0x34(%rbp)
movss  -0x2c(%rbp),%xmm0
mulss  -0x2c(%rbp),%xmm0
movss  %xmm0,-0x38(%rbp)
movss  -0x30(%rbp),%xmm0
mulss  -0x30(%rbp),%xmm0
movss  %xmm0,-0x3c(%rbp)
movss  -0x34(%rbp),%xmm0
mulss  -0x34(%rbp),%xmm0
movss  %xmm0,-0x40(%rbp)
movss  -0x38(%rbp),%xmm1
movss  -0x20(%rbp),%xmm0
movss  0x9a1(%rip),%xmm2
subss  -0x38(%rbp),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x2c(%rbp),%xmm1
movss  -0x30(%rbp),%xmm2
movss  -0x20(%rbp),%xmm0
movss  -0x2c(%rbp),%xmm3
movd   %xmm3,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm3
mulss  -0x30(%rbp),%xmm3
mulss  %xmm3,%xmm0
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
movss  -0x24(%rbp),%xmm0
movss  -0x34(%rbp),%xmm2
movd   %xmm2,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x10(%rax)
movss  -0x2c(%rbp),%xmm1
movss  -0x34(%rbp),%xmm2
movss  -0x20(%rbp),%xmm0
movss  -0x2c(%rbp),%xmm3
movd   %xmm3,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm3
mulss  -0x34(%rbp),%xmm3
mulss  %xmm3,%xmm0
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
movss  -0x24(%rbp),%xmm0
movss  -0x30(%rbp),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x20(%rax)
movss  -0x2c(%rbp),%xmm1
movss  -0x30(%rbp),%xmm2
movss  -0x20(%rbp),%xmm0
movss  -0x2c(%rbp),%xmm3
movd   %xmm3,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm3
mulss  -0x30(%rbp),%xmm3
mulss  %xmm3,%xmm0
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
movss  -0x24(%rbp),%xmm0
movss  -0x34(%rbp),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x4(%rax)
movss  -0x3c(%rbp),%xmm1
movss  -0x20(%rbp),%xmm0
movss  0x886(%rip),%xmm2
subss  -0x3c(%rbp),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x14(%rax)
movss  -0x30(%rbp),%xmm1
movss  -0x34(%rbp),%xmm2
movss  -0x20(%rbp),%xmm0
movss  -0x30(%rbp),%xmm3
movd   %xmm3,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm3
mulss  -0x34(%rbp),%xmm3
mulss  %xmm3,%xmm0
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
movss  -0x24(%rbp),%xmm0
movss  -0x2c(%rbp),%xmm2
movd   %xmm2,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x24(%rax)
movss  -0x2c(%rbp),%xmm1
movss  -0x34(%rbp),%xmm2
movss  -0x20(%rbp),%xmm0
movss  -0x2c(%rbp),%xmm3
movd   %xmm3,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm3
mulss  -0x34(%rbp),%xmm3
mulss  %xmm3,%xmm0
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
movss  -0x24(%rbp),%xmm0
movss  -0x30(%rbp),%xmm2
movd   %xmm2,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x8(%rax)
movss  -0x30(%rbp),%xmm1
movss  -0x34(%rbp),%xmm2
movss  -0x20(%rbp),%xmm0
movss  -0x30(%rbp),%xmm3
movd   %xmm3,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm3
mulss  -0x34(%rbp),%xmm3
mulss  %xmm3,%xmm0
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
movss  -0x24(%rbp),%xmm0
movss  -0x2c(%rbp),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x18(%rax)
movss  -0x40(%rbp),%xmm1
movss  -0x20(%rbp),%xmm0
movss  0x75d(%rip),%xmm2
subss  -0x40(%rbp),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x28(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x2c(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x1c(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0xc(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x38(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x34(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x30(%rax)
mov    -0x8(%rbp),%rax
movss  0x6f3(%rip),%xmm0
movss  %xmm0,0x3c(%rax)
mov    -0x8(%rbp),%rax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<Rotate16fv>:
push   %r14
push   %rbx
sub    $0x28,%rsp
mov    %rsi,%r14
mov    %rdi,%rbx
mulss  0xebb(%rip),%xmm0
movss  %xmm0,0x10(%rsp)
call   1040 <cos@plt>
xorps  %xmm0,%xmm0
cvtsi2ss %rax,%xmm0
movss  %xmm0,(%rsp)
movss  0x10(%rsp),%xmm0
call   1030 <sin@plt>
cvtsi2ss %rax,%xmm9
movss  (%r14),%xmm10
ucomiss 0xe8a(%rip),%xmm10
jne    120e <Rotate16fv+0xde>
jp     120e <Rotate16fv+0xde>
movss  0x4(%r14),%xmm1
movss  0xe6f(%rip),%xmm10
xorps  %xmm0,%xmm0
ucomiss %xmm0,%xmm1
jne    1306 <Rotate16fv+0x1d6>
jp     1306 <Rotate16fv+0x1d6>
movss  0x8(%r14),%xmm1
ucomiss %xmm0,%xmm1
jne    1306 <Rotate16fv+0x1d6>
jp     1306 <Rotate16fv+0x1d6>
movl   $0x0,0x10(%rbx)
movss  (%rsp),%xmm1
movss  %xmm1,0x14(%rbx)
movaps 0xe3c(%rip),%xmm0
xorps  %xmm9,%xmm0
movss  %xmm0,0x24(%rbx)
movss  %xmm9,0x18(%rbx)
movss  %xmm1,0x28(%rbx)
movss  0xe14(%rip),%xmm0
movups %xmm0,(%rbx)
movq   $0x0,0x1c(%rbx)
xorps  %xmm0,%xmm0
movups %xmm0,0x2c(%rbx)
movl   $0x3f800000,0x3c(%rbx)
movss  (%r14),%xmm10
xorps  %xmm0,%xmm0
ucomiss %xmm0,%xmm10
jne    1291 <Rotate16fv+0x161>
jp     1291 <Rotate16fv+0x161>
movss  0x4(%r14),%xmm1
ucomiss 0xdde(%rip),%xmm1
jne    1291 <Rotate16fv+0x161>
jp     1291 <Rotate16fv+0x161>
movss  0x8(%r14),%xmm1
xorps  %xmm2,%xmm2
ucomiss %xmm2,%xmm1
jne    1291 <Rotate16fv+0x161>
jp     1291 <Rotate16fv+0x161>
movss  (%rsp),%xmm2
movss  %xmm2,(%rbx)
movss  %xmm9,0x20(%rbx)
movl   $0x0,0x4(%rbx)
movl   $0x0,0x24(%rbx)
movaps 0xdb2(%rip),%xmm1
xorps  %xmm9,%xmm1
movss  %xmm1,0x8(%rbx)
movss  %xmm2,0x28(%rbx)
movaps 0xdad(%rip),%xmm1
movups %xmm1,0xc(%rbx)
movl   $0x0,0x1c(%rbx)
xorps  %xmm1,%xmm1
movups %xmm1,0x2c(%rbx)
movl   $0x3f800000,0x3c(%rbx)
movss  (%r14),%xmm10
ucomiss %xmm0,%xmm10
jne    1306 <Rotate16fv+0x1d6>
jp     1306 <Rotate16fv+0x1d6>
movss  0x4(%r14),%xmm11
xorps  %xmm0,%xmm0
ucomiss %xmm0,%xmm11
jne    130c <Rotate16fv+0x1dc>
jp     130c <Rotate16fv+0x1dc>
movss  0x8(%r14),%xmm0
ucomiss 0xd4d(%rip),%xmm0
jne    130c <Rotate16fv+0x1dc>
jp     130c <Rotate16fv+0x1dc>
movss  (%rsp),%xmm1
movss  %xmm1,(%rbx)
movaps 0xd45(%rip),%xmm0
xorps  %xmm9,%xmm0
movss  %xmm0,0x10(%rbx)
movss  %xmm9,0x4(%rbx)
movss  %xmm1,0x14(%rbx)
movq   $0x0,0x8(%rbx)
movl   $0x0,0x38(%rbx)
xorps  %xmm0,%xmm0
movups %xmm0,0x18(%rbx)
movss  0xd07(%rip),%xmm0
movups %xmm0,0x28(%rbx)
jmp    14be <Rotate16fv+0x38e>
movss  0x4(%r14),%xmm11
movaps %xmm11,%xmm1
mulss  %xmm11,%xmm1
movaps %xmm10,%xmm2
mulss  %xmm10,%xmm2
addss  %xmm1,%xmm2
movss  0x8(%r14),%xmm12
movaps %xmm12,%xmm0
mulss  %xmm12,%xmm0
addss  %xmm2,%xmm0
ucomiss 0xccc(%rip),%xmm0
ja     1355 <Rotate16fv+0x225>
movss  0xcc6(%rip),%xmm2
ucomiss %xmm0,%xmm2
jbe    13bc <Rotate16fv+0x28c>
xorps  %xmm2,%xmm2
ucomiss %xmm2,%xmm0
jne    1355 <Rotate16fv+0x225>
jnp    13bc <Rotate16fv+0x28c>
movaps %xmm9,0x10(%rsp)
movss  %xmm10,0xc(%rsp)
movss  %xmm11,0x8(%rsp)
movss  %xmm12,0x4(%rsp)
call   1050 <sqrt@plt>
movss  0x4(%rsp),%xmm12
movss  0x8(%rsp),%xmm11
movss  0xc(%rsp),%xmm10
movaps 0x10(%rsp),%xmm9
xorps  %xmm0,%xmm0
cvtsi2ss %rax,%xmm0
movss  0xc64(%rip),%xmm1
divss  %xmm0,%xmm1
mulss  %xmm1,%xmm10
mulss  %xmm1,%xmm11
mulss  %xmm1,%xmm12
movaps %xmm11,%xmm1
mulss  %xmm11,%xmm1
movaps %xmm10,%xmm3
mulss  %xmm10,%xmm3
movaps %xmm12,%xmm8
mulss  %xmm12,%xmm8
movss  0xc2e(%rip),%xmm2
movaps %xmm2,%xmm4
subss  %xmm3,%xmm4
movss  (%rsp),%xmm0
mulss  %xmm0,%xmm4
addss  %xmm3,%xmm4
movss  %xmm4,(%rbx)
movaps %xmm10,%xmm4
mulss  %xmm11,%xmm4
movaps %xmm4,%xmm3
mulss  %xmm0,%xmm3
subss  %xmm3,%xmm4
movaps %xmm9,%xmm5
mulss  %xmm12,%xmm5
movaps %xmm4,%xmm3
subss  %xmm5,%xmm3
movss  %xmm3,0x10(%rbx)
movaps %xmm10,%xmm3
mulss  %xmm12,%xmm3
movaps %xmm3,%xmm6
mulss  %xmm0,%xmm6
subss  %xmm6,%xmm3
movaps %xmm9,%xmm6
mulss  %xmm11,%xmm6
movaps %xmm6,%xmm7
addss  %xmm3,%xmm7
movss  %xmm7,0x20(%rbx)
addss  %xmm4,%xmm5
movss  %xmm5,0x4(%rbx)
movaps %xmm2,%xmm4
subss  %xmm1,%xmm4
mulss  %xmm0,%xmm4
addss  %xmm1,%xmm4
movss  %xmm4,0x14(%rbx)
mulss  %xmm12,%xmm11
movaps %xmm11,%xmm1
mulss  %xmm0,%xmm1
subss  %xmm1,%xmm11
mulss  %xmm10,%xmm9
movaps %xmm11,%xmm1
subss  %xmm9,%xmm1
movss  %xmm1,0x24(%rbx)
subss  %xmm6,%xmm3
movss  %xmm3,0x8(%rbx)
addss  %xmm11,%xmm9
movss  %xmm9,0x18(%rbx)
subss  %xmm8,%xmm2
mulss  %xmm0,%xmm2
addss  %xmm8,%xmm2
movss  %xmm2,0x28(%rbx)
movl   $0x0,0x1c(%rbx)
movl   $0x0,0xc(%rbx)
xorps  %xmm0,%xmm0
movups %xmm0,0x2c(%rbx)
movl   $0x3f800000,0x3c(%rbx)
mov    %rbx,%rax
add    $0x28,%rsp
pop    %rbx
pop    %r14
ret

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

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