#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*/ abort();
double fabs(float);
int main(void) {
  const int n = 1000;
  int i;
  float vresult, result, array[n];
  bool lvresult, lresult;
  for (i = 0; i < n; i++)
    array[i] = i;
  result = 0;
  vresult = 0;
#pragma acc parallel vector_length(vl) copy(result)
#pragma acc loop reduction(+ : result)
  for (i = 0; i < n; i++)
    result += array[i];
  for (i = 0; i < n; i++)
    vresult += array[i];
  if (result != vresult)
    abort();
  result = 0;
  vresult = 0;
#pragma acc parallel vector_length(vl) copy(result)
#pragma acc loop reduction(* : result)
  for (i = 0; i < n; i++)
    result *= array[i];
  for (i = 0; i < n; i++)
    vresult *= array[i];
  if (fabs(result - vresult) > .0001)
    abort();
  result = 0;
  vresult = 0;
#pragma acc parallel vector_length(vl) copy(result)
#pragma acc loop reduction(max : result)
  for (i = 0; i < n; i++)
    result = result > array[i] ? result : array[i];
  for (i = 0; i < n; i++)
    vresult = vresult > array[i] ? vresult : array[i];
  if (result != vresult)
    abort();
  result = 0;
  vresult = 0;
#pragma acc parallel vector_length(vl) copy(result)
#pragma acc loop reduction(min : result)
  for (i = 0; i < n; i++)
    result = result < array[i] ? result : array[i];
  for (i = 0; i < n; i++)
    vresult = vresult < array[i] ? vresult : array[i];
  if (result != vresult)
    abort();
  result = 5;
  vresult = 5;
  lresult = false;
  lvresult = false;
#pragma acc parallel vector_length(vl) copy(lresult)
#pragma acc loop reduction(&& : lresult)
  for (i = 0; i < n; i++)
    lresult = lresult && (result > array[i]);
  for (i = 0; i < n; i++)
    lvresult = lresult && (result > array[i]);
  if (lresult != lvresult)
    abort();
  result = 5;
  vresult = 5;
  lresult = false;
  lvresult = false;
#pragma acc parallel vector_length(vl) copy(lresult)
#pragma acc loop reduction(|| : lresult)
  for (i = 0; i < n; i++)
    lresult = lresult || (result > array[i]);
  for (i = 0; i < n; i++)
    lvresult = lresult || (result > array[i]);
  if (lresult != lvresult)
    abort();
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0xff0,%rsp
movl   $0x0,-0x4(%rbp)
movl   $0x3e8,-0x8(%rbp)
mov    %rsp,%rax
mov    %rax,-0x20(%rbp)
movl   $0x0,-0xc(%rbp)
cmpl   $0x3e8,-0xc(%rbp)
jge    1174 <main+0x54>
cvtsi2ssl -0xc(%rbp),%xmm0
movslq -0xc(%rbp),%rax
movss  %xmm0,-0xfd0(%rbp,%rax,4)
ff ff
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1147 <main+0x27>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x14(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x10(%rbp)
movl   $0x0,-0xc(%rbp)
cmpl   $0x3e8,-0xc(%rbp)
jge    11bd <main+0x9d>
movslq -0xc(%rbp),%rax
movss  -0xfd0(%rbp,%rax,4),%xmm0
ff ff
addss  -0x14(%rbp),%xmm0
movss  %xmm0,-0x14(%rbp)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    118b <main+0x6b>
movl   $0x0,-0xc(%rbp)
cmpl   $0x3e8,-0xc(%rbp)
jge    11f6 <main+0xd6>
movslq -0xc(%rbp),%rax
movss  -0xfd0(%rbp,%rax,4),%xmm0
ff ff
addss  -0x10(%rbp),%xmm0
movss  %xmm0,-0x10(%rbp)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    11c4 <main+0xa4>
movss  -0x14(%rbp),%xmm0
ucomiss -0x10(%rbp),%xmm0
jne    1210 <main+0xf0>
jp     1210 <main+0xf0>
jmp    1217 <main+0xf7>
mov    $0x0,%al
call   1030 <abort@plt>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x14(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x10(%rbp)
movl   $0x0,-0xc(%rbp)
cmpl   $0x3e8,-0xc(%rbp)
jge    1260 <main+0x140>
movslq -0xc(%rbp),%rax
movss  -0xfd0(%rbp,%rax,4),%xmm0
ff ff
mulss  -0x14(%rbp),%xmm0
movss  %xmm0,-0x14(%rbp)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    122e <main+0x10e>
movl   $0x0,-0xc(%rbp)
cmpl   $0x3e8,-0xc(%rbp)
jge    1299 <main+0x179>
movslq -0xc(%rbp),%rax
movss  -0xfd0(%rbp,%rax,4),%xmm0
ff ff
mulss  -0x10(%rbp),%xmm0
movss  %xmm0,-0x10(%rbp)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1267 <main+0x147>
movss  -0x14(%rbp),%xmm0
subss  -0x10(%rbp),%xmm0
call   1040 <fabs@plt>
movsd  0xd50(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    12c1 <main+0x1a1>
mov    $0x0,%al
call   1030 <abort@plt>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x14(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x10(%rbp)
movl   $0x0,-0xc(%rbp)
cmpl   $0x3e8,-0xc(%rbp)
jge    133e <main+0x21e>
movss  -0x14(%rbp),%xmm0
movslq -0xc(%rbp),%rax
ucomiss -0xfd0(%rbp,%rax,4),%xmm0
ff
jbe    130e <main+0x1ee>
movss  -0x14(%rbp),%xmm0
movss  %xmm0,-0xfd4(%rbp)
ff
jmp    1323 <main+0x203>
movslq -0xc(%rbp),%rax
movss  -0xfd0(%rbp,%rax,4),%xmm0
ff ff
movss  %xmm0,-0xfd4(%rbp)
ff
movss  -0xfd4(%rbp),%xmm0
ff
movss  %xmm0,-0x14(%rbp)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    12d8 <main+0x1b8>
movl   $0x0,-0xc(%rbp)
cmpl   $0x3e8,-0xc(%rbp)
jge    13ab <main+0x28b>
movss  -0x10(%rbp),%xmm0
movslq -0xc(%rbp),%rax
ucomiss -0xfd0(%rbp,%rax,4),%xmm0
ff
jbe    137b <main+0x25b>
movss  -0x10(%rbp),%xmm0
movss  %xmm0,-0xfd8(%rbp)
ff
jmp    1390 <main+0x270>
movslq -0xc(%rbp),%rax
movss  -0xfd0(%rbp,%rax,4),%xmm0
ff ff
movss  %xmm0,-0xfd8(%rbp)
ff
movss  -0xfd8(%rbp),%xmm0
ff
movss  %xmm0,-0x10(%rbp)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1345 <main+0x225>
movss  -0x14(%rbp),%xmm0
ucomiss -0x10(%rbp),%xmm0
jne    13c5 <main+0x2a5>
jp     13c5 <main+0x2a5>
jmp    13cc <main+0x2ac>
mov    $0x0,%al
call   1030 <abort@plt>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x14(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x10(%rbp)
movl   $0x0,-0xc(%rbp)
cmpl   $0x3e8,-0xc(%rbp)
jge    144d <main+0x32d>
movss  -0x14(%rbp),%xmm1
movslq -0xc(%rbp),%rax
movss  -0xfd0(%rbp,%rax,4),%xmm0
ucomiss %xmm1,%xmm0
jbe    141d <main+0x2fd>
movss  -0x14(%rbp),%xmm0
movss  %xmm0,-0xfdc(%rbp)
ff
jmp    1432 <main+0x312>
movslq -0xc(%rbp),%rax
movss  -0xfd0(%rbp,%rax,4),%xmm0
ff ff
movss  %xmm0,-0xfdc(%rbp)
ff
movss  -0xfdc(%rbp),%xmm0
ff
movss  %xmm0,-0x14(%rbp)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    13e3 <main+0x2c3>
movl   $0x0,-0xc(%rbp)
cmpl   $0x3e8,-0xc(%rbp)
jge    14be <main+0x39e>
movss  -0x10(%rbp),%xmm1
movslq -0xc(%rbp),%rax
movss  -0xfd0(%rbp,%rax,4),%xmm0
ff ff
ucomiss %xmm1,%xmm0
jbe    148e <main+0x36e>
movss  -0x10(%rbp),%xmm0
movss  %xmm0,-0xfe0(%rbp)
ff
jmp    14a3 <main+0x383>
movslq -0xc(%rbp),%rax
movss  -0xfd0(%rbp,%rax,4),%xmm0
ff ff
movss  %xmm0,-0xfe0(%rbp)
ff
movss  -0xfe0(%rbp),%xmm0
ff
movss  %xmm0,-0x10(%rbp)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1454 <main+0x334>
movss  -0x14(%rbp),%xmm0
ucomiss -0x10(%rbp),%xmm0
jne    14d8 <main+0x3b8>
jp     14d8 <main+0x3b8>
jmp    14df <main+0x3bf>
mov    $0x0,%al
call   1030 <abort@plt>
movss  0xb21(%rip),%xmm0
movss  %xmm0,-0x14(%rbp)
movss  0xb14(%rip),%xmm0
movss  %xmm0,-0x10(%rbp)
movl   $0x0,-0x28(%rbp)
movl   $0x0,-0x24(%rbp)
movl   $0x0,-0xc(%rbp)
cmpl   $0x3e8,-0xc(%rbp)
jge    1563 <main+0x443>
xor    %eax,%eax
cmpl   $0x0,-0x28(%rbp)
mov    %al,-0xfe1(%rbp)
je     1547 <main+0x427>
movss  -0x14(%rbp),%xmm0
movslq -0xc(%rbp),%rax
ucomiss -0xfd0(%rbp,%rax,4),%xmm0
ff
seta   %al
mov    %al,-0xfe1(%rbp)
mov    -0xfe1(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x28(%rbp)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    150e <main+0x3ee>
movl   $0x0,-0xc(%rbp)
cmpl   $0x3e8,-0xc(%rbp)
jge    15bf <main+0x49f>
xor    %eax,%eax
cmpl   $0x0,-0x28(%rbp)
mov    %al,-0xfe2(%rbp)
je     15a3 <main+0x483>
movss  -0x14(%rbp),%xmm0
movslq -0xc(%rbp),%rax
ucomiss -0xfd0(%rbp,%rax,4),%xmm0
ff
seta   %al
mov    %al,-0xfe2(%rbp)
mov    -0xfe2(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x24(%rbp)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    156a <main+0x44a>
mov    -0x28(%rbp),%eax
cmp    -0x24(%rbp),%eax
je     15d2 <main+0x4b2>
mov    $0x0,%al
call   1030 <abort@plt>
movss  0xa2e(%rip),%xmm0
movss  %xmm0,-0x14(%rbp)
movss  0xa21(%rip),%xmm0
movss  %xmm0,-0x10(%rbp)
movl   $0x0,-0x28(%rbp)
movl   $0x0,-0x24(%rbp)
movl   $0x0,-0xc(%rbp)
cmpl   $0x3e8,-0xc(%rbp)
jge    1656 <main+0x536>
mov    $0x1,%al
cmpl   $0x0,-0x28(%rbp)
mov    %al,-0xfe3(%rbp)
jne    163a <main+0x51a>
movss  -0x14(%rbp),%xmm0
movslq -0xc(%rbp),%rax
ucomiss -0xfd0(%rbp,%rax,4),%xmm0
ff
seta   %al
mov    %al,-0xfe3(%rbp)
mov    -0xfe3(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x28(%rbp)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1601 <main+0x4e1>
movl   $0x0,-0xc(%rbp)
cmpl   $0x3e8,-0xc(%rbp)
jge    16b2 <main+0x592>
mov    $0x1,%al
cmpl   $0x0,-0x28(%rbp)
mov    %al,-0xfe4(%rbp)
jne    1696 <main+0x576>
movss  -0x14(%rbp),%xmm0
movslq -0xc(%rbp),%rax
ucomiss -0xfd0(%rbp,%rax,4),%xmm0
ff
seta   %al
mov    %al,-0xfe4(%rbp)
mov    -0xfe4(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x24(%rbp)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    165d <main+0x53d>
mov    -0x28(%rbp),%eax
cmp    -0x24(%rbp),%eax
je     16c5 <main+0x5a5>
mov    $0x0,%al
call   1030 <abort@plt>
movl   $0x0,-0x4(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,%rsp
mov    -0x4(%rbp),%eax
add    $0xff0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
sub    $0xfa8,%rsp
movdqa 0xed1(%rip),%xmm0
mov    $0xc,%eax
movdqa 0xed4(%rip),%xmm1
movdqa 0xedc(%rip),%xmm2
movdqa 0xee4(%rip),%xmm3
movdqa 0xeec(%rip),%xmm4
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movdqa %xmm0,%xmm5
paddd  %xmm1,%xmm5
cvtdq2ps %xmm0,%xmm6
cvtdq2ps %xmm5,%xmm5
movaps %xmm6,-0x30(%rsp,%rax,4)
movaps %xmm5,-0x20(%rsp,%rax,4)
cmp    $0x3ec,%rax
je     11a9 <main+0x89>
movdqa %xmm0,%xmm5
paddd  %xmm2,%xmm5
movdqa %xmm0,%xmm6
paddd  %xmm3,%xmm6
cvtdq2ps %xmm5,%xmm5
cvtdq2ps %xmm6,%xmm6
movaps %xmm5,-0x10(%rsp,%rax,4)
movaps %xmm6,(%rsp,%rax,4)
paddd  %xmm4,%xmm0
add    $0x10,%rax
jmp    1160 <main+0x40>
pxor   %xmm0,%xmm0
mov    $0x7,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
addss  -0x1c(%rsp,%rax,4),%xmm0
addss  -0x18(%rsp,%rax,4),%xmm0
addss  -0x14(%rsp,%rax,4),%xmm0
addss  -0x10(%rsp,%rax,4),%xmm0
addss  -0xc(%rsp,%rax,4),%xmm0
addss  -0x8(%rsp,%rax,4),%xmm0
addss  -0x4(%rsp,%rax,4),%xmm0
addss  (%rsp,%rax,4),%xmm0
add    $0x8,%rax
cmp    $0x3ef,%rax
jne    11c0 <main+0xa0>
pxor   %xmm1,%xmm1
mov    $0x7,%eax
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
addss  -0x1c(%rsp,%rax,4),%xmm1
addss  -0x18(%rsp,%rax,4),%xmm1
addss  -0x14(%rsp,%rax,4),%xmm1
addss  -0x10(%rsp,%rax,4),%xmm1
addss  -0xc(%rsp,%rax,4),%xmm1
addss  -0x8(%rsp,%rax,4),%xmm1
addss  -0x4(%rsp,%rax,4),%xmm1
addss  (%rsp,%rax,4),%xmm1
add    $0x8,%rax
cmp    $0x3ef,%rax
jne    1210 <main+0xf0>
ucomiss %xmm1,%xmm0
jne    1491 <main+0x371>
jp     1491 <main+0x371>
xorps  %xmm0,%xmm0
mov    $0x7,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mulss  -0x1c(%rsp,%rax,4),%xmm0
mulss  -0x18(%rsp,%rax,4),%xmm0
mulss  -0x14(%rsp,%rax,4),%xmm0
mulss  -0x10(%rsp,%rax,4),%xmm0
mulss  -0xc(%rsp,%rax,4),%xmm0
mulss  -0x8(%rsp,%rax,4),%xmm0
mulss  -0x4(%rsp,%rax,4),%xmm0
mulss  (%rsp,%rax,4),%xmm0
add    $0x8,%rax
cmp    $0x3ef,%rax
jne    1270 <main+0x150>
xorps  %xmm1,%xmm1
mov    $0x7,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mulss  -0x1c(%rsp,%rax,4),%xmm1
mulss  -0x18(%rsp,%rax,4),%xmm1
mulss  -0x14(%rsp,%rax,4),%xmm1
mulss  -0x10(%rsp,%rax,4),%xmm1
mulss  -0xc(%rsp,%rax,4),%xmm1
mulss  -0x8(%rsp,%rax,4),%xmm1
mulss  -0x4(%rsp,%rax,4),%xmm1
mulss  (%rsp,%rax,4),%xmm1
add    $0x8,%rax
cmp    $0x3ef,%rax
jne    12c0 <main+0x1a0>
subss  %xmm1,%xmm0
call   1040 <fabs@plt>
ucomisd 0xd44(%rip),%xmm0
ja     1491 <main+0x371>
xorps  %xmm0,%xmm0
mov    $0x4,%eax
nopw   0x0(%rax,%rax,1)
maxss  -0x10(%rsp,%rax,4),%xmm0
maxss  -0xc(%rsp,%rax,4),%xmm0
maxss  -0x8(%rsp,%rax,4),%xmm0
maxss  -0x4(%rsp,%rax,4),%xmm0
maxss  (%rsp,%rax,4),%xmm0
add    $0x5,%rax
cmp    $0x3ec,%rax
jne    1320 <main+0x200>
xorps  %xmm1,%xmm1
mov    $0x4,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
maxss  -0x10(%rsp,%rax,4),%xmm1
maxss  -0xc(%rsp,%rax,4),%xmm1
maxss  -0x8(%rsp,%rax,4),%xmm1
maxss  -0x4(%rsp,%rax,4),%xmm1
maxss  (%rsp,%rax,4),%xmm1
add    $0x5,%rax
cmp    $0x3ec,%rax
jne    1360 <main+0x240>
ucomiss %xmm1,%xmm0
jne    1491 <main+0x371>
jp     1491 <main+0x371>
xorps  %xmm0,%xmm0
mov    $0x4,%eax
minss  -0x10(%rsp,%rax,4),%xmm0
minss  -0xc(%rsp,%rax,4),%xmm0
minss  -0x8(%rsp,%rax,4),%xmm0
minss  -0x4(%rsp,%rax,4),%xmm0
minss  (%rsp,%rax,4),%xmm0
add    $0x5,%rax
cmp    $0x3ec,%rax
jne    13a0 <main+0x280>
xorps  %xmm1,%xmm1
mov    $0x4,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
minss  -0x10(%rsp,%rax,4),%xmm1
minss  -0xc(%rsp,%rax,4),%xmm1
minss  -0x8(%rsp,%rax,4),%xmm1
minss  -0x4(%rsp,%rax,4),%xmm1
minss  (%rsp,%rax,4),%xmm1
add    $0x5,%rax
cmp    $0x3ec,%rax
jne    13e0 <main+0x2c0>
ucomiss %xmm1,%xmm0
jne    1491 <main+0x371>
jp     1491 <main+0x371>
xor    %ecx,%ecx
mov    $0x1,%edx
movss  0xc31(%rip),%xmm0
jmp    1440 <main+0x320>
nopl   0x0(%rax)
movzbl %al,%ecx
add    $0x2,%rdx
cmp    $0x3e9,%rdx
je     1456 <main+0x336>
mov    $0x1,%al
test   %ecx,%ecx
jne    1430 <main+0x310>
ucomiss -0x4(%rsp,%rdx,4),%xmm0
ja     1430 <main+0x310>
ucomiss (%rsp,%rdx,4),%xmm0
seta   %al
jmp    1430 <main+0x310>
xor    %edx,%edx
jmp    146d <main+0x34d>
nopw   0x0(%rax,%rax,1)
cmp    $0x3e7,%rdx
je     147c <main+0x35c>
add    $0x1,%rdx
test   %ecx,%ecx
je     1460 <main+0x340>
cmp    $0x3e7,%rdx
jne    1469 <main+0x349>
jmp    1487 <main+0x367>
ucomiss (%rsp,%rdx,4),%xmm0
setbe  %cl
xor    %al,%cl
je     1491 <main+0x371>
xor    %eax,%eax
add    $0xfa8,%rsp
ret
xor    %eax,%eax
call   1030 <abort@plt>

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

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