#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 */
int /*<<< orphan*/ apply_rotation(float, float, float *, float *, float);
float atan2(double, double);
double exp(float);
int floor(float);
double hypot(double, double);
float modulus(float, int);
void sift_extract_feature_vector(float x_key, float y_key, float sigma_key,
                                 float theta_key, const float *imX,
                                 const float *imY, int w, int h, int Nhist,
                                 int Nbins, float lambda_descr, float *descr) {
  for (int i = 0; i < Nhist * Nhist * Nbins; i++) {
    descr[i] = 0.0;
  }
  float R = (1 + 1 / (float)Nhist) * lambda_descr * sigma_key;
  float Rp = 1.41421356237309504880 * R;
  int siMin =
      ((0) < ((int)(x_key - Rp + 0.5)) ? ((int)(x_key - Rp + 0.5)) : (0));
  int sjMin =
      ((0) < ((int)(y_key - Rp + 0.5)) ? ((int)(y_key - Rp + 0.5)) : (0));
  int siMax = (((int)(x_key + Rp + 0.5)) < (h - 1) ? ((int)(x_key + Rp + 0.5))
                                                   : (h - 1));
  int sjMax = (((int)(y_key + Rp + 0.5)) < (w - 1) ? ((int)(y_key + Rp + 0.5))
                                                   : (w - 1));
  for (int si = siMin; si < siMax; si++) {
    for (int sj = sjMin; sj < sjMax; sj++) {
      float X = si - x_key;
      float Y = sj - y_key;
      apply_rotation(X, Y, &X, &Y, -theta_key);
      if (((((X) < 0 ? -(X) : (X))) < (((Y) < 0 ? -(Y) : (Y)))
               ? (((Y) < 0 ? -(Y) : (Y)))
               : (((X) < 0 ? -(X) : (X)))) < R) {
        double dx = imX[si * w + sj];
        double dy = imY[si * w + sj];
        float ori = atan2(dy, dx) - theta_key;
        ori = modulus(ori, 2 * 3.14159265358979323846);
        double t = lambda_descr * sigma_key;
        double M = hypot(dx, dy) * exp(-(X * X + Y * Y) / (2 * t * t));
        float alpha =
            X / (2 * lambda_descr * sigma_key / Nhist) + (Nhist - 1.0) / 2.0;
        float beta =
            Y / (2 * lambda_descr * sigma_key / Nhist) + (Nhist - 1.0) / 2.0;
        float gamma = ori / (2 * 3.14159265358979323846) * Nbins;
        int i0 = floor(alpha);
        int j0 = floor(beta);
        for (int i = ((0) < (i0) ? (i0) : (0));
             i <= ((i0 + 1) < (Nhist - 1) ? (i0 + 1) : (Nhist - 1)); i++) {
          for (int j = ((0) < (j0) ? (j0) : (0));
               j <= ((j0 + 1) < (Nhist - 1) ? (j0 + 1) : (Nhist - 1)); j++) {
            int k;
            k = ((int)gamma + Nbins) % Nbins;
            descr[i * Nhist * Nbins + j * Nbins + k] +=
                (1. - (gamma - floor(gamma))) *
                (1.0 - (((float)i - alpha) < 0 ? -((float)i - alpha)
                                               : ((float)i - alpha))) *
                (1.0 - (((float)j - beta) < 0 ? -((float)j - beta)
                                              : ((float)j - beta))) *
                M;
            k = ((int)gamma + 1 + Nbins) % Nbins;
            descr[i * Nhist * Nbins + j * Nbins + k] +=
                (1.0 - (floor(gamma) + 1 - gamma)) *
                (1.0 - (((float)i - alpha) < 0 ? -((float)i - alpha)
                                               : ((float)i - alpha))) *
                (1.0 - (((float)j - beta) < 0 ? -((float)j - beta)
                                              : ((float)j - beta))) *
                M;
          }
        }
      }
    }
  }
}


