#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 exp(unsigned long);
int /*<<< orphan*/ free(float *);
float *malloc(int);
scalar_t__ pow(int, int);
float *buildKernel(int side, float sigma, int dimension, int *outkernelhalfside,
                   int *outkernelside, int *outkernelsidesq) {
  int i, kernellength, d1, d2, kernelhalfside, kernelside, kernelsidesq;
  float *kernel, sum;
  register int d3;
  unsigned long hyp;
  kernel = malloc(side * sizeof(float));
  for (i = 0; i < side; i++) {
    kernel[i] = (1 / (sigma * 2.506628f)) * exp(-(i * i) / (2 * sigma * sigma));
  }
  for (i = 0; i < side && kernel[i] > 0.0005; i++) {
  }
  kernelhalfside = i;
  kernelside = kernelhalfside * 2 + 1;
  kernelsidesq = kernelside * kernelside;
  free(kernel);
  kernellength = (int)pow(kernelside, dimension);
  kernel = malloc(kernellength * sizeof(float));
  switch (dimension) {
  case 1:
    for (d1 = 0, sum = 0; d1 < kernelside; d1++) {
      hyp = (d1 - kernelhalfside) * (d1 - kernelhalfside);
      kernel[d1] = (1 / (sigma * 2.506628f)) * exp(-hyp / (2 * sigma * sigma));
      sum += kernel[d1];
    }
    break;
  case 2:
    for (d1 = 0, sum = 0; d1 < kernelside; d1++) {
      for (d2 = 0; d2 < kernelside; d2++) {
        hyp = (d1 - kernelhalfside) * (d1 - kernelhalfside) +
              (d2 - kernelhalfside) * (d2 - kernelhalfside);
        kernel[d1 + d2 * kernelside] =
            (1 / (sigma * 2.506628f)) * exp(-hyp / (2 * sigma * sigma));
        sum += kernel[d1 + d2 * kernelside];
      }
    }
    break;
  case 3:
    for (d1 = 0, sum = 0; d1 < kernelside; d1++) {
      for (d2 = 0; d2 < kernelside; d2++) {
        for (d3 = 0; d3 < kernelside; d3++) {
          hyp = (d1 - kernelhalfside) * (d1 - kernelhalfside) +
                (d2 - kernelhalfside) * (d2 - kernelhalfside) +
                (d3 - kernelhalfside) * (d3 - kernelhalfside);
          kernel[d1 + d2 * kernelside + d3 * kernelsidesq] =
              (1 / (sigma * 2.506628f)) * exp(-hyp / (2 * sigma * sigma));
          sum += kernel[d1 + d2 * kernelside + d3 * kernelsidesq];
        }
      }
    }
    break;
  }
  for (d1 = 0; d1 < kernellength; d1++)
    kernel[d1] /= sum;
  *outkernelhalfside = kernelhalfside;
  *outkernelside = kernelside;
  *outkernelsidesq = kernelsidesq;
  return kernel;
}


