#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 */
typedef int int32_t;

/* Variables and functions */
int /*<<< orphan*/ eval_amdf(float *, int, int const *, int, int const, float *,
                             int *, int *);
void eval_highres_amdf(float speech[], int32_t lpita, const int32_t tau[],
                       int32_t ltau, float amdf[], int32_t *minptr,
                       int32_t *maxptr, int32_t *mintau) {
  float amdf2[6];
  int32_t tau2[6];
  int32_t minp2;
  int32_t ltau2;
  int32_t maxp2;
  int32_t minamd;
  int i;
  int i2;
  int ptr;
  eval_amdf(speech, lpita, tau, ltau, tau[ltau - 1], amdf, minptr, maxptr);
  *mintau = tau[*minptr];
  minamd = (int32_t)amdf[*minptr];
  ltau2 = 0;
  ptr = *minptr - 2;
  i2 = ((*mintau + 4) <= (tau[ltau - 1]) ? (*mintau + 4) : (tau[ltau - 1]));
  for (i = ((*mintau - 3) >= (41) ? (*mintau - 3) : (41)); i < i2; i++) {
    while (tau[ptr] < i)
      ptr++;
    if (tau[ptr] != i)
      tau2[ltau2++] = i;
  }
  if (ltau2 > 0) {
    eval_amdf(speech, lpita, tau2, ltau2, tau[ltau - 1], amdf2, &minp2, &maxp2);
    if (amdf2[minp2] < (float)minamd) {
      *mintau = tau2[minp2];
      minamd = (int32_t)amdf2[minp2];
    }
  }
  if (*mintau >= 80) {
    i = *mintau / 2;
    if ((i & 1) == 0) {
      ltau2 = 2;
      tau2[0] = i - 1;
      tau2[1] = i + 1;
    } else {
      ltau2 = 1;
      tau2[0] = i;
    }
    eval_amdf(speech, lpita, tau2, ltau2, tau[ltau - 1], amdf2, &minp2, &maxp2);
    if (amdf2[minp2] < (float)minamd) {
      *mintau = tau2[minp2];
      minamd = (int32_t)amdf2[minp2];
      *minptr -= 20;
    }
  }
  amdf[*minptr] = (float)minamd;
  *maxptr = ((*minptr - 5) >= (0) ? (*minptr - 5) : (0));
  i2 = ((*minptr + 6) <= (ltau) ? (*minptr + 6) : (ltau));
  for (i = *maxptr; i < i2; i++) {
    if (amdf[i] > amdf[*maxptr])
      *maxptr = i;
  }
}


