#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 */
double INFINITY;
int /*<<< orphan*/ free(double *);
scalar_t__ malloc(size_t);
void fast_incr_eps(double *eps_i, double *A, double *B, size_t numelA,
                   size_t numelB, size_t nObjs) {
  double *eps_j = (double *)malloc(numelA * sizeof(double));
  for (size_t j = 0; j < numelA; j++)
    eps_i[j] = 0.0;
  for (size_t i = 0; i < numelB; i++) {
    for (size_t j = 0; j < numelA; j++)
      eps_j[j] = INFINITY;
    for (size_t j = 0; j < numelA; j++) {
      double eps_k = 0.0;
      for (size_t k = 0; k < nObjs; k++)
        eps_k = (((eps_k) > (A[j * nObjs + k] - B[i * nObjs + k]))
                     ? (eps_k)
                     : (A[j * nObjs + k] - B[i * nObjs + k]));
      if (j > 0)
        eps_j[j] = (((eps_j[j - 1]) < (eps_k)) ? (eps_j[j - 1]) : (eps_k));
      else
        eps_j[j] = (((eps_j[j]) < (eps_k)) ? (eps_j[j]) : (eps_k));
    }
    for (size_t j = 0; j < numelA; j++)
      eps_i[j] = (((eps_i[j]) > (eps_j[j])) ? (eps_i[j]) : (eps_j[j]));
  }
  free(eps_j);
}