x86 assembly (clang, -O0):
<buildKernel>:
push   %rbp
mov    %rsp,%rbp
sub    $0xa0,%rsp
mov    %edi,-0x4(%rbp)
movss  %xmm0,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
movslq -0x4(%rbp),%rax
shl    $0x2,%rax
mov    %eax,%edi
call   1040 <malloc@plt>
mov    %rax,-0x50(%rbp)
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    121b <buildKernel+0xdb>
movss  -0x8(%rbp),%xmm2
movss  0xe73(%rip),%xmm0
movaps %xmm2,%xmm1
mulss  %xmm0,%xmm1
movss  0xe68(%rip),%xmm0
divss  %xmm1,%xmm0
movss  %xmm0,-0x64(%rbp)
mov    -0x2c(%rbp),%eax
imul   %eax,%eax
neg    %eax
cvtsi2ss %eax,%xmm0
movaps %xmm2,%xmm1
addss  %xmm1,%xmm1
mulss  %xmm2,%xmm1
divss  %xmm1,%xmm0
movaps %xmm0,%xmm1
cvttss2si %xmm1,%rdi
mov    %rdi,%rcx
sar    $0x3f,%rcx
movss  0xe31(%rip),%xmm1
subss  %xmm1,%xmm0
cvttss2si %xmm0,%rax
and    %rcx,%rax
or     %rax,%rdi
call   1050 <exp@plt>
movss  -0x64(%rbp),%xmm0
cvtsi2ss %eax,%xmm1
mulss  %xmm1,%xmm0
mov    -0x50(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    117c <buildKernel+0x3c>
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%ecx
xor    %eax,%eax
cmp    -0x4(%rbp),%ecx
mov    %al,-0x65(%rbp)
jge    1256 <buildKernel+0x116>
mov    -0x50(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xdb4(%rip),%xmm1
ucomisd %xmm1,%xmm0
seta   %al
mov    %al,-0x65(%rbp)
mov    -0x65(%rbp),%al
test   $0x1,%al
jne    1266 <buildKernel+0x126>
jmp    1279 <buildKernel+0x139>
jmp    126b <buildKernel+0x12b>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1222 <buildKernel+0xe2>
mov    -0x2c(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%ecx
mov    %ecx,%eax
lea    0x1(%rax,%rax,1),%eax
mov    %eax,-0x40(%rbp)
mov    -0x40(%rbp),%eax
imul   %eax,%eax
mov    %eax,-0x44(%rbp)
mov    -0x50(%rbp),%rdi
call   1030 <free@plt>
mov    -0x40(%rbp),%edi
mov    -0xc(%rbp),%esi
call   1060 <pow@plt>
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%edi
shl    $0x2,%edi
call   1040 <malloc@plt>
mov    %rax,-0x50(%rbp)
mov    -0xc(%rbp),%eax
mov    %eax,-0x6c(%rbp)
sub    $0x1,%eax
je     12f0 <buildKernel+0x1b0>
jmp    12ce <buildKernel+0x18e>
mov    -0x6c(%rbp),%eax
sub    $0x2,%eax
je     140b <buildKernel+0x2cb>
jmp    12df <buildKernel+0x19f>
mov    -0x6c(%rbp),%eax
sub    $0x3,%eax
je     157e <buildKernel+0x43e>
jmp    173c <buildKernel+0x5fc>
movl   $0x0,-0x34(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x54(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x40(%rbp),%eax
jge    1406 <buildKernel+0x2c6>
mov    -0x34(%rbp),%eax
mov    -0x3c(%rbp),%ecx
sub    %ecx,%eax
imul   %eax,%eax
cltq
mov    %rax,-0x60(%rbp)
movss  -0x8(%rbp),%xmm1
movss  %xmm1,-0x7c(%rbp)
movss  0xcda(%rip),%xmm0
mulss  %xmm0,%xmm1
movss  0xcd2(%rip),%xmm0
divss  %xmm1,%xmm0
movss  %xmm0,-0x78(%rbp)
mov    -0x60(%rbp),%rax
neg    %rax
mov    %rax,%rdx
shr    %rdx
mov    %eax,%ecx
and    $0x1,%ecx
or     %rdx,%rcx
cvtsi2ss %rcx,%xmm0
addss  %xmm0,%xmm0
cvtsi2ss %rax,%xmm1
movss  %xmm1,-0x74(%rbp)
test   %rax,%rax
movss  %xmm0,-0x70(%rbp)
js     1383 <buildKernel+0x243>
movss  -0x74(%rbp),%xmm0
movss  %xmm0,-0x70(%rbp)
movss  -0x7c(%rbp),%xmm2
movss  -0x70(%rbp),%xmm0
movaps %xmm2,%xmm1
addss  %xmm1,%xmm1
mulss  %xmm2,%xmm1
divss  %xmm1,%xmm0
movaps %xmm0,%xmm1
cvttss2si %xmm1,%rdi
mov    %rdi,%rcx
sar    $0x3f,%rcx
movss  0xc5d(%rip),%xmm1
subss  %xmm1,%xmm0
cvttss2si %xmm0,%rax
and    %rcx,%rax
or     %rax,%rdi
call   1050 <exp@plt>
movss  -0x78(%rbp),%xmm0
cvtsi2ss %eax,%xmm1
mulss  %xmm1,%xmm0
mov    -0x50(%rbp),%rax
movslq -0x34(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x50(%rbp),%rax
movslq -0x34(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
addss  -0x54(%rbp),%xmm0
movss  %xmm0,-0x54(%rbp)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    12ff <buildKernel+0x1bf>
jmp    173c <buildKernel+0x5fc>
movl   $0x0,-0x34(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x54(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x40(%rbp),%eax
jge    1579 <buildKernel+0x439>
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x40(%rbp),%eax
jge    1566 <buildKernel+0x426>
mov    -0x34(%rbp),%eax
mov    -0x3c(%rbp),%edx
sub    %edx,%eax
imul   %eax,%eax
mov    -0x38(%rbp),%ecx
sub    %edx,%ecx
imul   %ecx,%ecx
add    %ecx,%eax
cltq
mov    %rax,-0x60(%rbp)
movss  -0x8(%rbp),%xmm1
movss  %xmm1,-0x8c(%rbp)
ff
movss  0xb9f(%rip),%xmm0
mulss  %xmm0,%xmm1
movss  0xb97(%rip),%xmm0
divss  %xmm1,%xmm0
movss  %xmm0,-0x88(%rbp)
ff
mov    -0x60(%rbp),%rax
neg    %rax
mov    %rax,%rdx
shr    %rdx
mov    %eax,%ecx
and    $0x1,%ecx
or     %rdx,%rcx
cvtsi2ss %rcx,%xmm0
addss  %xmm0,%xmm0
cvtsi2ss %rax,%xmm1
movss  %xmm1,-0x84(%rbp)
ff
test   %rax,%rax
movss  %xmm0,-0x80(%rbp)
js     14c7 <buildKernel+0x387>
movss  -0x84(%rbp),%xmm0
ff
movss  %xmm0,-0x80(%rbp)
movss  -0x8c(%rbp),%xmm2
ff
movss  -0x80(%rbp),%xmm0
movaps %xmm2,%xmm1
addss  %xmm1,%xmm1
mulss  %xmm2,%xmm1
divss  %xmm1,%xmm0
movaps %xmm0,%xmm1
cvttss2si %xmm1,%rdi
mov    %rdi,%rcx
sar    $0x3f,%rcx
movss  0xb16(%rip),%xmm1
subss  %xmm1,%xmm0
cvttss2si %xmm0,%rax
and    %rcx,%rax
or     %rax,%rdi
call   1050 <exp@plt>
movss  -0x88(%rbp),%xmm0
ff
cvtsi2ss %eax,%xmm1
mulss  %xmm1,%xmm0
mov    -0x50(%rbp),%rax
mov    -0x34(%rbp),%ecx
mov    -0x38(%rbp),%edx
imul   -0x40(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x50(%rbp),%rax
mov    -0x34(%rbp),%ecx
mov    -0x38(%rbp),%edx
imul   -0x40(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
addss  -0x54(%rbp),%xmm0
movss  %xmm0,-0x54(%rbp)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    142d <buildKernel+0x2ed>
jmp    156b <buildKernel+0x42b>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    141a <buildKernel+0x2da>
jmp    173c <buildKernel+0x5fc>
movl   $0x0,-0x34(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x54(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x40(%rbp),%eax
jge    1737 <buildKernel+0x5f7>
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x40(%rbp),%eax
jge    1724 <buildKernel+0x5e4>
movl   $0x0,-0x58(%rbp)
mov    -0x58(%rbp),%eax
cmp    -0x40(%rbp),%eax
jge    1711 <buildKernel+0x5d1>
mov    -0x34(%rbp),%eax
mov    -0x3c(%rbp),%edx
sub    %edx,%eax
imul   %eax,%eax
mov    -0x38(%rbp),%ecx
sub    %edx,%ecx
imul   %ecx,%ecx
add    %ecx,%eax
mov    -0x58(%rbp),%ecx
sub    %edx,%ecx
imul   %ecx,%ecx
add    %ecx,%eax
cltq
mov    %rax,-0x60(%rbp)
movss  -0x8(%rbp),%xmm1
movss  %xmm1,-0x9c(%rbp)
ff
movss  0xa0f(%rip),%xmm0
mulss  %xmm0,%xmm1
movss  0xa07(%rip),%xmm0
divss  %xmm1,%xmm0
movss  %xmm0,-0x98(%rbp)
ff
mov    -0x60(%rbp),%rax
neg    %rax
mov    %rax,%rdx
shr    %rdx
mov    %eax,%ecx
and    $0x1,%ecx
or     %rdx,%rcx
cvtsi2ss %rcx,%xmm0
addss  %xmm0,%xmm0
cvtsi2ss %rax,%xmm1
movss  %xmm1,-0x94(%rbp)
ff
test   %rax,%rax
movss  %xmm0,-0x90(%rbp)
ff
js     165d <buildKernel+0x51d>
movss  -0x94(%rbp),%xmm0
ff
movss  %xmm0,-0x90(%rbp)
ff
movss  -0x9c(%rbp),%xmm2
ff
movss  -0x90(%rbp),%xmm0
ff
movaps %xmm2,%xmm1
addss  %xmm1,%xmm1
mulss  %xmm2,%xmm1
divss  %xmm1,%xmm0
movaps %xmm0,%xmm1
cvttss2si %xmm1,%rdi
mov    %rdi,%rcx
sar    $0x3f,%rcx
movss  0x97d(%rip),%xmm1
subss  %xmm1,%xmm0
cvttss2si %xmm0,%rax
and    %rcx,%rax
or     %rax,%rdi
call   1050 <exp@plt>
movss  -0x98(%rbp),%xmm0
ff
cvtsi2ss %eax,%xmm1
mulss  %xmm1,%xmm0
mov    -0x50(%rbp),%rax
mov    -0x34(%rbp),%ecx
mov    -0x38(%rbp),%edx
imul   -0x40(%rbp),%edx
add    %edx,%ecx
mov    -0x58(%rbp),%edx
imul   -0x44(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x50(%rbp),%rax
mov    -0x34(%rbp),%ecx
mov    -0x38(%rbp),%edx
imul   -0x40(%rbp),%edx
add    %edx,%ecx
mov    -0x58(%rbp),%edx
imul   -0x44(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
addss  -0x54(%rbp),%xmm0
movss  %xmm0,-0x54(%rbp)
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
jmp    15b3 <buildKernel+0x473>
jmp    1716 <buildKernel+0x5d6>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    15a0 <buildKernel+0x460>
jmp    1729 <buildKernel+0x5e9>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    158d <buildKernel+0x44d>
jmp    173c <buildKernel+0x5fc>
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x30(%rbp),%eax
jge    1778 <buildKernel+0x638>
movss  -0x54(%rbp),%xmm1
mov    -0x50(%rbp),%rax
movslq -0x34(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
divss  %xmm1,%xmm0
movss  %xmm0,(%rax,%rcx,4)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1743 <buildKernel+0x603>
mov    -0x3c(%rbp),%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x40(%rbp),%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x44(%rbp),%ecx
mov    -0x28(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x50(%rbp),%rax
add    $0xa0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<buildKernel>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x68,%rsp
mov    %r8,%r13
mov    %rcx,0x50(%rsp)
mov    %rdx,0x48(%rsp)
mov    %esi,%r14d
movss  %xmm0,0x4(%rsp)
mov    %edi,%r15d
lea    0x0(,%r15,4),%edi
call   1040 <malloc@plt>
mov    %rax,%r12
test   %r15d,%r15d
jle    124e <buildKernel+0x10e>
mov    %r15d,%ebp
movss  0xe75(%rip),%xmm0
movss  0x4(%rsp),%xmm2
mulss  %xmm2,%xmm0
movss  0xe67(%rip),%xmm1
divss  %xmm0,%xmm1
movss  %xmm1,0x20(%rsp)
movaps %xmm2,%xmm0
addss  %xmm2,%xmm0
mulss  %xmm2,%xmm0
movss  %xmm0,0xc(%rsp)
xor    %ebx,%ebx
nopw   0x0(%rax,%rax,1)
mov    %ebx,%eax
imul   %ebx,%eax
neg    %eax
xorps  %xmm0,%xmm0
cvtsi2ss %eax,%xmm0
divss  0xc(%rsp),%xmm0
cvttss2si %xmm0,%rax
mov    %rax,%rcx
sar    $0x3f,%rcx
subss  0xe20(%rip),%xmm0
cvttss2si %xmm0,%rdi
and    %rcx,%rdi
or     %rax,%rdi
call   1050 <exp@plt>
xorps  %xmm0,%xmm0
cvtsi2ss %eax,%xmm0
mulss  0x20(%rsp),%xmm0
movss  %xmm0,(%r12,%rbx,4)
add    $0x1,%rbx
cmp    %rbx,%rbp
jne    11c0 <buildKernel+0x80>
test   %r15d,%r15d
jle    124e <buildKernel+0x10e>
xor    %r15d,%r15d
movsd  0xdec(%rip),%xmm0
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movss  (%r12,%r15,4),%xmm1
cvtss2sd %xmm1,%xmm1
ucomisd %xmm0,%xmm1
jbe    1251 <buildKernel+0x111>
add    $0x1,%r15
cmp    %r15,%rbp
jne    1230 <buildKernel+0xf0>
mov    %ebp,%r15d
jmp    1251 <buildKernel+0x111>
xor    %r15d,%r15d
lea    (%r15,%r15,1),%ebx
add    $0x1,%ebx
mov    %ebx,%ebp
imul   %ebx,%ebp
mov    %r12,%rdi
call   1030 <free@plt>
mov    %ebx,0x8(%rsp)
mov    %ebx,%edi
mov    %r14d,%esi
call   1060 <pow@plt>
mov    %rax,%r12
lea    0x0(,%rax,4),%edi
call   1040 <malloc@plt>
mov    %rax,%rbx
cmp    $0x1,%r14d
mov    %r13,0x58(%rsp)
mov    %r15,0x18(%rsp)
mov    %r12,0x40(%rsp)
je     1411 <buildKernel+0x2d1>
cmp    $0x2,%r14d
movss  0x4(%rsp),%xmm1
je     14e6 <buildKernel+0x3a6>
cmp    $0x3,%r14d
jne    1603 <buildKernel+0x4c3>
movss  0xd40(%rip),%xmm0
mulss  %xmm1,%xmm0
movss  0xd38(%rip),%xmm2
divss  %xmm0,%xmm2
movss  %xmm2,0xc(%rsp)
movaps %xmm1,%xmm0
addss  %xmm1,%xmm0
mulss  %xmm1,%xmm0
movss  %xmm0,0x4(%rsp)
mov    0x8(%rsp),%eax
mov    %rax,0x60(%rsp)
mov    0x18(%rsp),%rax
neg    %eax
mov    %eax,0x3c(%rsp)
xor    %r13d,%r13d
xorps  %xmm2,%xmm2
jmp    1324 <buildKernel+0x1e4>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    0x38(%rsp),%r13d
add    $0x1,%r13d
cmp    0x8(%rsp),%r13d
je     1603 <buildKernel+0x4c3>
mov    %r13d,%ecx
sub    0x18(%rsp),%ecx
imul   %ecx,%ecx
mov    %ecx,0x10(%rsp)
mov    %r13d,0x38(%rsp)
xor    %r12d,%r12d
jmp    135a <buildKernel+0x21a>
nopl   0x0(%rax)
mov    0x30(%rsp),%r12d
add    $0x1,%r12d
mov    0x8(%rsp),%eax
mov    0x14(%rsp),%r13d
add    %eax,%r13d
cmp    %eax,%r12d
je     1310 <buildKernel+0x1d0>
mov    %r12d,0x30(%rsp)
sub    0x18(%rsp),%r12d
imul   %r12d,%r12d
add    0x10(%rsp),%r12d
mov    0x60(%rsp),%r15
mov    0x3c(%rsp),%r14d
mov    %r13d,0x14(%rsp)
jmp    13e1 <buildKernel+0x2a1>
xchg   %ax,%ax
xorps  %xmm0,%xmm0
cvtsi2ss %rax,%xmm0
divss  0x4(%rsp),%xmm0
cvttss2si %xmm0,%rax
mov    %rax,%rcx
sar    $0x3f,%rcx
subss  0xc66(%rip),%xmm0
cvttss2si %xmm0,%rdi
and    %rcx,%rdi
or     %rax,%rdi
call   1050 <exp@plt>
xorps  %xmm0,%xmm0
cvtsi2ss %eax,%xmm0
mulss  0xc(%rsp),%xmm0
mov    %r13d,%eax
movss  %xmm0,(%rbx,%rax,4)
movaps 0x20(%rsp),%xmm2
addss  %xmm0,%xmm2
add    %ebp,%r13d
add    $0x1,%r14d
add    $0xffffffffffffffff,%r15
je     1340 <buildKernel+0x200>
mov    %r14d,%eax
imul   %eax,%eax
add    %r12d,%eax
neg    %rax
movaps %xmm2,0x20(%rsp)
jns    1380 <buildKernel+0x240>
mov    %rax,%rcx
shr    %rcx
and    $0x1,%eax
or     %rcx,%rax
xorps  %xmm0,%xmm0
cvtsi2ss %rax,%xmm0
addss  %xmm0,%xmm0
jmp    1388 <buildKernel+0x248>
movss  0xbe7(%rip),%xmm0
movss  0x4(%rsp),%xmm1
mulss  %xmm1,%xmm0
movss  0xbd9(%rip),%xmm2
divss  %xmm0,%xmm2
movss  %xmm2,0xc(%rsp)
movaps %xmm1,%xmm0
addss  %xmm1,%xmm0
mulss  %xmm1,%xmm0
movss  %xmm0,0x4(%rsp)
mov    0x8(%rsp),%r14d
neg    %r15d
xorps  %xmm2,%xmm2
xor    %r12d,%r12d
jmp    14bb <buildKernel+0x37b>
cs nopw 0x0(%rax,%rax,1)
xorps  %xmm0,%xmm0
cvtsi2ss %rax,%xmm0
divss  0x4(%rsp),%xmm0
cvttss2si %xmm0,%rax
mov    %rax,%rcx
sar    $0x3f,%rcx
subss  0xb86(%rip),%xmm0
cvttss2si %xmm0,%rdi
and    %rcx,%rdi
or     %rax,%rdi
call   1050 <exp@plt>
xorps  %xmm0,%xmm0
cvtsi2ss %eax,%xmm0
mulss  0xc(%rsp),%xmm0
movss  %xmm0,(%rbx,%r12,4)
movaps 0x20(%rsp),%xmm2
addss  %xmm0,%xmm2
add    $0x1,%r12
cmp    %r12,%r14
je     1603 <buildKernel+0x4c3>
lea    (%r15,%r12,1),%eax
imul   %eax,%eax
neg    %rax
movaps %xmm2,0x20(%rsp)
jns    1460 <buildKernel+0x320>
mov    %rax,%rcx
shr    %rcx
and    $0x1,%eax
or     %rcx,%rax
xorps  %xmm0,%xmm0
cvtsi2ss %rax,%xmm0
addss  %xmm0,%xmm0
jmp    1468 <buildKernel+0x328>
movss  0xb12(%rip),%xmm0
mulss  %xmm1,%xmm0
movss  0xb0a(%rip),%xmm2
divss  %xmm0,%xmm2
movss  %xmm2,0xc(%rsp)
movaps %xmm1,%xmm0
addss  %xmm1,%xmm0
mulss  %xmm1,%xmm0
movss  %xmm0,0x4(%rsp)
mov    0x8(%rsp),%eax
mov    %rax,0x30(%rsp)
mov    %r15d,%eax
neg    %eax
mov    %eax,0x10(%rsp)
xor    %r13d,%r13d
xorps  %xmm2,%xmm2
jmp    1544 <buildKernel+0x404>
nop
mov    0x14(%rsp),%r13d
add    $0x1,%r13d
cmp    0x8(%rsp),%r13d
je     1603 <buildKernel+0x4c3>
mov    %r13d,%r12d
sub    0x18(%rsp),%r12d
imul   %r12d,%r12d
mov    0x30(%rsp),%r14
mov    0x10(%rsp),%r15d
mov    %r13d,0x14(%rsp)
jmp    15d3 <buildKernel+0x493>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
xorps  %xmm0,%xmm0
cvtsi2ss %rax,%xmm0
divss  0x4(%rsp),%xmm0
cvttss2si %xmm0,%rax
mov    %rax,%rcx
sar    $0x3f,%rcx
subss  0xa76(%rip),%xmm0
cvttss2si %xmm0,%rdi
and    %rcx,%rdi
or     %rax,%rdi
call   1050 <exp@plt>
xorps  %xmm0,%xmm0
cvtsi2ss %eax,%xmm0
mulss  0xc(%rsp),%xmm0
mov    %r13d,%eax
movss  %xmm0,(%rbx,%rax,4)
movaps 0x20(%rsp),%xmm2
addss  %xmm0,%xmm2
add    0x8(%rsp),%r13d
add    $0x1,%r15d
add    $0xffffffffffffffff,%r14
je     1530 <buildKernel+0x3f0>
mov    %r15d,%eax
imul   %eax,%eax
add    %r12d,%eax
neg    %rax
movaps %xmm2,0x20(%rsp)
jns    1570 <buildKernel+0x430>
mov    %rax,%rcx
shr    %rcx
and    $0x1,%eax
or     %rcx,%rax
xorps  %xmm0,%xmm0
cvtsi2ss %rax,%xmm0
addss  %xmm0,%xmm0
jmp    1578 <buildKernel+0x438>
mov    0x40(%rsp),%rsi
test   %esi,%esi
mov    0x58(%rsp),%r8
mov    0x18(%rsp),%rdi
jle    1677 <buildKernel+0x537>
mov    %esi,%eax
cmp    $0x4,%rax
jae    1622 <buildKernel+0x4e2>
xor    %ecx,%ecx
jmp    1660 <buildKernel+0x520>
and    $0x3,%esi
mov    %rax,%rcx
sub    %rsi,%rcx
movaps %xmm2,%xmm0
shufps $0x0,%xmm2,%xmm0
xor    %edx,%edx
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movups (%rbx,%rdx,4),%xmm1
divps  %xmm0,%xmm1
movups %xmm1,(%rbx,%rdx,4)
add    $0x4,%rdx
cmp    %rdx,%rcx
jne    1640 <buildKernel+0x500>
test   %rsi,%rsi
je     1677 <buildKernel+0x537>
nopl   0x0(%rax)
movss  (%rbx,%rcx,4),%xmm0
divss  %xmm2,%xmm0
movss  %xmm0,(%rbx,%rcx,4)
add    $0x1,%rcx
cmp    %rcx,%rax
jne    1660 <buildKernel+0x520>
mov    0x48(%rsp),%rax
mov    %edi,(%rax)
mov    0x50(%rsp),%rax
mov    0x8(%rsp),%ecx
mov    %ecx,(%rax)
mov    %ebp,(%r8)
mov    %rbx,%rax
add    $0x68,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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