x86 assembly (clang, -O0):
<sift_extract_feature_vector>:
push   %rbp
mov    %rsp,%rbp
sub    $0x130,%rsp
mov    0x10(%rbp),%rax
movss  %xmm0,-0x4(%rbp)
movss  %xmm1,-0x8(%rbp)
movss  %xmm2,-0xc(%rbp)
movss  %xmm3,-0x10(%rbp)
mov    %rdi,-0x18(%rbp)
mov    %rsi,-0x20(%rbp)
mov    %edx,-0x24(%rbp)
mov    %ecx,-0x28(%rbp)
mov    %r8d,-0x2c(%rbp)
mov    %r9d,-0x30(%rbp)
movss  %xmm4,-0x34(%rbp)
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
mov    -0x2c(%rbp),%ecx
imul   -0x2c(%rbp),%ecx
imul   -0x30(%rbp),%ecx
cmp    %ecx,%eax
jge    11d9 <sift_extract_feature_vector+0x79>
mov    0x10(%rbp),%rax
movslq -0x38(%rbp),%rcx
xorps  %xmm0,%xmm0
movss  %xmm0,(%rax,%rcx,4)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    11a5 <sift_extract_feature_vector+0x45>
cvtsi2ssl -0x2c(%rbp),%xmm0
movss  0xe42(%rip),%xmm1
divss  %xmm0,%xmm1
movss  0xe36(%rip),%xmm0
addss  %xmm1,%xmm0
mulss  -0x34(%rbp),%xmm0
mulss  -0xc(%rbp),%xmm0
movss  %xmm0,-0x3c(%rbp)
movss  -0x3c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xdf2(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x40(%rbp)
movss  -0x4(%rbp),%xmm0
subss  -0x40(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xdc7(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%ecx
xor    %eax,%eax
cmp    %ecx,%eax
jge    1274 <sift_extract_feature_vector+0x114>
movss  -0x4(%rbp),%xmm0
subss  -0x40(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd9f(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0xac(%rbp)
jmp    1281 <sift_extract_feature_vector+0x121>
xor    %eax,%eax
mov    %eax,-0xac(%rbp)
jmp    1281 <sift_extract_feature_vector+0x121>
mov    -0xac(%rbp),%eax
mov    %eax,-0x44(%rbp)
movss  -0x8(%rbp),%xmm0
subss  -0x40(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd60(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%ecx
xor    %eax,%eax
cmp    %ecx,%eax
jge    12db <sift_extract_feature_vector+0x17b>
movss  -0x8(%rbp),%xmm0
subss  -0x40(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd38(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0xb0(%rbp)
jmp    12e8 <sift_extract_feature_vector+0x188>
xor    %eax,%eax
mov    %eax,-0xb0(%rbp)
jmp    12e8 <sift_extract_feature_vector+0x188>
mov    -0xb0(%rbp),%eax
mov    %eax,-0x48(%rbp)
movss  -0x4(%rbp),%xmm0
addss  -0x40(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xcf9(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    -0x28(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    1346 <sift_extract_feature_vector+0x1e6>
movss  -0x4(%rbp),%xmm0
addss  -0x40(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xccd(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0xb4(%rbp)
jmp    1352 <sift_extract_feature_vector+0x1f2>
mov    -0x28(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0xb4(%rbp)
mov    -0xb4(%rbp),%eax
mov    %eax,-0x4c(%rbp)
movss  -0x8(%rbp),%xmm0
addss  -0x40(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xc8f(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    13b0 <sift_extract_feature_vector+0x250>
movss  -0x8(%rbp),%xmm0
addss  -0x40(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xc63(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0xb8(%rbp)
jmp    13bc <sift_extract_feature_vector+0x25c>
mov    -0x24(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0xb8(%rbp)
mov    -0xb8(%rbp),%eax
mov    %eax,-0x50(%rbp)
mov    -0x44(%rbp),%eax
mov    %eax,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x4c(%rbp),%eax
jge    1c30 <sift_extract_feature_vector+0xad0>
mov    -0x48(%rbp),%eax
mov    %eax,-0x58(%rbp)
mov    -0x58(%rbp),%eax
cmp    -0x50(%rbp),%eax
jge    1c1d <sift_extract_feature_vector+0xabd>
cvtsi2ssl -0x54(%rbp),%xmm0
subss  -0x4(%rbp),%xmm0
movss  %xmm0,-0x5c(%rbp)
cvtsi2ssl -0x58(%rbp),%xmm0
subss  -0x8(%rbp),%xmm0
movss  %xmm0,-0x60(%rbp)
movss  -0x5c(%rbp),%xmm0
movss  -0x60(%rbp),%xmm1
movss  -0x10(%rbp),%xmm2
movd   %xmm2,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm2
lea    -0x5c(%rbp),%rdi
lea    -0x60(%rbp),%rsi
call   1040 <apply_rotation@plt>
xorps  %xmm0,%xmm0
ucomiss -0x5c(%rbp),%xmm0
jbe    145c <sift_extract_feature_vector+0x2fc>
movss  -0x5c(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  %xmm0,-0xbc(%rbp)
ff
jmp    1469 <sift_extract_feature_vector+0x309>
movss  -0x5c(%rbp),%xmm0
movss  %xmm0,-0xbc(%rbp)
ff
movss  -0xbc(%rbp),%xmm0
ff
movss  %xmm0,-0xc0(%rbp)
ff
xorps  %xmm0,%xmm0
ucomiss -0x60(%rbp),%xmm0
jbe    14a5 <sift_extract_feature_vector+0x345>
movss  -0x60(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  %xmm0,-0xc4(%rbp)
ff
jmp    14b2 <sift_extract_feature_vector+0x352>
movss  -0x60(%rbp),%xmm0
movss  %xmm0,-0xc4(%rbp)
ff
movss  -0xc0(%rbp),%xmm1
ff
movss  -0xc4(%rbp),%xmm0
ff
ucomiss %xmm1,%xmm0
jbe    1519 <sift_extract_feature_vector+0x3b9>
xorps  %xmm0,%xmm0
ucomiss -0x60(%rbp),%xmm0
jbe    14f7 <sift_extract_feature_vector+0x397>
movss  -0x60(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  %xmm0,-0xc8(%rbp)
ff
jmp    1504 <sift_extract_feature_vector+0x3a4>
movss  -0x60(%rbp),%xmm0
movss  %xmm0,-0xc8(%rbp)
ff
movss  -0xc8(%rbp),%xmm0
ff
movss  %xmm0,-0xcc(%rbp)
ff
jmp    1562 <sift_extract_feature_vector+0x402>
xorps  %xmm0,%xmm0
ucomiss -0x5c(%rbp),%xmm0
jbe    1545 <sift_extract_feature_vector+0x3e5>
movss  -0x5c(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  %xmm0,-0xd0(%rbp)
ff
jmp    1552 <sift_extract_feature_vector+0x3f2>
movss  -0x5c(%rbp),%xmm0
movss  %xmm0,-0xd0(%rbp)
ff
movss  -0xd0(%rbp),%xmm0
ff
movss  %xmm0,-0xcc(%rbp)
ff
movss  -0xcc(%rbp),%xmm1
ff
movss  -0x3c(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    1c0a <sift_extract_feature_vector+0xaaa>
mov    -0x18(%rbp),%rax
mov    -0x54(%rbp),%ecx
imul   -0x24(%rbp),%ecx
add    -0x58(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x20(%rbp),%rax
mov    -0x54(%rbp),%ecx
imul   -0x24(%rbp),%ecx
add    -0x58(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm1
call   1030 <atan2@plt>
subss  -0x10(%rbp),%xmm0
movss  %xmm0,-0x74(%rbp)
movss  -0x74(%rbp),%xmm0
mov    $0x6,%edi
call   1050 <modulus@plt>
movss  %xmm0,-0x74(%rbp)
movss  -0x34(%rbp),%xmm0
mulss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x68(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm1
call   1060 <hypot@plt>
movsd  %xmm0,-0xd8(%rbp)
ff
movss  -0x5c(%rbp),%xmm0
movss  -0x5c(%rbp),%xmm2
movss  -0x60(%rbp),%xmm1
mulss  -0x60(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0x9d6(%rip),%xmm1
mulsd  -0x80(%rbp),%xmm1
mulsd  -0x80(%rbp),%xmm1
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
call   1070 <exp@plt>
movaps %xmm0,%xmm1
movsd  -0xd8(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movss  -0x5c(%rbp),%xmm0
movss  0x9af(%rip),%xmm1
mulss  -0x34(%rbp),%xmm1
mulss  -0xc(%rbp),%xmm1
cvtsi2ssl -0x2c(%rbp),%xmm2
divss  %xmm2,%xmm1
divss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm0
cvtsi2sdl -0x2c(%rbp),%xmm1
movsd  0x97b(%rip),%xmm2
subsd  %xmm2,%xmm1
movsd  0x967(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x8c(%rbp)
ff
movss  -0x60(%rbp),%xmm0
movss  0x95a(%rip),%xmm1
mulss  -0x34(%rbp),%xmm1
mulss  -0xc(%rbp),%xmm1
cvtsi2ssl -0x2c(%rbp),%xmm2
divss  %xmm2,%xmm1
divss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm0
cvtsi2sdl -0x2c(%rbp),%xmm1
movsd  0x926(%rip),%xmm2
subsd  %xmm2,%xmm1
movsd  0x912(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x90(%rbp)
ff
movss  -0x74(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0x8e5(%rip),%xmm1
divsd  %xmm1,%xmm0
cvtsi2sdl -0x30(%rbp),%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x94(%rbp)
ff
movss  -0x8c(%rbp),%xmm0
ff
call   1080 <floor@plt>
mov    %eax,-0x98(%rbp)
movss  -0x90(%rbp),%xmm0
ff
call   1080 <floor@plt>
mov    %eax,-0x9c(%rbp)
xor    %eax,%eax
cmp    -0x98(%rbp),%eax
jge    1789 <sift_extract_feature_vector+0x629>
mov    -0x98(%rbp),%eax
mov    %eax,-0xdc(%rbp)
jmp    1796 <sift_extract_feature_vector+0x636>
xor    %eax,%eax
mov    %eax,-0xdc(%rbp)
jmp    1796 <sift_extract_feature_vector+0x636>
mov    -0xdc(%rbp),%eax
mov    %eax,-0xa0(%rbp)
mov    -0xa0(%rbp),%eax
mov    %eax,-0xe0(%rbp)
mov    -0x98(%rbp),%eax
add    $0x1,%eax
mov    -0x2c(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    17d9 <sift_extract_feature_vector+0x679>
mov    -0x98(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xe4(%rbp)
jmp    17e5 <sift_extract_feature_vector+0x685>
mov    -0x2c(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0xe4(%rbp)
mov    -0xe0(%rbp),%eax
mov    -0xe4(%rbp),%ecx
cmp    %ecx,%eax
jg     1c05 <sift_extract_feature_vector+0xaa5>
xor    %eax,%eax
cmp    -0x9c(%rbp),%eax
jge    1818 <sift_extract_feature_vector+0x6b8>
mov    -0x9c(%rbp),%eax
mov    %eax,-0xe8(%rbp)
jmp    1825 <sift_extract_feature_vector+0x6c5>
xor    %eax,%eax
mov    %eax,-0xe8(%rbp)
jmp    1825 <sift_extract_feature_vector+0x6c5>
mov    -0xe8(%rbp),%eax
mov    %eax,-0xa4(%rbp)
mov    -0xa4(%rbp),%eax
mov    %eax,-0xec(%rbp)
mov    -0x9c(%rbp),%eax
add    $0x1,%eax
mov    -0x2c(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    1868 <sift_extract_feature_vector+0x708>
mov    -0x9c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xf0(%rbp)
jmp    1874 <sift_extract_feature_vector+0x714>
mov    -0x2c(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0xf0(%rbp)
mov    -0xec(%rbp),%eax
mov    -0xf0(%rbp),%ecx
cmp    %ecx,%eax
jg     1bec <sift_extract_feature_vector+0xa8c>
cvttss2si -0x94(%rbp),%eax
ff
add    -0x30(%rbp),%eax
cltd
idivl  -0x30(%rbp)
mov    %edx,-0xa8(%rbp)
movss  -0x94(%rbp),%xmm0
ff
movss  %xmm0,-0xfc(%rbp)
ff
movss  -0x94(%rbp),%xmm0
ff
call   1080 <floor@plt>
movss  -0xfc(%rbp),%xmm0
ff
cvtsi2ss %eax,%xmm1
subss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x74a(%rip),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
cvtsi2ssl -0xa0(%rbp),%xmm1
ff
subss  -0x8c(%rbp),%xmm1
ff
xorps  %xmm0,%xmm0
ucomiss %xmm1,%xmm0
jbe    1928 <sift_extract_feature_vector+0x7c8>
cvtsi2ssl -0xa0(%rbp),%xmm0
ff
subss  -0x8c(%rbp),%xmm0
ff
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  %xmm0,-0x100(%rbp)
ff
jmp    1940 <sift_extract_feature_vector+0x7e0>
cvtsi2ssl -0xa0(%rbp),%xmm0
ff
subss  -0x8c(%rbp),%xmm0
ff
movss  %xmm0,-0x100(%rbp)
ff
movsd  -0xf8(%rbp),%xmm0
ff
movss  -0x100(%rbp),%xmm1
ff
cvtss2sd %xmm1,%xmm2
movsd  0x6c4(%rip),%xmm1
subsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
cvtsi2ssl -0xa4(%rbp),%xmm1
ff
subss  -0x90(%rbp),%xmm1
ff
xorps  %xmm0,%xmm0
ucomiss %xmm1,%xmm0
jbe    19b2 <sift_extract_feature_vector+0x852>
cvtsi2ssl -0xa4(%rbp),%xmm0
ff
subss  -0x90(%rbp),%xmm0
ff
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  %xmm0,-0x10c(%rbp)
ff
jmp    19ca <sift_extract_feature_vector+0x86a>
cvtsi2ssl -0xa4(%rbp),%xmm0
ff
subss  -0x90(%rbp),%xmm0
ff
movss  %xmm0,-0x10c(%rbp)
ff
movsd  -0x108(%rbp),%xmm0
ff
movss  -0x10c(%rbp),%xmm1
ff
cvtss2sd %xmm1,%xmm2
movsd  0x63a(%rip),%xmm1
subsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  -0x88(%rbp),%xmm2
ff
mov    0x10(%rbp),%rax
mov    -0xa0(%rbp),%ecx
imul   -0x2c(%rbp),%ecx
imul   -0x30(%rbp),%ecx
mov    -0xa4(%rbp),%edx
imul   -0x30(%rbp),%edx
add    %edx,%ecx
add    -0xa8(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,(%rax,%rcx,4)
cvttss2si -0x94(%rbp),%eax
ff
add    $0x1,%eax
add    -0x30(%rbp),%eax
cltd
idivl  -0x30(%rbp)
mov    %edx,-0xa8(%rbp)
movss  -0x94(%rbp),%xmm0
ff
call   1080 <floor@plt>
add    $0x1,%eax
cvtsi2ss %eax,%xmm0
subss  -0x94(%rbp),%xmm0
ff
cvtss2sd %xmm0,%xmm1
movsd  0x5a9(%rip),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
cvtsi2ssl -0xa0(%rbp),%xmm1
ff
subss  -0x8c(%rbp),%xmm1
ff
xorps  %xmm0,%xmm0
ucomiss %xmm1,%xmm0
jbe    1ac9 <sift_extract_feature_vector+0x969>
cvtsi2ssl -0xa0(%rbp),%xmm0
ff
subss  -0x8c(%rbp),%xmm0
ff
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  %xmm0,-0x11c(%rbp)
ff
jmp    1ae1 <sift_extract_feature_vector+0x981>
cvtsi2ssl -0xa0(%rbp),%xmm0
ff
subss  -0x8c(%rbp),%xmm0
ff
movss  %xmm0,-0x11c(%rbp)
ff
movsd  -0x118(%rbp),%xmm0
ff
movss  -0x11c(%rbp),%xmm1
ff
cvtss2sd %xmm1,%xmm2
movsd  0x523(%rip),%xmm1
subsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
cvtsi2ssl -0xa4(%rbp),%xmm1
ff
subss  -0x90(%rbp),%xmm1
ff
xorps  %xmm0,%xmm0
ucomiss %xmm1,%xmm0
jbe    1b53 <sift_extract_feature_vector+0x9f3>
cvtsi2ssl -0xa4(%rbp),%xmm0
ff
subss  -0x90(%rbp),%xmm0
ff
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  %xmm0,-0x12c(%rbp)
ff
jmp    1b6b <sift_extract_feature_vector+0xa0b>
cvtsi2ssl -0xa4(%rbp),%xmm0
ff
subss  -0x90(%rbp),%xmm0
ff
movss  %xmm0,-0x12c(%rbp)
ff
movsd  -0x128(%rbp),%xmm0
ff
movss  -0x12c(%rbp),%xmm1
ff
cvtss2sd %xmm1,%xmm2
movsd  0x499(%rip),%xmm1
subsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  -0x88(%rbp),%xmm2
ff
mov    0x10(%rbp),%rax
mov    -0xa0(%rbp),%ecx
imul   -0x2c(%rbp),%ecx
imul   -0x30(%rbp),%ecx
mov    -0xa4(%rbp),%edx
imul   -0x30(%rbp),%edx
add    %edx,%ecx
add    -0xa8(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,(%rax,%rcx,4)
mov    -0xa4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xa4(%rbp)
jmp    1831 <sift_extract_feature_vector+0x6d1>
jmp    1bf1 <sift_extract_feature_vector+0xa91>
mov    -0xa0(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xa0(%rbp)
jmp    17a2 <sift_extract_feature_vector+0x642>
jmp    1c0a <sift_extract_feature_vector+0xaaa>
jmp    1c0f <sift_extract_feature_vector+0xaaf>
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
jmp    13dd <sift_extract_feature_vector+0x27d>
jmp    1c22 <sift_extract_feature_vector+0xac2>
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    13cb <sift_extract_feature_vector+0x26b>
add    $0x130,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<sift_extract_feature_vector>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x138,%rsp
movss  %xmm4,0x10(%rsp)
mov    %r9d,%ebp
mov    %ecx,%ebx
mov    %edx,%r14d
mov    %rsi,0xb8(%rsp)
mov    %rdi,0xb0(%rsp)
movaps %xmm3,0x100(%rsp)
movaps %xmm1,0x110(%rsp)
movaps %xmm0,0xf0(%rsp)
mov    0x170(%rsp),%r12
mov    %r8,%rax
mov    %r8,0x50(%rsp)
imul   %eax,%eax
imul   %r9d,%eax
test   %eax,%eax
jle    11ee <sift_extract_feature_vector+0x7e>
mov    %eax,%edx
shl    $0x2,%rdx
mov    %r12,%rdi
xor    %esi,%esi
movss  %xmm2,0x8(%rsp)
call   1060 <memset@plt>
movss  0x8(%rsp),%xmm2
xorps  %xmm0,%xmm0
cvtsi2ssl 0x50(%rsp),%xmm0
movss  0xe01(%rip),%xmm1
movaps %xmm1,%xmm3
divss  %xmm0,%xmm3
addss  %xmm1,%xmm3
mulss  0x10(%rsp),%xmm3
mulss  %xmm2,%xmm3
movss  %xmm3,0x58(%rsp)
xorps  %xmm1,%xmm1
cvtss2sd %xmm3,%xmm1
mulsd  0xddf(%rip),%xmm1
cvtsd2ss %xmm1,%xmm1
movaps 0x110(%rsp),%xmm5
movaps %xmm5,%xmm4
movaps 0xf0(%rsp),%xmm6
unpcklps %xmm6,%xmm4
movaps %xmm1,%xmm3
shufps $0x0,%xmm1,%xmm3
subps  %xmm3,%xmm4
cvtps2pd %xmm4,%xmm3
addpd  0xdd8(%rip),%xmm3
cvttpd2dq %xmm3,%xmm7
pshufd $0x50,%xmm7,%xmm3
xorps  %xmm4,%xmm4
pcmpgtd %xmm4,%xmm3
movmskpd %xmm3,%ecx
pshufd $0x55,%xmm7,%xmm3
movd   %xmm3,%eax
xor    %edx,%edx
test   $0x2,%cl
cmove  %edx,%eax
movd   %xmm7,%esi
test   $0x1,%cl
cmove  %edx,%esi
mov    %esi,0x34(%rsp)
movaps %xmm1,%xmm3
addss  %xmm6,%xmm3
xorps  %xmm4,%xmm4
cvtss2sd %xmm3,%xmm4
movsd  0xd6f(%rip),%xmm3
addsd  %xmm3,%xmm4
cvttsd2si %xmm4,%ecx
add    $0xffffffff,%ebx
cmp    %ecx,%ebx
cmovg  %ecx,%ebx
addss  %xmm5,%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm3,%xmm1
cvttsd2si %xmm1,%ecx
lea    -0x1(%r14),%edx
cmp    %ecx,%edx
cmovg  %ecx,%edx
mov    %edx,0x30(%rsp)
cmp    %ebx,%eax
jge    1850 <sift_extract_feature_vector+0x6e0>
movaps 0xd63(%rip),%xmm1
xorps  0x100(%rsp),%xmm1
movaps %xmm1,0x120(%rsp)
movaps %xmm2,%xmm1
movss  0x10(%rsp),%xmm4
mulss  %xmm4,%xmm1
cvtss2sd %xmm1,%xmm1
movaps %xmm1,%xmm3
addsd  %xmm1,%xmm3
mulsd  %xmm1,%xmm3
movsd  %xmm3,0xa8(%rsp)
addss  %xmm4,%xmm4
mulss  %xmm2,%xmm4
mov    0x50(%rsp),%rcx
xorps  %xmm1,%xmm1
cvtsi2sd %ecx,%xmm1
addsd  0xcea(%rip),%xmm1
mulsd  0xcda(%rip),%xmm1
movsd  %xmm1,0xa0(%rsp)
divss  %xmm0,%xmm4
movss  %xmm4,0x10(%rsp)
cvtsi2sd %ebp,%xmm0
movsd  %xmm0,0x98(%rsp)
lea    -0x1(%rcx),%edx
mov    %edx,0x38(%rsp)
mov    0x34(%rsp),%edx
mov    %rdx,0x88(%rsp)
mov    %eax,%eax
mov    %rax,0x48(%rsp)
movslq %r14d,%rax
mov    %rax,0x80(%rsp)
mov    %ebx,%eax
mov    %rax,0x90(%rsp)
mov    0x30(%rsp),%eax
mov    %rax,0xc8(%rsp)
mov    %ebp,%eax
imul   %ecx,%eax
mov    %eax,0x68(%rsp)
jmp    13bf <sift_extract_feature_vector+0x24f>
nopl   0x0(%rax)
mov    0x48(%rsp),%rcx
add    $0x1,%rcx
mov    %rcx,%rax
mov    %rcx,0x48(%rsp)
cmp    0x90(%rsp),%rcx
je     1850 <sift_extract_feature_vector+0x6e0>
mov    0x30(%rsp),%eax
cmp    %eax,0x34(%rsp)
jge    13a0 <sift_extract_feature_vector+0x230>
mov    0x48(%rsp),%rax
xorps  %xmm0,%xmm0
cvtsi2ss %eax,%xmm0
subss  0xf0(%rsp),%xmm0
movss  %xmm0,0x5c(%rsp)
imul   0x80(%rsp),%rax
mov    %rax,0xc0(%rsp)
mov    0x88(%rsp),%rax
jmp    1413 <sift_extract_feature_vector+0x2a3>
nop
mov    0x70(%rsp),%rax
add    $0x1,%rax
cmp    0xc8(%rsp),%rax
je     13a0 <sift_extract_feature_vector+0x230>
mov    %rax,0x70(%rsp)
xorps  %xmm1,%xmm1
cvtsi2ss %eax,%xmm1
movss  0x5c(%rsp),%xmm0
movss  %xmm0,0x18(%rsp)
subss  0x110(%rsp),%xmm1
movss  %xmm1,0x14(%rsp)
lea    0x18(%rsp),%rdi
lea    0x14(%rsp),%rsi
movaps 0x120(%rsp),%xmm2
call   1040 <apply_rotation@plt>
movss  0x18(%rsp),%xmm0
movaps %xmm0,%xmm1
movaps 0xbdf(%rip),%xmm3
xorps  %xmm3,%xmm1
movaps %xmm0,%xmm2
xorps  %xmm4,%xmm4
cmpltss %xmm4,%xmm2
andps  %xmm2,%xmm1
andnps %xmm0,%xmm2
orps   %xmm1,%xmm2
movss  0x14(%rsp),%xmm0
movaps %xmm0,%xmm1
xorps  %xmm3,%xmm1
movaps %xmm0,%xmm3
cmpltss %xmm4,%xmm3
andps  %xmm3,%xmm1
andnps %xmm0,%xmm3
orps   %xmm1,%xmm3
maxss  %xmm2,%xmm3
movss  0x58(%rsp),%xmm0
ucomiss %xmm3,%xmm0
jbe    1400 <sift_extract_feature_vector+0x290>
mov    0xc0(%rsp),%rax
mov    0x70(%rsp),%rcx
add    %rcx,%rax
mov    0xb0(%rsp),%rcx
movss  (%rcx,%rax,4),%xmm0
xorps  %xmm1,%xmm1
cvtss2sd %xmm0,%xmm1
movsd  %xmm1,0x20(%rsp)
mov    0xb8(%rsp),%rcx
movss  (%rcx,%rax,4),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,0x28(%rsp)
call   1030 <atan2@plt>
subss  0x100(%rsp),%xmm0
mov    $0x6,%edi
call   1050 <modulus@plt>
movss  %xmm0,0x8(%rsp)
movsd  0x20(%rsp),%xmm0
movsd  0x28(%rsp),%xmm1
call   1070 <hypot@plt>
movsd  %xmm0,0x20(%rsp)
movss  0x18(%rsp),%xmm0
movss  0x14(%rsp),%xmm1
mulss  %xmm1,%xmm1
mulss  %xmm0,%xmm0
addss  %xmm1,%xmm0
xorps  0xb03(%rip),%xmm0
cvtss2sd %xmm0,%xmm0
divsd  0xa8(%rsp),%xmm0
cvtsd2ss %xmm0,%xmm0
call   1080 <exp@plt>
movsd  %xmm0,0x28(%rsp)
movss  0x18(%rsp),%xmm0
movss  0x10(%rsp),%xmm1
divss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xa0(%rsp),%xmm2
addsd  %xmm2,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  0x14(%rsp),%xmm3
divss  %xmm1,%xmm3
xorps  %xmm1,%xmm1
cvtss2sd %xmm3,%xmm1
addsd  %xmm2,%xmm1
cvtsd2ss %xmm1,%xmm1
movss  %xmm1,0x3c(%rsp)
movss  0x8(%rsp),%xmm1
cvtss2sd %xmm1,%xmm1
divsd  0xa71(%rip),%xmm1
movsd  %xmm1,0x8(%rsp)
movss  %xmm0,0x64(%rsp)
call   1090 <floor@plt>
mov    %eax,%ebx
movss  0x3c(%rsp),%xmm0
call   1090 <floor@plt>
movsd  0xa53(%rip),%xmm3
test   %ebx,%ebx
mov    $0x0,%edx
cmovns %ebx,%edx
add    $0x1,%ebx
mov    0x38(%rsp),%ecx
cmp    %ecx,%ebx
cmovge %ecx,%ebx
mov    %ebx,0x6c(%rsp)
mov    %rdx,0x40(%rsp)
cmp    %ebx,%edx
jg     1400 <sift_extract_feature_vector+0x290>
movsd  0x20(%rsp),%xmm0
mulsd  0x28(%rsp),%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  0x8(%rsp),%xmm0
mulsd  0x98(%rsp),%xmm0
cvtsd2ss %xmm0,%xmm4
mov    %rax,%rcx
test   %ecx,%ecx
mov    $0x0,%edx
cmovns %ecx,%edx
add    $0x1,%ecx
mov    0x38(%rsp),%eax
cmp    %eax,%ecx
cmovge %eax,%ecx
cvttss2si %xmm4,%eax
lea    (%rax,%rbp,1),%r14d
add    $0x1,%r14d
add    %ebp,%eax
mov    %eax,0x60(%rsp)
mov    %rcx,0xd0(%rsp)
lea    0x1(%rcx),%esi
mov    0x50(%rsp),%rax
imul   0x40(%rsp),%eax
mov    %rdx,0x78(%rsp)
add    %edx,%eax
imul   %ebp,%eax
mov    %eax,0x1c(%rsp)
movss  %xmm4,0x8(%rsp)
mov    %rsi,0xd8(%rsp)
jmp    16a3 <sift_extract_feature_vector+0x533>
nop
mov    0x40(%rsp),%rcx
lea    0x1(%rcx),%eax
mov    0x1c(%rsp),%edx
add    0x68(%rsp),%edx
mov    %edx,0x1c(%rsp)
cmp    0x6c(%rsp),%ecx
mov    %rax,0x40(%rsp)
je     1400 <sift_extract_feature_vector+0x290>
mov    0x78(%rsp),%rax
cmp    0xd0(%rsp),%eax
jg     1680 <sift_extract_feature_vector+0x510>
mov    0x60(%rsp),%eax
cltd
idiv   %ebp
mov    %rdx,0xe0(%rsp)
xorps  %xmm0,%xmm0
cvtsi2ssl 0x40(%rsp),%xmm0
subss  0x64(%rsp),%xmm0
movaps %xmm0,%xmm1
xorps  0x967(%rip),%xmm1
movaps %xmm0,%xmm2
cmpltss 0x91f(%rip),%xmm2
andps  %xmm2,%xmm1
andnps %xmm0,%xmm2
orps   %xmm1,%xmm2
xorps  %xmm0,%xmm0
cvtss2sd %xmm2,%xmm0
subsd  %xmm0,%xmm3
movsd  %xmm3,0x28(%rsp)
mov    0x1c(%rsp),%eax
mov    %eax,%r13d
mov    0x78(%rsp),%rbx
nopl   0x0(%rax,%rax,1)
movaps %xmm4,%xmm0
call   1090 <floor@plt>
xorps  %xmm0,%xmm0
cvtsi2ss %eax,%xmm0
movss  0x8(%rsp),%xmm1
subss  %xmm0,%xmm1
cvtss2sd %xmm1,%xmm1
movsd  0x8f3(%rip),%xmm0
subsd  %xmm1,%xmm0
mulsd  0x28(%rsp),%xmm0
xorps  %xmm1,%xmm1
cvtsi2ss %ebx,%xmm1
subss  0x3c(%rsp),%xmm1
movaps %xmm1,%xmm2
xorps  0x8ea(%rip),%xmm2
movaps %xmm1,%xmm3
cmpltss 0x8a2(%rip),%xmm3
andps  %xmm3,%xmm2
andnps %xmm1,%xmm3
orps   %xmm2,%xmm3
xorps  %xmm1,%xmm1
cvtss2sd %xmm3,%xmm1
movsd  0x8ae(%rip),%xmm2
subsd  %xmm1,%xmm2
movsd  %xmm2,0xe8(%rsp)
mulsd  %xmm2,%xmm0
mov    0xe0(%rsp),%rax
lea    (%rax,%r13,1),%eax
cltq
movss  (%r12,%rax,4),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  0x20(%rsp),%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,(%r12,%rax,4)
mov    %r14d,%eax
cltd
idiv   %ebp
mov    %r12,%r15
mov    %edx,%r12d
movss  0x8(%rsp),%xmm0
call   1090 <floor@plt>
movsd  0x20(%rsp),%xmm5
mov    0xd8(%rsp),%rsi
movss  0x8(%rsp),%xmm4
movsd  0x83e(%rip),%xmm3
add    $0x1,%eax
xorps  %xmm0,%xmm0
cvtsi2ss %eax,%xmm0
subss  %xmm4,%xmm0
cvtss2sd %xmm0,%xmm0
movapd %xmm3,%xmm1
subsd  %xmm0,%xmm1
mulsd  0x28(%rsp),%xmm1
mulsd  0xe8(%rsp),%xmm1
add    %r13d,%r12d
movslq %r12d,%rax
mov    %r15,%r12
movss  (%r15,%rax,4),%xmm0
cvtss2sd %xmm0,%xmm0
mulsd  %xmm5,%xmm1
addsd  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtsd2ss %xmm1,%xmm0
movss  %xmm0,(%r15,%rax,4)
add    $0x1,%rbx
add    %ebp,%r13d
cmp    %rbx,%rsi
jne    1710 <sift_extract_feature_vector+0x5a0>
jmp    1680 <sift_extract_feature_vector+0x510>
add    $0x138,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @sift_extract_feature_vector(float %0, float %1, float %2, float %3, float* %4, float* %5, i32 %6, i32 %7, i32 %8, i32 %9, float %10, float* %11) {
%13 = alloca float
%14 = alloca float
%15 = alloca float
%16 = alloca float
%17 = alloca float*
%18 = alloca float*
%19 = alloca i32
%20 = alloca i32
%21 = alloca i32
%22 = alloca i32
%23 = alloca float
%24 = alloca float*
%25 = alloca i32
%26 = alloca float
%27 = alloca float
%28 = alloca i32
%29 = alloca i32
%30 = alloca i32
%31 = alloca i32
%32 = alloca i32
%33 = alloca i32
%34 = alloca float
%35 = alloca float
%36 = alloca double
%37 = alloca double
%38 = alloca float
%39 = alloca double
%40 = alloca double
%41 = alloca float
%42 = alloca float
%43 = alloca float
%44 = alloca i32
%45 = alloca i32
%46 = alloca i32
%47 = alloca i32
%48 = alloca i32
store float %0, float* %13
store float %1, float* %14
store float %2, float* %15
store float %3, float* %16
store float* %4, float** %17
store float* %5, float** %18
store i32 %6, i32* %19
store i32 %7, i32* %20
store i32 %8, i32* %21
store i32 %9, i32* %22
store float %10, float* %23
store float* %11, float** %24
store i32 0, i32* %25
br label %49
49: ; preds = %62, %12
%50 = load i32, i32* %25
%51 = load i32, i32* %21
%52 = load i32, i32* %21
%53 = mul nsw i32 %51, %52
%54 = load i32, i32* %22
%55 = mul nsw i32 %53, %54
%56 = icmp slt i32 %50, %55
br i1 %56, label %57, label %65
57: ; preds = %49
%58 = load float*, float** %24
%59 = load i32, i32* %25
%60 = sext i32 %59 to i64
%61 = getelementptr inbounds float, float* %58, i64 %60
store float 0.000000e+00, float* %61
br label %62
62: ; preds = %57
%63 = load i32, i32* %25
%64 = add nsw i32 %63, 1
store i32 %64, i32* %25
br label %49
65: ; preds = %49
%66 = load i32, i32* %21
%67 = sitofp i32 %66 to float
%68 = fdiv float 1.000000e+00, %67
%69 = fadd float 1.000000e+00, %68
%70 = load float, float* %23
%71 = fmul float %69, %70
%72 = load float, float* %15
%73 = fmul float %71, %72
store float %73, float* %26
%74 = load float, float* %26
%75 = fpext float %74 to double
%76 = fmul double 0x3FF6A09E667F3BCD, %75
%77 = fptrunc double %76 to float
store float %77, float* %27
%78 = load float, float* %13
%79 = load float, float* %27
%80 = fsub float %78, %79
%81 = fpext float %80 to double
%82 = fadd double %81, 5.000000e-01
%83 = fptosi double %82 to i32
%84 = icmp slt i32 0, %83
br i1 %84, label %85, label %92
85: ; preds = %65
%86 = load float, float* %13
%87 = load float, float* %27
%88 = fsub float %86, %87
%89 = fpext float %88 to double
%90 = fadd double %89, 5.000000e-01
%91 = fptosi double %90 to i32
br label %93
92: ; preds = %65
br label %93
93: ; preds = %92, %85
%94 = phi i32 [ %91, %85 ], [ 0, %92 ]
store i32 %94, i32* %28
%95 = load float, float* %14
%96 = load float, float* %27
%97 = fsub float %95, %96
%98 = fpext float %97 to double
%99 = fadd double %98, 5.000000e-01
%100 = fptosi double %99 to i32
%101 = icmp slt i32 0, %100
br i1 %101, label %102, label %109
102: ; preds = %93
%103 = load float, float* %14
%104 = load float, float* %27
%105 = fsub float %103, %104
%106 = fpext float %105 to double
%107 = fadd double %106, 5.000000e-01
%108 = fptosi double %107 to i32
br label %110
109: ; preds = %93
br label %110
110: ; preds = %109, %102
%111 = phi i32 [ %108, %102 ], [ 0, %109 ]
store i32 %111, i32* %29
%112 = load float, float* %13
%113 = load float, float* %27
%114 = fadd float %112, %113
%115 = fpext float %114 to double
%116 = fadd double %115, 5.000000e-01
%117 = fptosi double %116 to i32
%118 = load i32, i32* %20
%119 = sub nsw i32 %118, 1
%120 = icmp slt i32 %117, %119
br i1 %120, label %121, label %128
121: ; preds = %110
%122 = load float, float* %13
%123 = load float, float* %27
%124 = fadd float %122, %123
%125 = fpext float %124 to double
%126 = fadd double %125, 5.000000e-01
%127 = fptosi double %126 to i32
br label %131
128: ; preds = %110
%129 = load i32, i32* %20
%130 = sub nsw i32 %129, 1
br label %131
131: ; preds = %128, %121
%132 = phi i32 [ %127, %121 ], [ %130, %128 ]
store i32 %132, i32* %30
%133 = load float, float* %14
%134 = load float, float* %27
%135 = fadd float %133, %134
%136 = fpext float %135 to double
%137 = fadd double %136, 5.000000e-01
%138 = fptosi double %137 to i32
%139 = load i32, i32* %19
%140 = sub nsw i32 %139, 1
%141 = icmp slt i32 %138, %140
br i1 %141, label %142, label %149
142: ; preds = %131
%143 = load float, float* %14
%144 = load float, float* %27
%145 = fadd float %143, %144
%146 = fpext float %145 to double
%147 = fadd double %146, 5.000000e-01
%148 = fptosi double %147 to i32
br label %152
149: ; preds = %131
%150 = load i32, i32* %19
%151 = sub nsw i32 %150, 1
br label %152
152: ; preds = %149, %142
%153 = phi i32 [ %148, %142 ], [ %151, %149 ]
store i32 %153, i32* %31
%154 = load i32, i32* %28
store i32 %154, i32* %32
br label %155
155: ; preds = %527, %152
%156 = load i32, i32* %32
%157 = load i32, i32* %30
%158 = icmp slt i32 %156, %157
br i1 %158, label %159, label %530
159: ; preds = %155
%160 = load i32, i32* %29
store i32 %160, i32* %33
br label %161
161: ; preds = %523, %159
%162 = load i32, i32* %33
%163 = load i32, i32* %31
%164 = icmp slt i32 %162, %163
br i1 %164, label %165, label %526
165: ; preds = %161
%166 = load i32, i32* %32
%167 = sitofp i32 %166 to float
%168 = load float, float* %13
%169 = fsub float %167, %168
store float %169, float* %34
%170 = load i32, i32* %33
%171 = sitofp i32 %170 to float
%172 = load float, float* %14
%173 = fsub float %171, %172
store float %173, float* %35
%174 = load float, float* %34
%175 = load float, float* %35
%176 = load float, float* %16
%177 = fneg float %176
%178 = call i32 @apply_rotation(float %174, float %175, float* %34, float* %35, float %177)
%179 = load float, float* %34
%180 = fcmp olt float %179, 0.000000e+00
br i1 %180, label %181, label %184
181: ; preds = %165
%182 = load float, float* %34
%183 = fneg float %182
br label %186
184: ; preds = %165
%185 = load float, float* %34
br label %186
186: ; preds = %184, %181
%187 = phi float [ %183, %181 ], [ %185, %184 ]
%188 = load float, float* %35
%189 = fcmp olt float %188, 0.000000e+00
br i1 %189, label %190, label %193
190: ; preds = %186
%191 = load float, float* %35
%192 = fneg float %191
br label %195
193: ; preds = %186
%194 = load float, float* %35
br label %195
195: ; preds = %193, %190
%196 = phi float [ %192, %190 ], [ %194, %193 ]
%197 = fcmp olt float %187, %196
br i1 %197, label %198, label %208
198: ; preds = %195
%199 = load float, float* %35
%200 = fcmp olt float %199, 0.000000e+00
br i1 %200, label %201, label %204
201: ; preds = %198
%202 = load float, float* %35
%203 = fneg float %202
br label %206
204: ; preds = %198
%205 = load float, float* %35
br label %206
206: ; preds = %204, %201
%207 = phi float [ %203, %201 ], [ %205, %204 ]
br label %218
208: ; preds = %195
%209 = load float, float* %34
%210 = fcmp olt float %209, 0.000000e+00
br i1 %210, label %211, label %214
211: ; preds = %208
%212 = load float, float* %34
%213 = fneg float %212
br label %216
214: ; preds = %208
%215 = load float, float* %34
br label %216
216: ; preds = %214, %211
%217 = phi float [ %213, %211 ], [ %215, %214 ]
br label %218
218: ; preds = %216, %206
%219 = phi float [ %207, %206 ], [ %217, %216 ]
%220 = load float, float* %26
%221 = fcmp olt float %219, %220
br i1 %221, label %222, label %522
222: ; preds = %218
%223 = load float*, float** %17
%224 = load i32, i32* %32
%225 = load i32, i32* %19
%226 = mul nsw i32 %224, %225
%227 = load i32, i32* %33
%228 = add nsw i32 %226, %227
%229 = sext i32 %228 to i64
%230 = getelementptr inbounds float, float* %223, i64 %229
%231 = load float, float* %230
%232 = fpext float %231 to double
store double %232, double* %36
%233 = load float*, float** %18
%234 = load i32, i32* %32
%235 = load i32, i32* %19
%236 = mul nsw i32 %234, %235
%237 = load i32, i32* %33
%238 = add nsw i32 %236, %237
%239 = sext i32 %238 to i64
%240 = getelementptr inbounds float, float* %233, i64 %239
%241 = load float, float* %240
%242 = fpext float %241 to double
store double %242, double* %37
%243 = load double, double* %37
%244 = load double, double* %36
%245 = call float @atan2(double %243, double %244)
%246 = load float, float* %16
%247 = fsub float %245, %246
store float %247, float* %38
%248 = load float, float* %38
%249 = call float @modulus(float %248, i32 6)
store float %249, float* %38
%250 = load float, float* %23
%251 = load float, float* %15
%252 = fmul float %250, %251
%253 = fpext float %252 to double
store double %253, double* %39
%254 = load double, double* %36
%255 = load double, double* %37
%256 = call double @hypot(double %254, double %255)
%257 = load float, float* %34
%258 = load float, float* %34
%259 = load float, float* %35
%260 = load float, float* %35
%261 = fmul float %259, %260
%262 = call float @llvm.fmuladd.f32(float %257, float %258, float %261)
%263 = fneg float %262
%264 = fpext float %263 to double
%265 = load double, double* %39
%266 = fmul double 2.000000e+00, %265
%267 = load double, double* %39
%268 = fmul double %266, %267
%269 = fdiv double %264, %268
%270 = fptrunc double %269 to float
%271 = call double @exp(float %270)
%272 = fmul double %256, %271
store double %272, double* %40
%273 = load float, float* %34
%274 = load float, float* %23
%275 = fmul float 2.000000e+00, %274
%276 = load float, float* %15
%277 = fmul float %275, %276
%278 = load i32, i32* %21
%279 = sitofp i32 %278 to float
%280 = fdiv float %277, %279
%281 = fdiv float %273, %280
%282 = fpext float %281 to double
%283 = load i32, i32* %21
%284 = sitofp i32 %283 to double
%285 = fsub double %284, 1.000000e+00
%286 = fdiv double %285, 2.000000e+00
%287 = fadd double %282, %286
%288 = fptrunc double %287 to float
store float %288, float* %41
%289 = load float, float* %35
%290 = load float, float* %23
%291 = fmul float 2.000000e+00, %290
%292 = load float, float* %15
%293 = fmul float %291, %292
%294 = load i32, i32* %21
%295 = sitofp i32 %294 to float
%296 = fdiv float %293, %295
%297 = fdiv float %289, %296
%298 = fpext float %297 to double
%299 = load i32, i32* %21
%300 = sitofp i32 %299 to double
%301 = fsub double %300, 1.000000e+00
%302 = fdiv double %301, 2.000000e+00
%303 = fadd double %298, %302
%304 = fptrunc double %303 to float
store float %304, float* %42
%305 = load float, float* %38
%306 = fpext float %305 to double
%307 = fdiv double %306, 0x401921FB54442D18
%308 = load i32, i32* %22
%309 = sitofp i32 %308 to double
%310 = fmul double %307, %309
%311 = fptrunc double %310 to float
store float %311, float* %43
%312 = load float, float* %41
%313 = call i32 @floor(float %312)
store i32 %313, i32* %44
%314 = load float, float* %42
%315 = call i32 @floor(float %314)
store i32 %315, i32* %45
%316 = load i32, i32* %44
%317 = icmp slt i32 0, %316
br i1 %317, label %318, label %320
318: ; preds = %222
%319 = load i32, i32* %44
br label %321
320: ; preds = %222
br label %321
321: ; preds = %320, %318
%322 = phi i32 [ %319, %318 ], [ 0, %320 ]
store i32 %322, i32* %46
br label %323
323: ; preds = %518, %321
%324 = load i32, i32* %46
%325 = load i32, i32* %44
%326 = add nsw i32 %325, 1
%327 = load i32, i32* %21
%328 = sub nsw i32 %327, 1
%329 = icmp slt i32 %326, %328
br i1 %329, label %330, label %333
330: ; preds = %323
%331 = load i32, i32* %44
%332 = add nsw i32 %331, 1
br label %336
333: ; preds = %323
%334 = load i32, i32* %21
%335 = sub nsw i32 %334, 1
br label %336
336: ; preds = %333, %330
%337 = phi i32 [ %332, %330 ], [ %335, %333 ]
%338 = icmp sle i32 %324, %337
br i1 %338, label %339, label %521
339: ; preds = %336
%340 = load i32, i32* %45
%341 = icmp slt i32 0, %340
br i1 %341, label %342, label %344
342: ; preds = %339
%343 = load i32, i32* %45
br label %345
344: ; preds = %339
br label %345
345: ; preds = %344, %342
%346 = phi i32 [ %343, %342 ], [ 0, %344 ]
store i32 %346, i32* %47
br label %347
347: ; preds = %514, %345
%348 = load i32, i32* %47
%349 = load i32, i32* %45
%350 = add nsw i32 %349, 1
%351 = load i32, i32* %21
%352 = sub nsw i32 %351, 1
%353 = icmp slt i32 %350, %352
br i1 %353, label %354, label %357
354: ; preds = %347
%355 = load i32, i32* %45
%356 = add nsw i32 %355, 1
br label %360
357: ; preds = %347
%358 = load i32, i32* %21
%359 = sub nsw i32 %358, 1
br label %360
360: ; preds = %357, %354
%361 = phi i32 [ %356, %354 ], [ %359, %357 ]
%362 = icmp sle i32 %348, %361
br i1 %362, label %363, label %517
363: ; preds = %360
%364 = load float, float* %43
%365 = fptosi float %364 to i32
%366 = load i32, i32* %22
%367 = add nsw i32 %365, %366
%368 = load i32, i32* %22
%369 = srem i32 %367, %368
store i32 %369, i32* %48
%370 = load float, float* %43
%371 = load float, float* %43
%372 = call i32 @floor(float %371)
%373 = sitofp i32 %372 to float
%374 = fsub float %370, %373
%375 = fpext float %374 to double
%376 = fsub double 1.000000e+00, %375
%377 = load i32, i32* %46
%378 = sitofp i32 %377 to float
%379 = load float, float* %41
%380 = fsub float %378, %379
%381 = fcmp olt float %380, 0.000000e+00
br i1 %381, label %382, label %388
382: ; preds = %363
%383 = load i32, i32* %46
%384 = sitofp i32 %383 to float
%385 = load float, float* %41
%386 = fsub float %384, %385
%387 = fneg float %386
br label %393
388: ; preds = %363
%389 = load i32, i32* %46
%390 = sitofp i32 %389 to float
%391 = load float, float* %41
%392 = fsub float %390, %391
br label %393
393: ; preds = %388, %382
%394 = phi float [ %387, %382 ], [ %392, %388 ]
%395 = fpext float %394 to double
%396 = fsub double 1.000000e+00, %395
%397 = fmul double %376, %396
%398 = load i32, i32* %47
%399 = sitofp i32 %398 to float
%400 = load float, float* %42
%401 = fsub float %399, %400
%402 = fcmp olt float %401, 0.000000e+00
br i1 %402, label %403, label %409
403: ; preds = %393
%404 = load i32, i32* %47
%405 = sitofp i32 %404 to float
%406 = load float, float* %42
%407 = fsub float %405, %406
%408 = fneg float %407
br label %414
409: ; preds = %393
%410 = load i32, i32* %47
%411 = sitofp i32 %410 to float
%412 = load float, float* %42
%413 = fsub float %411, %412
br label %414
414: ; preds = %409, %403
%415 = phi float [ %408, %403 ], [ %413, %409 ]
%416 = fpext float %415 to double
%417 = fsub double 1.000000e+00, %416
%418 = fmul double %397, %417
%419 = load double, double* %40
%420 = load float*, float** %24
%421 = load i32, i32* %46
%422 = load i32, i32* %21
%423 = mul nsw i32 %421, %422
%424 = load i32, i32* %22
%425 = mul nsw i32 %423, %424
%426 = load i32, i32* %47
%427 = load i32, i32* %22
%428 = mul nsw i32 %426, %427
%429 = add nsw i32 %425, %428
%430 = load i32, i32* %48
%431 = add nsw i32 %429, %430
%432 = sext i32 %431 to i64
%433 = getelementptr inbounds float, float* %420, i64 %432
%434 = load float, float* %433
%435 = fpext float %434 to double
%436 = call double @llvm.fmuladd.f64(double %418, double %419, double %435)
%437 = fptrunc double %436 to float
store float %437, float* %433
%438 = load float, float* %43
%439 = fptosi float %438 to i32
%440 = add nsw i32 %439, 1
%441 = load i32, i32* %22
%442 = add nsw i32 %440, %441
%443 = load i32, i32* %22
%444 = srem i32 %442, %443
store i32 %444, i32* %48
%445 = load float, float* %43
%446 = call i32 @floor(float %445)
%447 = add nsw i32 %446, 1
%448 = sitofp i32 %447 to float
%449 = load float, float* %43
%450 = fsub float %448, %449
%451 = fpext float %450 to double
%452 = fsub double 1.000000e+00, %451
%453 = load i32, i32* %46
%454 = sitofp i32 %453 to float
%455 = load float, float* %41
%456 = fsub float %454, %455
%457 = fcmp olt float %456, 0.000000e+00
br i1 %457, label %458, label %464
458: ; preds = %414
%459 = load i32, i32* %46
%460 = sitofp i32 %459 to float
%461 = load float, float* %41
%462 = fsub float %460, %461
%463 = fneg float %462
br label %469
464: ; preds = %414
%465 = load i32, i32* %46
%466 = sitofp i32 %465 to float
%467 = load float, float* %41
%468 = fsub float %466, %467
br label %469
469: ; preds = %464, %458
%470 = phi float [ %463, %458 ], [ %468, %464 ]
%471 = fpext float %470 to double
%472 = fsub double 1.000000e+00, %471
%473 = fmul double %452, %472
%474 = load i32, i32* %47
%475 = sitofp i32 %474 to float
%476 = load float, float* %42
%477 = fsub float %475, %476
%478 = fcmp olt float %477, 0.000000e+00
br i1 %478, label %479, label %485
479: ; preds = %469
%480 = load i32, i32* %47
%481 = sitofp i32 %480 to float
%482 = load float, float* %42
%483 = fsub float %481, %482
%484 = fneg float %483
br label %490
485: ; preds = %469
%486 = load i32, i32* %47
%487 = sitofp i32 %486 to float
%488 = load float, float* %42
%489 = fsub float %487, %488
br label %490
490: ; preds = %485, %479
%491 = phi float [ %484, %479 ], [ %489, %485 ]
%492 = fpext float %491 to double
%493 = fsub double 1.000000e+00, %492
%494 = fmul double %473, %493
%495 = load double, double* %40
%496 = load float*, float** %24
%497 = load i32, i32* %46
%498 = load i32, i32* %21
%499 = mul nsw i32 %497, %498
%500 = load i32, i32* %22
%501 = mul nsw i32 %499, %500
%502 = load i32, i32* %47
%503 = load i32, i32* %22
%504 = mul nsw i32 %502, %503
%505 = add nsw i32 %501, %504
%506 = load i32, i32* %48
%507 = add nsw i32 %505, %506
%508 = sext i32 %507 to i64
%509 = getelementptr inbounds float, float* %496, i64 %508
%510 = load float, float* %509
%511 = fpext float %510 to double
%512 = call double @llvm.fmuladd.f64(double %494, double %495, double %511)
%513 = fptrunc double %512 to float
store float %513, float* %509
br label %514
514: ; preds = %490
%515 = load i32, i32* %47
%516 = add nsw i32 %515, 1
store i32 %516, i32* %47
br label %347
517: ; preds = %360
br label %518
518: ; preds = %517
%519 = load i32, i32* %46
%520 = add nsw i32 %519, 1
store i32 %520, i32* %46
br label %323
521: ; preds = %336
br label %522
522: ; preds = %521, %218
br label %523
523: ; preds = %522
%524 = load i32, i32* %33
%525 = add nsw i32 %524, 1
store i32 %525, i32* %33
br label %161
526: ; preds = %161
br label %527
527: ; preds = %526
%528 = load i32, i32* %32
%529 = add nsw i32 %528, 1
store i32 %529, i32* %32
br label %155
530: ; preds = %155
ret void
}

LLVM IR (-O2):
define void @sift_extract_feature_vector(float %0, float %1, float %2, float %3, float* nocapture %4, float* nocapture %5, i32 %6, i32 %7, i32 %8, i32 %9, float %10, float* nocapture %11) {
%13 = alloca float
%14 = alloca float
%15 = mul nsw i32 %8, %8
%16 = mul i32 %15, %9
%17 = icmp sgt i32 %16, 0
br i1 %17, label %18, label %22
18: ; preds = %12
%19 = bitcast float* %11 to i8*
%20 = zext i32 %16 to i64
%21 = shl nuw nsw i64 %20, 2
br label %22
22: ; preds = %18, %12
%23 = sitofp i32 %8 to float
%24 = fdiv float 1.000000e+00, %23
%25 = fadd float %24, 1.000000e+00
%26 = fmul float %25, %10
%27 = fmul float %26, %2
%28 = fpext float %27 to double
%29 = fmul double %28, 0x3FF6A09E667F3BCD
%30 = fptrunc double %29 to float
%31 = insertelement <2 x float> poison, float %1, i64 0
%32 = insertelement <2 x float> %31, float %0, i64 1
%33 = insertelement <2 x float> poison, float %30, i64 0
%34 = shufflevector <2 x float> %33, <2 x float> poison, <2 x i32> zeroinitializer
%35 = fsub <2 x float> %32, %34
%36 = fpext <2 x float> %35 to <2 x double>
%37 = fadd <2 x double> %36, <double 5.000000e-01, double 5.000000e-01>
%38 = fptosi <2 x double> %37 to <2 x i32>
%39 = icmp sgt <2 x i32> %38, zeroinitializer
%40 = extractelement <2 x i1> %39, i64 1
%41 = extractelement <2 x i32> %38, i64 1
%42 = select i1 %40, i32 %41, i32 0
%43 = extractelement <2 x i1> %39, i64 0
%44 = extractelement <2 x i32> %38, i64 0
%45 = select i1 %43, i32 %44, i32 0
%46 = fadd float %30, %0
%47 = fpext float %46 to double
%48 = fadd double %47, 5.000000e-01
%49 = fptosi double %48 to i32
%50 = add nsw i32 %7, -1
%51 = icmp sgt i32 %50, %49
%52 = select i1 %51, i32 %49, i32 %50
%53 = fadd float %30, %1
%54 = fpext float %53 to double
%55 = fadd double %54, 5.000000e-01
%56 = fptosi double %55 to i32
%57 = add nsw i32 %6, -1
%58 = icmp sgt i32 %57, %56
%59 = select i1 %58, i32 %56, i32 %57
%60 = icmp slt i32 %42, %52
br i1 %60, label %61, label %90
61: ; preds = %22
%62 = icmp slt i32 %45, %59
%63 = bitcast float* %13 to i8*
%64 = bitcast float* %14 to i8*
%65 = fneg float %3
%66 = fmul float %2, %10
%67 = fpext float %66 to double
%68 = fmul double %67, 2.000000e+00
%69 = fmul double %68, %67
%70 = fmul float %10, 2.000000e+00
%71 = fmul float %70, %2
%72 = fdiv float %71, %23
%73 = sitofp i32 %8 to double
%74 = fadd double %73, -1.000000e+00
%75 = fmul double %74, 5.000000e-01
%76 = sitofp i32 %9 to double
%77 = add nsw i32 %8, -1
%78 = zext i32 %45 to i64
%79 = zext i32 %42 to i64
%80 = sext i32 %6 to i64
%81 = zext i32 %52 to i64
%82 = zext i32 %59 to i64
br label %83
83: ; preds = %61, %91
%84 = phi i64 [ %79, %61 ], [ %92, %91 ]
br i1 %62, label %85, label %91
85: ; preds = %83
%86 = trunc i64 %84 to i32
%87 = sitofp i32 %86 to float
%88 = fsub float %87, %0
%89 = mul nsw i64 %84, %80
br label %94
90: ; preds = %91, %22
ret void
91: ; preds = %227, %83
%92 = add nuw nsw i64 %84, 1
%93 = icmp eq i64 %92, %81
br i1 %93, label %90, label %83
94: ; preds = %85, %227
%95 = phi i64 [ %78, %85 ], [ %228, %227 ]
store float %88, float* %13
%96 = trunc i64 %95 to i32
%97 = sitofp i32 %96 to float
%98 = fsub float %97, %1
store float %98, float* %14
%99 = call i32 @apply_rotation(float %88, float %98, float* %13, float* %14, float %65)
%100 = load float, float* %13
%101 = fcmp olt float %100, 0.000000e+00
%102 = fneg float %100
%103 = select i1 %101, float %102, float %100
%104 = load float, float* %14
%105 = fcmp olt float %104, 0.000000e+00
%106 = fneg float %104
%107 = select i1 %105, float %106, float %104
%108 = fcmp olt float %103, %107
%109 = select i1 %108, float %107, float %103
%110 = fcmp olt float %109, %27
br i1 %110, label %111, label %227
111: ; preds = %94
%112 = add nsw i64 %95, %89
%113 = getelementptr inbounds float, float* %4, i64 %112
%114 = load float, float* %113
%115 = fpext float %114 to double
%116 = getelementptr inbounds float, float* %5, i64 %112
%117 = load float, float* %116
%118 = fpext float %117 to double
%119 = call float @atan2(double %118, double %115)
%120 = fsub float %119, %3
%121 = call float @modulus(float %120, i32 6)
%122 = call double @hypot(double %115, double %118)
%123 = load float, float* %13
%124 = load float, float* %14
%125 = fmul float %124, %124
%126 = call float @llvm.fmuladd.f32(float %123, float %123, float %125)
%127 = fneg float %126
%128 = fpext float %127 to double
%129 = fdiv double %128, %69
%130 = fptrunc double %129 to float
%131 = call double @exp(float %130)
%132 = fmul double %122, %131
%133 = load float, float* %13
%134 = fdiv float %133, %72
%135 = fpext float %134 to double
%136 = fadd double %75, %135
%137 = fptrunc double %136 to float
%138 = load float, float* %14
%139 = fdiv float %138, %72
%140 = fpext float %139 to double
%141 = fadd double %75, %140
%142 = fptrunc double %141 to float
%143 = fpext float %121 to double
%144 = fdiv double %143, 0x401921FB54442D18
%145 = fmul double %144, %76
%146 = fptrunc double %145 to float
%147 = call i32 @floor(float %137)
%148 = call i32 @floor(float %142)
%149 = icmp sgt i32 %147, 0
%150 = select i1 %149, i32 %147, i32 0
%151 = add nsw i32 %147, 1
%152 = icmp slt i32 %151, %77
%153 = select i1 %152, i32 %151, i32 %77
%154 = icmp sgt i32 %150, %153
br i1 %154, label %227, label %155
155: ; preds = %111
%156 = icmp sgt i32 %148, 0
%157 = select i1 %156, i32 %148, i32 0
%158 = add nsw i32 %148, 1
%159 = icmp slt i32 %158, %77
%160 = select i1 %159, i32 %158, i32 %77
%161 = icmp sgt i32 %157, %160
%162 = fptosi float %146 to i32
%163 = add i32 %162, %9
%164 = add i32 %163, 1
%165 = zext i32 %157 to i64
%166 = add i32 %160, 1
%167 = zext i32 %166 to i64
br label %168
168: ; preds = %155, %180
%169 = phi i32 [ %150, %155 ], [ %181, %180 ]
br i1 %161, label %180, label %170
170: ; preds = %168
%171 = srem i32 %163, %9
%172 = sitofp i32 %169 to float
%173 = fsub float %172, %137
%174 = fcmp olt float %173, 0.000000e+00
%175 = fneg float %173
%176 = select i1 %174, float %175, float %173
%177 = fpext float %176 to double
%178 = fsub double 1.000000e+00, %177
%179 = mul nsw i32 %169, %8
br label %183
180: ; preds = %183, %168
%181 = add nuw i32 %169, 1
%182 = icmp eq i32 %169, %153
br i1 %182, label %227, label %168
183: ; preds = %170, %183
%184 = phi i64 [ %165, %170 ], [ %225, %183 ]
%185 = call i32 @floor(float %146)
%186 = sitofp i32 %185 to float
%187 = fsub float %146, %186
%188 = fpext float %187 to double
%189 = fsub double 1.000000e+00, %188
%190 = fmul double %178, %189
%191 = trunc i64 %184 to i32
%192 = sitofp i32 %191 to float
%193 = fsub float %192, %142
%194 = fcmp olt float %193, 0.000000e+00
%195 = fneg float %193
%196 = select i1 %194, float %195, float %193
%197 = fpext float %196 to double
%198 = fsub double 1.000000e+00, %197
%199 = fmul double %198, %190
%200 = add i32 %179, %191
%201 = mul i32 %200, %9
%202 = add nsw i32 %171, %201
%203 = sext i32 %202 to i64
%204 = getelementptr inbounds float, float* %11, i64 %203
%205 = load float, float* %204
%206 = fpext float %205 to double
%207 = call double @llvm.fmuladd.f64(double %199, double %132, double %206)
%208 = fptrunc double %207 to float
store float %208, float* %204
%209 = srem i32 %164, %9
%210 = call i32 @floor(float %146)
%211 = add nsw i32 %210, 1
%212 = sitofp i32 %211 to float
%213 = fsub float %212, %146
%214 = fpext float %213 to double
%215 = fsub double 1.000000e+00, %214
%216 = fmul double %178, %215
%217 = fmul double %198, %216
%218 = add nsw i32 %209, %201
%219 = sext i32 %218 to i64
%220 = getelementptr inbounds float, float* %11, i64 %219
%221 = load float, float* %220
%222 = fpext float %221 to double
%223 = call double @llvm.fmuladd.f64(double %217, double %132, double %222)
%224 = fptrunc double %223 to float
store float %224, float* %220
%225 = add nuw nsw i64 %184, 1
%226 = icmp eq i64 %225, %167
br i1 %226, label %180, label %183
227: ; preds = %180, %111, %94
%228 = add nuw nsw i64 %95, 1
%229 = icmp eq i64 %228, %82
br i1 %229, label %91, label %94
}