#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*/ difmag(float *, long *, long, long, float *, long *, long *);
void tbdm(float *speech, long *tau, float *amdf, long *minptr, long *maxptr,
          long *mintau) {
  float amdf2[6];
  long minp2, ltau2, maxp2, i, j;
  long minamd, ptr, tau2[6];
  --amdf;
  --tau;
  difmag(speech, &tau[1], 60, tau[60], &amdf[1], minptr, maxptr);
  *mintau = tau[*minptr];
  minamd = (long)amdf[*minptr];
  ltau2 = 0;
  ptr = *minptr - 2;
  j = ((*mintau + 3) <= (tau[60] - 1) ? (*mintau + 3) : (tau[60] - 1));
  i = ((*mintau - 3) >= (41) ? (*mintau - 3) : (41));
  for (; i <= j; ++i) {
    while (tau[ptr] < i) {
      ++ptr;
    }
    if (tau[ptr] != i) {
      ++ltau2;
      tau2[ltau2 - 1] = i;
    }
  }
  if (ltau2 > 0) {
    difmag(speech, tau2, ltau2, tau[60], amdf2, &minp2, &maxp2);
    if (amdf2[minp2 - 1] < (float)minamd) {
      *mintau = tau2[minp2 - 1];
      minamd = (long)amdf2[minp2 - 1];
    }
  }
  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;
    }
    difmag(speech, tau2, ltau2, tau[60], amdf2, &minp2, &maxp2);
    if (amdf2[minp2 - 1] < (float)minamd) {
      *mintau = tau2[minp2 - 1];
      minamd = (long)amdf2[minp2 - 1];
      *minptr += -20;
    }
  }
  amdf[*minptr] = (float)minamd;
  *maxptr = ((*minptr - 5) >= (1) ? (*minptr - 5) : (1));
  j = ((*minptr + 5) <= (60) ? (*minptr + 5) : (60));
  for (i = *maxptr + 1; i <= j; ++i) {
    if (amdf[i] > amdf[*maxptr]) {
      *maxptr = i;
    }
  }
}