x86 assembly (clang, -O0):
<fast_incr_eps>:
push   %rbp
mov    %rsp,%rbp
sub    $0x90,%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    -0x20(%rbp),%rdi
shl    $0x3,%rdi
call   1040 <malloc@plt>
mov    %rax,-0x38(%rbp)
movq   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%rax
cmp    -0x20(%rbp),%rax
jae    118b <fast_incr_eps+0x6b>
mov    -0x8(%rbp),%rax
mov    -0x40(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x40(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x40(%rbp)
jmp    115c <fast_incr_eps+0x3c>
movq   $0x0,-0x48(%rbp)
mov    -0x48(%rbp),%rax
cmp    -0x28(%rbp),%rax
jae    1420 <fast_incr_eps+0x300>
movq   $0x0,-0x50(%rbp)
mov    -0x50(%rbp),%rax
cmp    -0x20(%rbp),%rax
jae    11e0 <fast_incr_eps+0xc0>
mov    0x2e2a(%rip),%rax
movsd  (%rax),%xmm0
mov    -0x38(%rbp),%rax
mov    -0x50(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x50(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x50(%rbp)
jmp    11a9 <fast_incr_eps+0x89>
movq   $0x0,-0x58(%rbp)
mov    -0x58(%rbp),%rax
cmp    -0x20(%rbp),%rax
jae    137f <fast_incr_eps+0x25f>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x60(%rbp)
movq   $0x0,-0x68(%rbp)
mov    -0x68(%rbp),%rax
cmp    -0x30(%rbp),%rax
jae    12aa <fast_incr_eps+0x18a>
movsd  -0x60(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x58(%rbp),%rcx
imul   -0x30(%rbp),%rcx
add    -0x68(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x18(%rbp),%rax
mov    -0x48(%rbp),%rcx
imul   -0x30(%rbp),%rcx
add    -0x68(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm1
ucomisd %xmm1,%xmm0
jbe    125e <fast_incr_eps+0x13e>
movsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
jmp    128f <fast_incr_eps+0x16f>
mov    -0x10(%rbp),%rax
mov    -0x58(%rbp),%rcx
imul   -0x30(%rbp),%rcx
add    -0x68(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x48(%rbp),%rcx
imul   -0x30(%rbp),%rcx
add    -0x68(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x68(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x68(%rbp)
jmp    1206 <fast_incr_eps+0xe6>
cmpq   $0x0,-0x58(%rbp)
jbe    1311 <fast_incr_eps+0x1f1>
mov    -0x38(%rbp),%rax
mov    -0x58(%rbp),%rcx
sub    $0x1,%rcx
movsd  (%rax,%rcx,8),%xmm1
movsd  -0x60(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    12f0 <fast_incr_eps+0x1d0>
mov    -0x38(%rbp),%rax
mov    -0x58(%rbp),%rcx
sub    $0x1,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x80(%rbp)
jmp    12fa <fast_incr_eps+0x1da>
movsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x80(%rbp),%xmm0
mov    -0x38(%rbp),%rax
mov    -0x58(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    1369 <fast_incr_eps+0x249>
mov    -0x38(%rbp),%rax
mov    -0x58(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
movsd  -0x60(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    1347 <fast_incr_eps+0x227>
mov    -0x38(%rbp),%rax
mov    -0x58(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
jmp    1354 <fast_incr_eps+0x234>
movsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
mov    -0x38(%rbp),%rax
mov    -0x58(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    136e <fast_incr_eps+0x24e>
mov    -0x58(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x58(%rbp)
jmp    11e8 <fast_incr_eps+0xc8>
movq   $0x0,-0x70(%rbp)
mov    -0x70(%rbp),%rax
cmp    -0x20(%rbp),%rax
jae    140a <fast_incr_eps+0x2ea>
mov    -0x8(%rbp),%rax
mov    -0x70(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x38(%rbp),%rax
mov    -0x70(%rbp),%rcx
ucomisd (%rax,%rcx,8),%xmm0
jbe    13cf <fast_incr_eps+0x2af>
mov    -0x8(%rbp),%rax
mov    -0x70(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
jmp    13e4 <fast_incr_eps+0x2c4>
mov    -0x38(%rbp),%rax
mov    -0x70(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x8(%rbp),%rax
mov    -0x70(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x70(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x70(%rbp)
jmp    1387 <fast_incr_eps+0x267>
jmp    140f <fast_incr_eps+0x2ef>
mov    -0x48(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x48(%rbp)
jmp    1193 <fast_incr_eps+0x73>
mov    -0x38(%rbp),%rdi
call   1030 <free@plt>
add    $0x90,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<fast_incr_eps>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x78,%rsp
mov    %r9,%r12
mov    %r8,%r13
mov    %rcx,%r15
mov    %rdx,0x20(%rsp)
mov    %rsi,0x18(%rsp)
mov    %rdi,%rbp
lea    0x0(,%rcx,8),%rbx
mov    %rbx,%rdi
call   1050 <malloc@plt>
mov    %rax,%r14
test   %r15,%r15
je     1179 <fast_incr_eps+0x49>
mov    %rbp,%rdi
xor    %esi,%esi
mov    %rbx,%rdx
call   1040 <memset@plt>
test   %r13,%r13
je     15e3 <fast_incr_eps+0x4b3>
lea    0x0(,%r15,8),%r8
add    %rbp,%r8
lea    (%r14,%r15,8),%rcx
lea    -0x4(%r15),%rdx
mov    %rdx,0x10(%rsp)
mov    %rdx,%rdi
shr    $0x2,%rdi
add    $0x1,%rdi
mov    0x2e3c(%rip),%rdx
lea    0x8(%rdx),%rsi
cmp    %rsi,%r14
setb   %bl
cmp    %rdx,%rcx
seta   %al
and    %bl,%al
mov    %al,0x7(%rsp)
mov    %r15,%rax
and    $0xfffffffffffffffc,%rax
mov    %rax,0x8(%rsp)
mov    %edi,%esi
and    $0x3,%esi
mov    %rdi,%rax
and    $0xfffffffffffffffc,%rax
mov    %rax,0x38(%rsp)
mov    %r15d,%r10d
and    $0x3,%r10d
mov    %r12,%rbx
and    $0xfffffffffffffffe,%rbx
cmp    %rbp,%rcx
seta   %cl
cmp    %r8,%r14
setb   %al
and    %cl,%al
mov    %al,0x6(%rsp)
movabs $0x7ffffffffffffffc,%rcx
ff ff 7f
or     $0x2,%rcx
mov    %rdi,%rax
mov    %rdi,0x30(%rsp)
and    %rdi,%rcx
mov    %rcx,0x28(%rsp)
mov    %r15,%rax
neg    %rax
mov    %rax,0x40(%rsp)
mov    %r14,%rax
add    $0x10,%rax
mov    %rax,0x48(%rsp)
mov    %rsi,0x50(%rsp)
mov    %rsi,%r11
shl    $0x5,%r11
mov    0x18(%rsp),%rax
add    $0x8,%rax
mov    %rax,0x58(%rsp)
lea    0x0(,%r12,8),%r9
mov    0x20(%rsp),%rax
lea    0x8(%rax),%r8
xor    %eax,%eax
mov    %r13,0x70(%rsp)
mov    %r10,0x68(%rsp)
mov    %r11,0x60(%rsp)
jmp    1290 <fast_incr_eps+0x160>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
add    $0x1,%rax
add    %r9,%r8
cmp    %r13,%rax
je     15e3 <fast_incr_eps+0x4b3>
test   %r15,%r15
je     1280 <fast_incr_eps+0x150>
cmp    $0x4,%r15
setb   %cl
or     0x7(%rsp),%cl
je     12b0 <fast_incr_eps+0x180>
xor    %ecx,%ecx
jmp    1351 <fast_incr_eps+0x221>
nopl   0x0(%rax)
cmpq   $0xc,0x10(%rsp)
jae    12bc <fast_incr_eps+0x18c>
xor    %ecx,%ecx
jmp    1311 <fast_incr_eps+0x1e1>
movsd  (%rdx),%xmm0
unpcklpd %xmm0,%xmm0
mov    0x38(%rsp),%rsi
xor    %ecx,%ecx
nopl   0x0(%rax,%rax,1)
movupd %xmm0,(%r14,%rcx,8)
movupd %xmm0,0x10(%r14,%rcx,8)
movupd %xmm0,0x20(%r14,%rcx,8)
movupd %xmm0,0x30(%r14,%rcx,8)
movupd %xmm0,0x40(%r14,%rcx,8)
movupd %xmm0,0x50(%r14,%rcx,8)
movupd %xmm0,0x60(%r14,%rcx,8)
movupd %xmm0,0x70(%r14,%rcx,8)
add    $0x10,%rcx
add    $0xfffffffffffffffc,%rsi
jne    12d0 <fast_incr_eps+0x1a0>
cmpq   $0x0,0x50(%rsp)
je     1344 <fast_incr_eps+0x214>
movsd  (%rdx),%xmm0
unpcklpd %xmm0,%xmm0
mov    0x48(%rsp),%rsi
lea    (%rsi,%rcx,8),%rcx
xor    %esi,%esi
nopl   0x0(%rax)
movupd %xmm0,-0x10(%rcx,%rsi,1)
movupd %xmm0,(%rcx,%rsi,1)
add    $0x20,%rsi
cmp    %rsi,%r11
jne    1330 <fast_incr_eps+0x200>
mov    0x8(%rsp),%rsi
mov    %rsi,%rcx
cmp    %r15,%rsi
je     13c4 <fast_incr_eps+0x294>
mov    %rcx,%rsi
not    %rsi
add    %r15,%rsi
test   %r10,%r10
je     1384 <fast_incr_eps+0x254>
mov    %r10,%rdi
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movsd  (%rdx),%xmm0
movsd  %xmm0,(%r14,%rcx,8)
add    $0x1,%rcx
add    $0xffffffffffffffff,%rdi
jne    1370 <fast_incr_eps+0x240>
cmp    $0x3,%rsi
jb     13c4 <fast_incr_eps+0x294>
nopw   0x0(%rax,%rax,1)
movsd  (%rdx),%xmm0
movsd  %xmm0,(%r14,%rcx,8)
movsd  (%rdx),%xmm0
movsd  %xmm0,0x8(%r14,%rcx,8)
movsd  (%rdx),%xmm0
movsd  %xmm0,0x10(%r14,%rcx,8)
movsd  (%rdx),%xmm0
movsd  %xmm0,0x18(%r14,%rcx,8)
add    $0x4,%rcx
cmp    %rcx,%r15
jne    1390 <fast_incr_eps+0x260>
test   %r15,%r15
je     1280 <fast_incr_eps+0x150>
mov    %rax,%r11
imul   %r12,%r11
mov    0x58(%rsp),%rcx
xor    %r13d,%r13d
jmp    13fe <fast_incr_eps+0x2ce>
xchg   %ax,%ax
movsd  (%r14),%xmm1
minsd  %xmm0,%xmm1
movsd  %xmm1,(%r14)
add    $0x1,%r13
add    %r9,%rcx
cmp    %r15,%r13
je     1490 <fast_incr_eps+0x360>
xorpd  %xmm0,%xmm0
test   %r12,%r12
je     1465 <fast_incr_eps+0x335>
xor    %edi,%edi
cmp    $0x1,%r12
je     1439 <fast_incr_eps+0x309>
nop
movsd  -0x8(%rcx,%rdi,8),%xmm1
movsd  (%rcx,%rdi,8),%xmm2
subsd  -0x8(%r8,%rdi,8),%xmm1
subsd  (%r8,%rdi,8),%xmm2
maxsd  %xmm1,%xmm0
maxsd  %xmm2,%xmm0
add    $0x2,%rdi
cmp    %rdi,%rbx
jne    1410 <fast_incr_eps+0x2e0>
test   $0x1,%r12b
je     1465 <fast_incr_eps+0x335>
mov    %r13,%rsi
imul   %r12,%rsi
add    %rdi,%rsi
mov    0x18(%rsp),%r10
movsd  (%r10,%rsi,8),%xmm1
add    %r11,%rdi
mov    0x20(%rsp),%rsi
subsd  (%rsi,%rdi,8),%xmm1
maxsd  %xmm1,%xmm0
test   %r13,%r13
je     13e0 <fast_incr_eps+0x2b0>
movsd  -0x8(%r14,%r13,8),%xmm1
minsd  %xmm0,%xmm1
movsd  %xmm1,(%r14,%r13,8)
jmp    13ee <fast_incr_eps+0x2be>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
test   %r15,%r15
mov    0x70(%rsp),%r13
mov    0x68(%rsp),%r10
mov    0x60(%rsp),%r11
je     1280 <fast_incr_eps+0x150>
cmp    $0x4,%r15
setb   %cl
or     0x6(%rsp),%cl
je     14bc <fast_incr_eps+0x38c>
xor    %esi,%esi
jmp    157a <fast_incr_eps+0x44a>
cmpq   $0x4,0x10(%rsp)
jae    14c8 <fast_incr_eps+0x398>
xor    %ecx,%ecx
jmp    1535 <fast_incr_eps+0x405>
mov    0x28(%rsp),%rsi
xor    %ecx,%ecx
nop
movupd (%r14,%rcx,8),%xmm0
movupd 0x10(%r14,%rcx,8),%xmm1
movupd 0x0(%rbp,%rcx,8),%xmm2
maxpd  %xmm0,%xmm2
movupd 0x10(%rbp,%rcx,8),%xmm0
maxpd  %xmm1,%xmm0
movupd 0x20(%rbp,%rcx,8),%xmm1
movupd 0x30(%rbp,%rcx,8),%xmm3
movupd %xmm2,0x0(%rbp,%rcx,8)
movupd %xmm0,0x10(%rbp,%rcx,8)
movupd 0x20(%r14,%rcx,8),%xmm0
maxpd  %xmm0,%xmm1
movupd 0x30(%r14,%rcx,8),%xmm0
maxpd  %xmm0,%xmm3
movupd %xmm1,0x20(%rbp,%rcx,8)
movupd %xmm3,0x30(%rbp,%rcx,8)
add    $0x8,%rcx
add    $0xfffffffffffffffe,%rsi
jne    14d0 <fast_incr_eps+0x3a0>
testb  $0x1,0x30(%rsp)
je     1569 <fast_incr_eps+0x439>
movupd 0x0(%rbp,%rcx,8),%xmm0
movupd 0x10(%rbp,%rcx,8),%xmm1
movupd (%r14,%rcx,8),%xmm2
maxpd  %xmm2,%xmm0
movupd 0x10(%r14,%rcx,8),%xmm2
maxpd  %xmm2,%xmm1
movupd %xmm0,0x0(%rbp,%rcx,8)
movupd %xmm1,0x10(%rbp,%rcx,8)
mov    0x8(%rsp),%rcx
mov    %rcx,%rsi
cmp    %r15,%rcx
je     1280 <fast_incr_eps+0x150>
mov    %rsi,%rcx
test   $0x1,%r15b
je     159c <fast_incr_eps+0x46c>
movsd  0x0(%rbp,%rsi,8),%xmm0
maxsd  (%r14,%rsi,8),%xmm0
movsd  %xmm0,0x0(%rbp,%rsi,8)
mov    %rsi,%rcx
or     $0x1,%rcx
not    %rsi
cmp    0x40(%rsp),%rsi
je     1280 <fast_incr_eps+0x150>
nopw   0x0(%rax,%rax,1)
movsd  0x0(%rbp,%rcx,8),%xmm0
maxsd  (%r14,%rcx,8),%xmm0
movsd  0x8(%rbp,%rcx,8),%xmm1
movsd  %xmm0,0x0(%rbp,%rcx,8)
maxsd  0x8(%r14,%rcx,8),%xmm1
movsd  %xmm1,0x8(%rbp,%rcx,8)
add    $0x2,%rcx
cmp    %rcx,%r15
jne    15b0 <fast_incr_eps+0x480>
jmp    1280 <fast_incr_eps+0x150>
mov    %r14,%rdi
add    $0x78,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1030 <free@plt>

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

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