x86 assembly (clang, -O0):
<eval_highres_amdf>:
push   %rbp
mov    %rsp,%rbp
sub    $0xb0,%rsp
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
mov    -0x8(%rbp),%rdi
mov    -0xc(%rbp),%esi
mov    -0x18(%rbp),%rdx
mov    -0x1c(%rbp),%ecx
mov    -0x18(%rbp),%rax
mov    -0x1c(%rbp),%r8d
sub    $0x1,%r8d
movslq %r8d,%r8
mov    (%rax,%r8,4),%r8d
mov    -0x28(%rbp),%r9
mov    -0x30(%rbp),%r10
mov    0x10(%rbp),%rax
mov    %r10,(%rsp)
mov    %rax,0x8(%rsp)
call   1030 <eval_amdf@plt>
mov    -0x18(%rbp),%rax
mov    -0x30(%rbp),%rcx
movslq (%rcx),%rcx
mov    (%rax,%rcx,4),%ecx
mov    0x18(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x28(%rbp),%rax
mov    -0x30(%rbp),%rcx
movslq (%rcx),%rcx
cvttss2si (%rax,%rcx,4),%eax
mov    %eax,-0x80(%rbp)
movl   $0x0,-0x78(%rbp)
mov    -0x30(%rbp),%rax
mov    (%rax),%eax
sub    $0x2,%eax
mov    %eax,-0x8c(%rbp)
mov    0x18(%rbp),%rax
mov    (%rax),%eax
add    $0x4,%eax
mov    -0x18(%rbp),%rcx
mov    -0x1c(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
cmp    (%rcx,%rdx,4),%eax
jg     11e4 <eval_highres_amdf+0xd4>
mov    0x18(%rbp),%rax
mov    (%rax),%eax
add    $0x4,%eax
mov    %eax,-0x90(%rbp)
jmp    11fa <eval_highres_amdf+0xea>
mov    -0x18(%rbp),%rax
mov    -0x1c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x90(%rbp)
mov    -0x90(%rbp),%eax
mov    %eax,-0x88(%rbp)
mov    0x18(%rbp),%rax
mov    (%rax),%eax
sub    $0x3,%eax
cmp    $0x29,%eax
jl     122c <eval_highres_amdf+0x11c>
mov    0x18(%rbp),%rax
mov    (%rax),%eax
sub    $0x3,%eax
mov    %eax,-0x94(%rbp)
jmp    123c <eval_highres_amdf+0x12c>
mov    $0x29,%eax
mov    %eax,-0x94(%rbp)
jmp    123c <eval_highres_amdf+0x12c>
mov    -0x94(%rbp),%eax
mov    %eax,-0x84(%rbp)
mov    -0x84(%rbp),%eax
cmp    -0x88(%rbp),%eax
jge    12d7 <eval_highres_amdf+0x1c7>
jmp    125f <eval_highres_amdf+0x14f>
mov    -0x18(%rbp),%rax
movslq -0x8c(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
cmp    -0x84(%rbp),%eax
jge    128d <eval_highres_amdf+0x17d>
mov    -0x8c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8c(%rbp)
jmp    125f <eval_highres_amdf+0x14f>
mov    -0x18(%rbp),%rax
movslq -0x8c(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
cmp    -0x84(%rbp),%eax
je     12be <eval_highres_amdf+0x1ae>
mov    -0x84(%rbp),%ecx
mov    -0x78(%rbp),%eax
mov    %eax,%edx
add    $0x1,%edx
mov    %edx,-0x78(%rbp)
cltq
mov    %ecx,-0x70(%rbp,%rax,4)
jmp    12c3 <eval_highres_amdf+0x1b3>
mov    -0x84(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x84(%rbp)
jmp    1248 <eval_highres_amdf+0x138>
cmpl   $0x0,-0x78(%rbp)
jle    1354 <eval_highres_amdf+0x244>
mov    -0x8(%rbp),%rdi
mov    -0xc(%rbp),%esi
lea    -0x70(%rbp),%rdx
mov    -0x78(%rbp),%ecx
mov    -0x18(%rbp),%rax
mov    -0x1c(%rbp),%r8d
sub    $0x1,%r8d
movslq %r8d,%r8
mov    (%rax,%r8,4),%r8d
lea    -0x50(%rbp),%r9
lea    -0x74(%rbp),%r10
lea    -0x7c(%rbp),%rax
mov    %r10,(%rsp)
mov    %rax,0x8(%rsp)
call   1030 <eval_amdf@plt>
movslq -0x74(%rbp),%rax
movss  -0x50(%rbp,%rax,4),%xmm1
cvtsi2ssl -0x80(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    134f <eval_highres_amdf+0x23f>
movslq -0x74(%rbp),%rax
mov    -0x70(%rbp,%rax,4),%ecx
mov    0x18(%rbp),%rax
mov    %ecx,(%rax)
movslq -0x74(%rbp),%rax
cvttss2si -0x50(%rbp,%rax,4),%eax
mov    %eax,-0x80(%rbp)
jmp    1354 <eval_highres_amdf+0x244>
mov    0x18(%rbp),%rax
cmpl   $0x50,(%rax)
jl     1439 <eval_highres_amdf+0x329>
mov    0x18(%rbp),%rax
mov    (%rax),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,-0x84(%rbp)
mov    -0x84(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
jne    13ab <eval_highres_amdf+0x29b>
movl   $0x2,-0x78(%rbp)
mov    -0x84(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x70(%rbp)
mov    -0x84(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x6c(%rbp)
jmp    13bb <eval_highres_amdf+0x2ab>
movl   $0x1,-0x78(%rbp)
mov    -0x84(%rbp),%eax
mov    %eax,-0x70(%rbp)
mov    -0x8(%rbp),%rdi
mov    -0xc(%rbp),%esi
lea    -0x70(%rbp),%rdx
mov    -0x78(%rbp),%ecx
mov    -0x18(%rbp),%rax
mov    -0x1c(%rbp),%r8d
sub    $0x1,%r8d
movslq %r8d,%r8
mov    (%rax,%r8,4),%r8d
lea    -0x50(%rbp),%r9
lea    -0x74(%rbp),%r10
lea    -0x7c(%rbp),%rax
mov    %r10,(%rsp)
mov    %rax,0x8(%rsp)
call   1030 <eval_amdf@plt>
movslq -0x74(%rbp),%rax
movss  -0x50(%rbp,%rax,4),%xmm1
cvtsi2ssl -0x80(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    1434 <eval_highres_amdf+0x324>
movslq -0x74(%rbp),%rax
mov    -0x70(%rbp,%rax,4),%ecx
mov    0x18(%rbp),%rax
mov    %ecx,(%rax)
movslq -0x74(%rbp),%rax
cvttss2si -0x50(%rbp,%rax,4),%eax
mov    %eax,-0x80(%rbp)
mov    -0x30(%rbp),%rax
mov    (%rax),%ecx
sub    $0x14,%ecx
mov    %ecx,(%rax)
jmp    1439 <eval_highres_amdf+0x329>
cvtsi2ssl -0x80(%rbp),%xmm0
mov    -0x28(%rbp),%rax
mov    -0x30(%rbp),%rcx
movslq (%rcx),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x30(%rbp),%rax
mov    (%rax),%eax
sub    $0x5,%eax
cmp    $0x0,%eax
jl     1474 <eval_highres_amdf+0x364>
mov    -0x30(%rbp),%rax
mov    (%rax),%eax
sub    $0x5,%eax
mov    %eax,-0x98(%rbp)
jmp    1481 <eval_highres_amdf+0x371>
xor    %eax,%eax
mov    %eax,-0x98(%rbp)
jmp    1481 <eval_highres_amdf+0x371>
mov    -0x98(%rbp),%ecx
mov    0x10(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x30(%rbp),%rax
mov    (%rax),%eax
add    $0x6,%eax
cmp    -0x1c(%rbp),%eax
jg     14b3 <eval_highres_amdf+0x3a3>
mov    -0x30(%rbp),%rax
mov    (%rax),%eax
add    $0x6,%eax
mov    %eax,-0x9c(%rbp)
jmp    14bc <eval_highres_amdf+0x3ac>
mov    -0x1c(%rbp),%eax
mov    %eax,-0x9c(%rbp)
mov    -0x9c(%rbp),%eax
mov    %eax,-0x88(%rbp)
mov    0x10(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x84(%rbp)
mov    -0x84(%rbp),%eax
cmp    -0x88(%rbp),%eax
jge    1530 <eval_highres_amdf+0x420>
mov    -0x28(%rbp),%rax
movslq -0x84(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x28(%rbp),%rax
mov    0x10(%rbp),%rcx
movslq (%rcx),%rcx
ucomiss (%rax,%rcx,4),%xmm0
jbe    1517 <eval_highres_amdf+0x407>
mov    -0x84(%rbp),%ecx
mov    0x10(%rbp),%rax
mov    %ecx,(%rax)
jmp    151c <eval_highres_amdf+0x40c>
mov    -0x84(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x84(%rbp)
jmp    14d4 <eval_highres_amdf+0x3c4>
add    $0xb0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<eval_highres_amdf>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x58,%rsp
mov    %r9,%r13
mov    %r8,%rbx
mov    %rdx,%r14
mov    0x98(%rsp),%rbp
mov    0x90(%rsp),%r12
mov    %ecx,0x10(%rsp)
movslq %ecx,%r15
mov    -0x4(%rdx,%r15,4),%r8d
mov    %rdi,0x18(%rsp)
mov    %esi,0xc(%rsp)
mov    %r15d,%ecx
mov    %rbx,%r9
push   %r12
push   %r13
call   1030 <eval_amdf@plt>
add    $0x10,%rsp
movslq 0x0(%r13),%rax
mov    (%r14,%rax,4),%r9d
mov    %r9d,0x0(%rbp)
movslq 0x0(%r13),%rsi
cvttss2si (%rbx,%rsi,4),%r10d
lea    0x4(%r9),%edx
mov    -0x4(%r14,%r15,4),%r8d
cmp    %r8d,%edx
cmovg  %r8d,%edx
lea    -0x3(%r9),%eax
cmp    $0x2c,%r9d
mov    $0x29,%edi
cmovge %eax,%edi
cmp    %edx,%edi
jge    1248 <eval_highres_amdf+0x138>
add    $0xfffffffe,%esi
xor    %ecx,%ecx
jmp    11b7 <eval_highres_amdf+0xa7>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    $0x1,%edi
cmp    %edx,%edi
je     11ec <eval_highres_amdf+0xdc>
movslq %esi,%rax
lea    -0x1(%rax),%esi
lea    (%r14,%rax,4),%rax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
add    $0x1,%esi
lea    0x4(%rax),%rbp
cmp    %edi,(%rax)
mov    %rbp,%rax
jl     11d0 <eval_highres_amdf+0xc0>
je     11b0 <eval_highres_amdf+0xa0>
movslq %ecx,%rax
add    $0x1,%ecx
mov    %edi,0x20(%rsp,%rax,4)
jmp    11b0 <eval_highres_amdf+0xa0>
test   %ecx,%ecx
jle    1248 <eval_highres_amdf+0x138>
lea    0x14(%rsp),%rax
lea    0x8(%rsp),%rbp
lea    0x20(%rsp),%rdx
lea    0x40(%rsp),%r9
mov    0x18(%rsp),%rdi
mov    0xc(%rsp),%esi
push   %rax
push   %rbp
mov    %r10d,%ebp
call   1030 <eval_amdf@plt>
add    $0x10,%rsp
cvtsi2ss %ebp,%xmm1
movslq 0x8(%rsp),%rax
movss  0x40(%rsp,%rax,4),%xmm0
ucomiss %xmm0,%xmm1
jbe    12df <eval_highres_amdf+0x1cf>
mov    0x20(%rsp,%rax,4),%r9d
mov    0x98(%rsp),%rax
mov    %r9d,(%rax)
cvttss2si %xmm0,%r10d
cmp    $0x50,%r9d
jl     12f7 <eval_highres_amdf+0x1e7>
add    $0xffffffffffffffff,%r15
mov    %r9d,%edx
shr    %edx
mov    $0x1,%ecx
mov    %r10d,%ebp
test   $0x2,%r9b
jne    127a <eval_highres_amdf+0x16a>
lea    -0x1(%rdx),%eax
add    $0x1,%edx
mov    %edx,0x24(%rsp)
mov    $0x2,%ecx
mov    %eax,%edx
mov    %edx,0x20(%rsp)
mov    (%r14,%r15,4),%r8d
lea    0x14(%rsp),%rax
lea    0x8(%rsp),%r10
lea    0x20(%rsp),%rdx
lea    0x40(%rsp),%r9
mov    0x18(%rsp),%rdi
mov    0xc(%rsp),%esi
push   %rax
push   %r10
call   1030 <eval_amdf@plt>
add    $0x10,%rsp
mov    %ebp,%r10d
xorps  %xmm1,%xmm1
cvtsi2ss %ebp,%xmm1
movslq 0x8(%rsp),%rax
movss  0x40(%rsp,%rax,4),%xmm0
ucomiss %xmm0,%xmm1
jbe    12f7 <eval_highres_amdf+0x1e7>
mov    0x20(%rsp,%rax,4),%eax
cvttss2si %xmm0,%r10d
mov    0x98(%rsp),%rcx
mov    %eax,(%rcx)
addl   $0xffffffec,0x0(%r13)
jmp    12f7 <eval_highres_amdf+0x1e7>
mov    %ebp,%r10d
mov    0x98(%rsp),%rax
mov    (%rax),%r9d
cmp    $0x50,%r9d
jge    1252 <eval_highres_amdf+0x142>
xorps  %xmm0,%xmm0
cvtsi2ss %r10d,%xmm0
movslq 0x0(%r13),%rcx
lea    -0x5(%rcx),%edx
xor    %eax,%eax
cmp    $0x5,%rcx
cmovge %edx,%eax
movss  %xmm0,(%rbx,%rcx,4)
mov    %eax,(%r12)
mov    0x0(%r13),%edi
add    $0x6,%edi
mov    0x10(%rsp),%ecx
cmp    %ecx,%edi
cmovg  %ecx,%edi
cmp    %edi,%eax
jge    135a <eval_highres_amdf+0x24a>
mov    %eax,%ecx
movslq %edi,%rdx
sub    %eax,%edi
mov    %rcx,%rsi
not    %rsi
test   $0x1,%dil
je     1355 <eval_highres_amdf+0x245>
movss  (%rbx,%rcx,4),%xmm0
movslq %eax,%rdi
ucomiss (%rbx,%rdi,4),%xmm0
jbe    1351 <eval_highres_amdf+0x241>
mov    %eax,(%r12)
add    $0x1,%rcx
add    %rdx,%rsi
jne    1379 <eval_highres_amdf+0x269>
add    $0x58,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
nopl   0x0(%rax)
add    $0x2,%rcx
cmp    %rcx,%rdx
je     135a <eval_highres_amdf+0x24a>
movss  (%rbx,%rcx,4),%xmm0
movslq %eax,%rsi
ucomiss (%rbx,%rsi,4),%xmm0
jbe    138d <eval_highres_amdf+0x27d>
mov    %ecx,(%r12)
mov    %ecx,%eax
movss  0x4(%rbx,%rcx,4),%xmm0
movslq %eax,%rsi
ucomiss (%rbx,%rsi,4),%xmm0
jbe    1370 <eval_highres_amdf+0x260>
lea    0x1(%rcx),%eax
mov    %eax,(%r12)
jmp    1370 <eval_highres_amdf+0x260>

LLVM IR (-O0):
define void @eval_highres_amdf(float* %0, i32 %1, i32* %2, i32 %3, float* %4, i32* %5, i32* %6, i32* %7) {
%9 = alloca float*
%10 = alloca i32
%11 = alloca i32*
%12 = alloca i32
%13 = alloca float*
%14 = alloca i32*
%15 = alloca i32*
%16 = alloca i32*
%17 = alloca [6 x float]
%18 = alloca [6 x i32]
%19 = alloca i32
%20 = alloca i32
%21 = alloca i32
%22 = alloca i32
%23 = alloca i32
%24 = alloca i32
%25 = alloca i32
store float* %0, float** %9
store i32 %1, i32* %10
store i32* %2, i32** %11
store i32 %3, i32* %12
store float* %4, float** %13
store i32* %5, i32** %14
store i32* %6, i32** %15
store i32* %7, i32** %16
%26 = load float*, float** %9
%27 = load i32, i32* %10
%28 = load i32*, i32** %11
%29 = load i32, i32* %12
%30 = load i32*, i32** %11
%31 = load i32, i32* %12
%32 = sub nsw i32 %31, 1
%33 = sext i32 %32 to i64
%34 = getelementptr inbounds i32, i32* %30, i64 %33
%35 = load i32, i32* %34
%36 = load float*, float** %13
%37 = load i32*, i32** %14
%38 = load i32*, i32** %15
%39 = call i32 @eval_amdf(float* %26, i32 %27, i32* %28, i32 %29, i32 %35, float* %36, i32* %37, i32* %38)
%40 = load i32*, i32** %11
%41 = load i32*, i32** %14
%42 = load i32, i32* %41
%43 = sext i32 %42 to i64
%44 = getelementptr inbounds i32, i32* %40, i64 %43
%45 = load i32, i32* %44
%46 = load i32*, i32** %16
store i32 %45, i32* %46
%47 = load float*, float** %13
%48 = load i32*, i32** %14
%49 = load i32, i32* %48
%50 = sext i32 %49 to i64
%51 = getelementptr inbounds float, float* %47, i64 %50
%52 = load float, float* %51
%53 = fptosi float %52 to i32
store i32 %53, i32* %22
store i32 0, i32* %20
%54 = load i32*, i32** %14
%55 = load i32, i32* %54
%56 = sub nsw i32 %55, 2
store i32 %56, i32* %25
%57 = load i32*, i32** %16
%58 = load i32, i32* %57
%59 = add nsw i32 %58, 4
%60 = load i32*, i32** %11
%61 = load i32, i32* %12
%62 = sub nsw i32 %61, 1
%63 = sext i32 %62 to i64
%64 = getelementptr inbounds i32, i32* %60, i64 %63
%65 = load i32, i32* %64
%66 = icmp sle i32 %59, %65
br i1 %66, label %67, label %71
67: ; preds = %8
%68 = load i32*, i32** %16
%69 = load i32, i32* %68
%70 = add nsw i32 %69, 4
br label %78
71: ; preds = %8
%72 = load i32*, i32** %11
%73 = load i32, i32* %12
%74 = sub nsw i32 %73, 1
%75 = sext i32 %74 to i64
%76 = getelementptr inbounds i32, i32* %72, i64 %75
%77 = load i32, i32* %76
br label %78
78: ; preds = %71, %67
%79 = phi i32 [ %70, %67 ], [ %77, %71 ]
store i32 %79, i32* %24
%80 = load i32*, i32** %16
%81 = load i32, i32* %80
%82 = sub nsw i32 %81, 3
%83 = icmp sge i32 %82, 41
br i1 %83, label %84, label %88
84: ; preds = %78
%85 = load i32*, i32** %16
%86 = load i32, i32* %85
%87 = sub nsw i32 %86, 3
br label %89
88: ; preds = %78
br label %89
89: ; preds = %88, %84
%90 = phi i32 [ %87, %84 ], [ 41, %88 ]
store i32 %90, i32* %23
br label %91
91: ; preds = %122, %89
%92 = load i32, i32* %23
%93 = load i32, i32* %24
%94 = icmp slt i32 %92, %93
br i1 %94, label %95, label %125
95: ; preds = %91
br label %96
96: ; preds = %104, %95
%97 = load i32*, i32** %11
%98 = load i32, i32* %25
%99 = sext i32 %98 to i64
%100 = getelementptr inbounds i32, i32* %97, i64 %99
%101 = load i32, i32* %100
%102 = load i32, i32* %23
%103 = icmp slt i32 %101, %102
br i1 %103, label %104, label %107
104: ; preds = %96
%105 = load i32, i32* %25
%106 = add nsw i32 %105, 1
store i32 %106, i32* %25
br label %96
107: ; preds = %96
%108 = load i32*, i32** %11
%109 = load i32, i32* %25
%110 = sext i32 %109 to i64
%111 = getelementptr inbounds i32, i32* %108, i64 %110
%112 = load i32, i32* %111
%113 = load i32, i32* %23
%114 = icmp ne i32 %112, %113
br i1 %114, label %115, label %121
115: ; preds = %107
%116 = load i32, i32* %23
%117 = load i32, i32* %20
%118 = add nsw i32 %117, 1
store i32 %118, i32* %20
%119 = sext i32 %117 to i64
%120 = getelementptr inbounds [6 x i32], [6 x i32]* %18, i64 0, i64 %119
store i32 %116, i32* %120
br label %121
121: ; preds = %115, %107
br label %122
122: ; preds = %121
%123 = load i32, i32* %23
%124 = add nsw i32 %123, 1
store i32 %124, i32* %23
br label %91
125: ; preds = %91
%126 = load i32, i32* %20
%127 = icmp sgt i32 %126, 0
br i1 %127, label %128, label %160
128: ; preds = %125
%129 = load float*, float** %9
%130 = load i32, i32* %10
%131 = getelementptr inbounds [6 x i32], [6 x i32]* %18, i64 0, i64 0
%132 = load i32, i32* %20
%133 = load i32*, i32** %11
%134 = load i32, i32* %12
%135 = sub nsw i32 %134, 1
%136 = sext i32 %135 to i64
%137 = getelementptr inbounds i32, i32* %133, i64 %136
%138 = load i32, i32* %137
%139 = getelementptr inbounds [6 x float], [6 x float]* %17, i64 0, i64 0
%140 = call i32 @eval_amdf(float* %129, i32 %130, i32* %131, i32 %132, i32 %138, float* %139, i32* %19, i32* %21)
%141 = load i32, i32* %19
%142 = sext i32 %141 to i64
%143 = getelementptr inbounds [6 x float], [6 x float]* %17, i64 0, i64 %142
%144 = load float, float* %143
%145 = load i32, i32* %22
%146 = sitofp i32 %145 to float
%147 = fcmp olt float %144, %146
br i1 %147, label %148, label %159
148: ; preds = %128
%149 = load i32, i32* %19
%150 = sext i32 %149 to i64
%151 = getelementptr inbounds [6 x i32], [6 x i32]* %18, i64 0, i64 %150
%152 = load i32, i32* %151
%153 = load i32*, i32** %16
store i32 %152, i32* %153
%154 = load i32, i32* %19
%155 = sext i32 %154 to i64
%156 = getelementptr inbounds [6 x float], [6 x float]* %17, i64 0, i64 %155
%157 = load float, float* %156
%158 = fptosi float %157 to i32
store i32 %158, i32* %22
br label %159
159: ; preds = %148, %128
br label %160
160: ; preds = %159, %125
%161 = load i32*, i32** %16
%162 = load i32, i32* %161
%163 = icmp sge i32 %162, 80
br i1 %163, label %164, label %216
164: ; preds = %160
%165 = load i32*, i32** %16
%166 = load i32, i32* %165
%167 = sdiv i32 %166, 2
store i32 %167, i32* %23
%168 = load i32, i32* %23
%169 = and i32 %168, 1
%170 = icmp eq i32 %169, 0
br i1 %170, label %171, label %178
171: ; preds = %164
store i32 2, i32* %20
%172 = load i32, i32* %23
%173 = sub nsw i32 %172, 1
%174 = getelementptr inbounds [6 x i32], [6 x i32]* %18, i64 0, i64 0
store i32 %173, i32* %174
%175 = load i32, i32* %23
%176 = add nsw i32 %175, 1
%177 = getelementptr inbounds [6 x i32], [6 x i32]* %18, i64 0, i64 1
store i32 %176, i32* %177
br label %181
178: ; preds = %164
store i32 1, i32* %20
%179 = load i32, i32* %23
%180 = getelementptr inbounds [6 x i32], [6 x i32]* %18, i64 0, i64 0
store i32 %179, i32* %180
br label %181
181: ; preds = %178, %171
%182 = load float*, float** %9
%183 = load i32, i32* %10
%184 = getelementptr inbounds [6 x i32], [6 x i32]* %18, i64 0, i64 0
%185 = load i32, i32* %20
%186 = load i32*, i32** %11
%187 = load i32, i32* %12
%188 = sub nsw i32 %187, 1
%189 = sext i32 %188 to i64
%190 = getelementptr inbounds i32, i32* %186, i64 %189
%191 = load i32, i32* %190
%192 = getelementptr inbounds [6 x float], [6 x float]* %17, i64 0, i64 0
%193 = call i32 @eval_amdf(float* %182, i32 %183, i32* %184, i32 %185, i32 %191, float* %192, i32* %19, i32* %21)
%194 = load i32, i32* %19
%195 = sext i32 %194 to i64
%196 = getelementptr inbounds [6 x float], [6 x float]* %17, i64 0, i64 %195
%197 = load float, float* %196
%198 = load i32, i32* %22
%199 = sitofp i32 %198 to float
%200 = fcmp olt float %197, %199
br i1 %200, label %201, label %215
201: ; preds = %181
%202 = load i32, i32* %19
%203 = sext i32 %202 to i64
%204 = getelementptr inbounds [6 x i32], [6 x i32]* %18, i64 0, i64 %203
%205 = load i32, i32* %204
%206 = load i32*, i32** %16
store i32 %205, i32* %206
%207 = load i32, i32* %19
%208 = sext i32 %207 to i64
%209 = getelementptr inbounds [6 x float], [6 x float]* %17, i64 0, i64 %208
%210 = load float, float* %209
%211 = fptosi float %210 to i32
store i32 %211, i32* %22
%212 = load i32*, i32** %14
%213 = load i32, i32* %212
%214 = sub nsw i32 %213, 20
store i32 %214, i32* %212
br label %215
215: ; preds = %201, %181
br label %216
216: ; preds = %215, %160
%217 = load i32, i32* %22
%218 = sitofp i32 %217 to float
%219 = load float*, float** %13
%220 = load i32*, i32** %14
%221 = load i32, i32* %220
%222 = sext i32 %221 to i64
%223 = getelementptr inbounds float, float* %219, i64 %222
store float %218, float* %223
%224 = load i32*, i32** %14
%225 = load i32, i32* %224
%226 = sub nsw i32 %225, 5
%227 = icmp sge i32 %226, 0
br i1 %227, label %228, label %232
228: ; preds = %216
%229 = load i32*, i32** %14
%230 = load i32, i32* %229
%231 = sub nsw i32 %230, 5
br label %233
232: ; preds = %216
br label %233
233: ; preds = %232, %228
%234 = phi i32 [ %231, %228 ], [ 0, %232 ]
%235 = load i32*, i32** %15
store i32 %234, i32* %235
%236 = load i32*, i32** %14
%237 = load i32, i32* %236
%238 = add nsw i32 %237, 6
%239 = load i32, i32* %12
%240 = icmp sle i32 %238, %239
br i1 %240, label %241, label %245
241: ; preds = %233
%242 = load i32*, i32** %14
%243 = load i32, i32* %242
%244 = add nsw i32 %243, 6
br label %247
245: ; preds = %233
%246 = load i32, i32* %12
br label %247
247: ; preds = %245, %241
%248 = phi i32 [ %244, %241 ], [ %246, %245 ]
store i32 %248, i32* %24
%249 = load i32*, i32** %15
%250 = load i32, i32* %249
store i32 %250, i32* %23
br label %251
251: ; preds = %272, %247
%252 = load i32, i32* %23
%253 = load i32, i32* %24
%254 = icmp slt i32 %252, %253
br i1 %254, label %255, label %275
255: ; preds = %251
%256 = load float*, float** %13
%257 = load i32, i32* %23
%258 = sext i32 %257 to i64
%259 = getelementptr inbounds float, float* %256, i64 %258
%260 = load float, float* %259
%261 = load float*, float** %13
%262 = load i32*, i32** %15
%263 = load i32, i32* %262
%264 = sext i32 %263 to i64
%265 = getelementptr inbounds float, float* %261, i64 %264
%266 = load float, float* %265
%267 = fcmp ogt float %260, %266
br i1 %267, label %268, label %271
268: ; preds = %255
%269 = load i32, i32* %23
%270 = load i32*, i32** %15
store i32 %269, i32* %270
br label %271
271: ; preds = %268, %255
br label %272
272: ; preds = %271
%273 = load i32, i32* %23
%274 = add nsw i32 %273, 1
store i32 %274, i32* %23
br label %251
275: ; preds = %251
ret void
}

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