x86 assembly (clang, -O0):
<tbdm>:
push   %rbp
mov    %rsp,%rbp
sub    $0xf0,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
mov    -0x18(%rbp),%rax
add    $0xfffffffffffffffc,%rax
mov    %rax,-0x18(%rbp)
mov    -0x10(%rbp),%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,-0x10(%rbp)
mov    -0x8(%rbp),%rdi
mov    -0x10(%rbp),%rsi
add    $0x8,%rsi
mov    -0x10(%rbp),%rax
mov    0x1e0(%rax),%rcx
mov    -0x18(%rbp),%r8
add    $0x4,%r8
mov    -0x20(%rbp),%r9
mov    -0x28(%rbp),%rax
mov    $0x3c,%edx
mov    %rax,(%rsp)
call   1030 <difmag@plt>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
mov    (%rcx),%rcx
mov    (%rax,%rcx,8),%rcx
mov    -0x30(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x18(%rbp),%rax
mov    -0x20(%rbp),%rcx
mov    (%rcx),%rcx
cvttss2si (%rax,%rcx,4),%rax
mov    %rax,-0x80(%rbp)
movq   $0x0,-0x60(%rbp)
mov    -0x20(%rbp),%rax
mov    (%rax),%rax
sub    $0x2,%rax
mov    %rax,-0x88(%rbp)
mov    -0x30(%rbp),%rax
mov    (%rax),%rax
add    $0x3,%rax
mov    -0x10(%rbp),%rcx
mov    0x1e0(%rcx),%rcx
sub    $0x1,%rcx
cmp    %rcx,%rax
jg     11ff <tbdm+0xef>
mov    -0x30(%rbp),%rax
mov    (%rax),%rax
add    $0x3,%rax
mov    %rax,-0xc8(%rbp)
jmp    1215 <tbdm+0x105>
mov    -0x10(%rbp),%rax
mov    0x1e0(%rax),%rax
sub    $0x1,%rax
mov    %rax,-0xc8(%rbp)
mov    -0xc8(%rbp),%rax
mov    %rax,-0x78(%rbp)
mov    -0x30(%rbp),%rax
mov    (%rax),%rax
sub    $0x3,%rax
cmp    $0x29,%rax
jl     124c <tbdm+0x13c>
mov    -0x30(%rbp),%rax
mov    (%rax),%rax
sub    $0x3,%rax
mov    %rax,-0xd0(%rbp)
jmp    125d <tbdm+0x14d>
mov    $0x29,%eax
mov    %rax,-0xd0(%rbp)
jmp    125d <tbdm+0x14d>
mov    -0xd0(%rbp),%rax
mov    %rax,-0x70(%rbp)
mov    -0x70(%rbp),%rax
cmp    -0x78(%rbp),%rax
jg     12fa <tbdm+0x1ea>
jmp    127b <tbdm+0x16b>
mov    -0x10(%rbp),%rax
mov    -0x88(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
cmp    -0x70(%rbp),%rax
jge    12ab <tbdm+0x19b>
mov    -0x88(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x88(%rbp)
jmp    127b <tbdm+0x16b>
mov    -0x10(%rbp),%rax
mov    -0x88(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
cmp    -0x70(%rbp),%rax
je     12e4 <tbdm+0x1d4>
mov    -0x60(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x60(%rbp)
mov    -0x70(%rbp),%rcx
mov    -0x60(%rbp),%rax
sub    $0x1,%rax
mov    %rcx,-0xc0(%rbp,%rax,8)
ff
jmp    12e9 <tbdm+0x1d9>
mov    -0x70(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x70(%rbp)
jmp    1268 <tbdm+0x158>
cmpq   $0x0,-0x60(%rbp)
jle    1380 <tbdm+0x270>
mov    -0x8(%rbp),%rdi
lea    -0xc0(%rbp),%rsi
mov    -0x60(%rbp),%rdx
mov    -0x10(%rbp),%rax
mov    0x1e0(%rax),%rcx
lea    -0x50(%rbp),%r8
lea    -0x58(%rbp),%r9
lea    -0x68(%rbp),%rax
mov    %rax,(%rsp)
call   1030 <difmag@plt>
mov    -0x58(%rbp),%rax
sub    $0x1,%rax
movss  -0x50(%rbp,%rax,4),%xmm1
cvtsi2ssq -0x80(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    137b <tbdm+0x26b>
mov    -0x58(%rbp),%rax
sub    $0x1,%rax
mov    -0xc0(%rbp,%rax,8),%rcx
ff
mov    -0x30(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x58(%rbp),%rax
sub    $0x1,%rax
cvttss2si -0x50(%rbp,%rax,4),%rax
mov    %rax,-0x80(%rbp)
jmp    1380 <tbdm+0x270>
mov    -0x30(%rbp),%rax
cmpq   $0x50,(%rax)
jl     147c <tbdm+0x36c>
mov    -0x30(%rbp),%rax
mov    (%rax),%rax
mov    $0x2,%ecx
cqto
idiv   %rcx
mov    %rax,-0x70(%rbp)
mov    -0x70(%rbp),%rax
and    $0x1,%rax
cmp    $0x0,%rax
jne    13e0 <tbdm+0x2d0>
movq   $0x2,-0x60(%rbp)
mov    -0x70(%rbp),%rax
sub    $0x1,%rax
mov    %rax,-0xc0(%rbp)
mov    -0x70(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0xb8(%rbp)
jmp    13f3 <tbdm+0x2e3>
movq   $0x1,-0x60(%rbp)
mov    -0x70(%rbp),%rax
mov    %rax,-0xc0(%rbp)
mov    -0x8(%rbp),%rdi
lea    -0xc0(%rbp),%rsi
mov    -0x60(%rbp),%rdx
mov    -0x10(%rbp),%rax
mov    0x1e0(%rax),%rcx
lea    -0x50(%rbp),%r8
lea    -0x58(%rbp),%r9
lea    -0x68(%rbp),%rax
mov    %rax,(%rsp)
call   1030 <difmag@plt>
mov    -0x58(%rbp),%rax
sub    $0x1,%rax
movss  -0x50(%rbp,%rax,4),%xmm1
cvtsi2ssq -0x80(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    1477 <tbdm+0x367>
mov    -0x58(%rbp),%rax
sub    $0x1,%rax
mov    -0xc0(%rbp,%rax,8),%rcx
ff
mov    -0x30(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x58(%rbp),%rax
sub    $0x1,%rax
cvttss2si -0x50(%rbp,%rax,4),%rax
mov    %rax,-0x80(%rbp)
mov    -0x20(%rbp),%rax
mov    (%rax),%rcx
add    $0xffffffffffffffec,%rcx
mov    %rcx,(%rax)
jmp    147c <tbdm+0x36c>
cvtsi2ssq -0x80(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x20(%rbp),%rcx
mov    (%rcx),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x20(%rbp),%rax
mov    (%rax),%rax
sub    $0x5,%rax
cmp    $0x1,%rax
jl     14be <tbdm+0x3ae>
mov    -0x20(%rbp),%rax
mov    (%rax),%rax
sub    $0x5,%rax
mov    %rax,-0xd8(%rbp)
jmp    14cf <tbdm+0x3bf>
mov    $0x1,%eax
mov    %rax,-0xd8(%rbp)
jmp    14cf <tbdm+0x3bf>
mov    -0xd8(%rbp),%rcx
mov    -0x28(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x20(%rbp),%rax
mov    (%rax),%rax
add    $0x5,%rax
cmp    $0x3c,%rax
jg     1509 <tbdm+0x3f9>
mov    -0x20(%rbp),%rax
mov    (%rax),%rax
add    $0x5,%rax
mov    %rax,-0xe0(%rbp)
jmp    151a <tbdm+0x40a>
mov    $0x3c,%eax
mov    %rax,-0xe0(%rbp)
jmp    151a <tbdm+0x40a>
mov    -0xe0(%rbp),%rax
mov    %rax,-0x78(%rbp)
mov    -0x28(%rbp),%rax
mov    (%rax),%rax
add    $0x1,%rax
mov    %rax,-0x70(%rbp)
mov    -0x70(%rbp),%rax
cmp    -0x78(%rbp),%rax
jg     1585 <tbdm+0x475>
mov    -0x18(%rbp),%rax
mov    -0x70(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    (%rcx),%rcx
ucomiss (%rax,%rcx,4),%xmm0
jbe    156f <tbdm+0x45f>
mov    -0x70(%rbp),%rcx
mov    -0x28(%rbp),%rax
mov    %rcx,(%rax)
jmp    1574 <tbdm+0x464>
mov    -0x70(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x70(%rbp)
jmp    1534 <tbdm+0x424>
add    $0xf0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<tbdm>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x78,%rsp
mov    %r9,%rbx
mov    %r8,%r14
mov    %rcx,%r15
mov    %rdx,%r13
mov    %rsi,%rbp
mov    0x1d8(%rsi),%rcx
mov    %r8,(%rsp)
mov    $0x3c,%edx
mov    %rdi,0x20(%rsp)
mov    %r13,%r8
mov    %r15,%r9
call   1030 <difmag@plt>
mov    (%r15),%rax
mov    -0x8(%rbp,%rax,8),%r8
mov    %rbx,0x10(%rsp)
mov    %r8,(%rbx)
mov    (%r15),%rax
cvttss2si -0x4(%r13,%rax,4),%r12
lea    0x3(%r8),%rsi
mov    0x1d8(%rbp),%rcx
lea    -0x1(%rcx),%rdx
cmp    %rcx,%rsi
cmovl  %rsi,%rdx
lea    -0x3(%r8),%rdi
cmp    $0x2c,%r8
mov    $0x29,%esi
cmovge %rdi,%rsi
mov    %rdx,%r9
sub    %rsi,%r9
jl     1229 <tbdm+0x119>
add    $0xfffffffffffffffe,%rax
add    $0x1,%r9
cmp    %rsi,%rdx
jne    12be <tbdm+0x1ae>
xor    %edx,%edx
test   $0x1,%r9b
je     11d7 <tbdm+0xc7>
lea    -0x8(,%rax,8),%rax
ff
add    %rbp,%rax
xchg   %ax,%ax
lea    0x8(%rax),%rdi
cmp    %rsi,(%rax)
mov    %rdi,%rax
jl     11c0 <tbdm+0xb0>
je     11d7 <tbdm+0xc7>
mov    %rsi,0x30(%rsp,%rdx,8)
add    $0x1,%rdx
test   %rdx,%rdx
jle    1229 <tbdm+0x119>
lea    0x28(%rsp),%rax
mov    %rax,(%rsp)
lea    0x30(%rsp),%rsi
lea    0x60(%rsp),%r8
lea    0x18(%rsp),%r9
mov    0x20(%rsp),%rdi
call   1030 <difmag@plt>
cvtsi2ss %r12,%xmm1
mov    0x18(%rsp),%rax
movss  0x5c(%rsp,%rax,4),%xmm0
ucomiss %xmm0,%xmm1
jbe    132b <tbdm+0x21b>
mov    0x28(%rsp,%rax,8),%r8
mov    0x10(%rsp),%rax
mov    %r8,(%rax)
cvttss2si %xmm0,%r12
cmp    $0x50,%r8
jl     133d <tbdm+0x22d>
mov    %r8,%rax
shr    %rax
mov    $0x1,%edx
test   $0x2,%r8b
jne    1259 <tbdm+0x149>
lea    -0x1(%rax),%rcx
add    $0x1,%rax
mov    %rax,0x38(%rsp)
mov    $0x2,%edx
mov    %rcx,%rax
mov    %rax,0x30(%rsp)
mov    0x1d8(%rbp),%rcx
lea    0x28(%rsp),%rax
mov    %rax,(%rsp)
lea    0x30(%rsp),%rsi
lea    0x60(%rsp),%r8
lea    0x18(%rsp),%r9
mov    0x20(%rsp),%rdi
call   1030 <difmag@plt>
xorps  %xmm1,%xmm1
cvtsi2ss %r12,%xmm1
mov    0x18(%rsp),%rax
movss  0x5c(%rsp,%rax,4),%xmm0
ucomiss %xmm0,%xmm1
jbe    133d <tbdm+0x22d>
mov    0x28(%rsp,%rax,8),%rax
cvttss2si %xmm0,%r12
mov    0x10(%rsp),%rcx
mov    %rax,(%rcx)
addq   $0xffffffffffffffec,(%r15)
jmp    133d <tbdm+0x22d>
mov    %r9,%r10
and    $0xfffffffffffffffe,%r10
xor    %edx,%edx
xor    %r11d,%r11d
jmp    12e1 <tbdm+0x1d1>
nopl   0x0(%rax)
add    $0x2,%rsi
add    $0x2,%r11
cmp    %r10,%r11
je     11ad <tbdm+0x9d>
add    $0xffffffffffffffff,%rax
mov    %rax,%rdi
nopl   0x0(%rax,%rax,1)
mov    %rdi,%rax
add    $0x1,%rdi
cmp    %rsi,0x0(%rbp,%rax,8)
jl     12f0 <tbdm+0x1e0>
je     1309 <tbdm+0x1f9>
mov    %rsi,0x30(%rsp,%rdx,8)
add    $0x1,%rdx
lea    0x1(%rsi),%rbx
nopl   (%rax)
mov    %rax,%rdi
add    $0x1,%rax
cmp    %rbx,0x0(%rbp,%rdi,8)
jl     1310 <tbdm+0x200>
je     12d0 <tbdm+0x1c0>
mov    %rbx,0x30(%rsp,%rdx,8)
add    $0x1,%rdx
jmp    12d0 <tbdm+0x1c0>
mov    0x10(%rsp),%rax
mov    (%rax),%r8
cmp    $0x50,%r8
jge    1233 <tbdm+0x123>
xorps  %xmm0,%xmm0
cvtsi2ss %r12,%xmm0
mov    (%r15),%rax
movss  %xmm0,-0x4(%r13,%rax,4)
lea    -0x5(%rax),%rcx
cmp    $0x6,%rax
mov    $0x1,%eax
cmovge %rcx,%rax
mov    %rax,(%r14)
mov    (%r15),%rcx
lea    0x5(%rcx),%rdx
cmp    $0x38,%rcx
mov    $0x3c,%ecx
cmovl  %rdx,%rcx
cmp    %rax,%rcx
jle    13ae <tbdm+0x29e>
mov    %ecx,%edx
sub    %eax,%edx
lea    0x1(%rax),%rsi
test   $0x1,%dl
jne    138e <tbdm+0x27e>
mov    %rax,%rdx
jmp    13a9 <tbdm+0x299>
movss  0x0(%r13,%rax,4),%xmm0
ucomiss -0x4(%r13,%rax,4),%xmm0
mov    %rsi,%rdx
jbe    13a9 <tbdm+0x299>
mov    %rsi,(%r14)
mov    %rsi,%rax
mov    %rsi,%rdx
cmp    %rsi,%rcx
jne    13bd <tbdm+0x2ad>
add    $0x78,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
neg    %rcx
add    $0x1,%rdx
jmp    13e2 <tbdm+0x2d2>
cs nopw 0x0(%rax,%rax,1)
lea    (%rcx,%rdx,1),%rsi
add    $0x2,%rsi
add    $0x2,%rdx
cmp    $0x1,%rsi
je     13ae <tbdm+0x29e>
movss  -0x4(%r13,%rdx,4),%xmm0
ucomiss -0x4(%r13,%rax,4),%xmm0
jbe    13f7 <tbdm+0x2e7>
mov    %rdx,(%r14)
mov    %rdx,%rax
movss  0x0(%r13,%rdx,4),%xmm0
ucomiss -0x4(%r13,%rax,4),%xmm0
jbe    13d0 <tbdm+0x2c0>
lea    0x1(%rdx),%rax
mov    %rax,(%r14)
jmp    13d0 <tbdm+0x2c0>

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

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