#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();
int /*<<< orphan*/ f(int, void *);
void g(void) {
  float a[20][20];
  int n = 20;
  int i, j;
  for (i = 0; i < 20; i++) {
    for (j = 0; j < 20; j++) {
      a[i][j] = i + j;
    }
  }
  f(n, (void *)&a[0][0]);
#pragma omp taskwait
  for (i = 0; i < 20; i++) {
    for (j = 0; j < 20; j++) {
      if (a[i][j] != (i + j + 1))
        abort();
    }
  }
}


x86 assembly (clang, -O0):
<g>:
push   %rbp
mov    %rsp,%rbp
sub    $0x650,%rsp
movl   $0x14,-0x644(%rbp)
movl   $0x0,-0x648(%rbp)
cmpl   $0x14,-0x648(%rbp)
jge    11c1 <g+0xa1>
movl   $0x0,-0x64c(%rbp)
cmpl   $0x14,-0x64c(%rbp)
jge    11a8 <g+0x88>
mov    -0x648(%rbp),%eax
add    -0x64c(%rbp),%eax
cvtsi2ss %eax,%xmm0
movslq -0x648(%rbp),%rcx
lea    -0x640(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movslq -0x64c(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x64c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64c(%rbp)
jmp    1156 <g+0x36>
jmp    11ad <g+0x8d>
mov    -0x648(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x648(%rbp)
jmp    113f <g+0x1f>
mov    -0x644(%rbp),%edi
lea    -0x640(%rbp),%rsi
call   1040 <f@plt>
movl   $0x0,-0x648(%rbp)
cmpl   $0x14,-0x648(%rbp)
jge    1282 <g+0x162>
movl   $0x0,-0x64c(%rbp)
cmpl   $0x14,-0x64c(%rbp)
jge    1269 <g+0x149>
movslq -0x648(%rbp),%rcx
lea    -0x640(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movslq -0x64c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x648(%rbp),%eax
add    -0x64c(%rbp),%eax
add    $0x1,%eax
cvtsi2ss %eax,%xmm1
ucomiss %xmm1,%xmm0
jne    1249 <g+0x129>
jp     1249 <g+0x129>
jmp    1250 <g+0x130>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    1255 <g+0x135>
mov    -0x64c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64c(%rbp)
jmp    11f4 <g+0xd4>
jmp    126e <g+0x14e>
mov    -0x648(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x648(%rbp)
jmp    11dd <g+0xbd>
add    $0x650,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<g>:
sub    $0x778,%rsp
movaps 0xed1(%rip),%xmm15
movdqa 0xed9(%rip),%xmm0
movaps 0xee2(%rip),%xmm2
mov    $0x13c,%eax
movaps %xmm2,%xmm3
movaps %xmm2,%xmm13
movaps %xmm2,%xmm6
movaps %xmm2,0x70(%rsp)
movaps %xmm2,0x30(%rsp)
movaps %xmm2,0x10(%rsp)
movaps %xmm2,0x50(%rsp)
movaps %xmm2,(%rsp)
movaps %xmm2,0x60(%rsp)
movaps %xmm2,0x40(%rsp)
movaps %xmm2,0x20(%rsp)
movaps %xmm2,0xb0(%rsp)
movaps %xmm2,0xa0(%rsp)
movaps %xmm2,0x90(%rsp)
movaps %xmm2,0x80(%rsp)
movaps %xmm2,%xmm5
movaps %xmm2,%xmm7
movaps %xmm2,%xmm4
movdqa 0xeaa(%rip),%xmm14
cs nopw 0x0(%rax,%rax,1)
movaps %xmm4,0xd0(%rsp)
movaps %xmm7,0xe0(%rsp)
movaps %xmm5,0xf0(%rsp)
movaps %xmm15,0x100(%rsp)
movaps %xmm3,0x110(%rsp)
movaps %xmm2,0x120(%rsp)
movdqa %xmm0,0xc0(%rsp)
cvtdq2ps %xmm2,%xmm7
movaps %xmm3,%xmm2
paddd  0xe38(%rip),%xmm2
cvtdq2ps %xmm2,%xmm5
movaps %xmm13,%xmm2
paddd  0xe39(%rip),%xmm2
cvtdq2ps %xmm2,%xmm8
movaps %xmm8,%xmm2
movlhps %xmm5,%xmm2
movaps 0xc0(%rsp),%xmm0
shufps $0x88,%xmm15,%xmm0
psubd  0xf39(%rip),%xmm0
cvtdq2ps %xmm0,%xmm15
movaps %xmm7,%xmm0
unpcklps %xmm15,%xmm0
shufps $0x24,%xmm2,%xmm0
movaps %xmm0,-0xc(%rsp,%rax,1)
movaps %xmm7,%xmm0
shufps $0x55,%xmm7,%xmm0
movss  %xmm0,0x44(%rsp,%rax,1)
movaps %xmm7,%xmm0
unpckhpd %xmm7,%xmm0
movss  %xmm0,0x94(%rsp,%rax,1)
shufps $0xff,%xmm7,%xmm7
movss  %xmm7,0xe4(%rsp,%rax,1)
paddd  %xmm14,%xmm6
cvtdq2ps %xmm6,%xmm7
movaps %xmm8,%xmm0
unpcklps %xmm7,%xmm0
movaps %xmm5,%xmm2
shufps $0x11,%xmm15,%xmm2
shufps $0xe2,%xmm0,%xmm2
movups %xmm2,0x48(%rsp,%rax,1)
movaps %xmm7,%xmm0
unpckhpd %xmm8,%xmm0
movaps %xmm15,%xmm2
unpckhps %xmm5,%xmm2
shufps $0x24,%xmm0,%xmm2
movups %xmm2,0x98(%rsp,%rax,1)
unpckhps %xmm7,%xmm8
shufps $0x33,%xmm15,%xmm5
shufps $0xe2,%xmm8,%xmm5
movups %xmm5,0xe8(%rsp,%rax,1)
movdqa 0x30(%rsp),%xmm0
paddd  0xd9c(%rip),%xmm0
cvtdq2ps %xmm0,%xmm3
movdqa 0x10(%rsp),%xmm0
paddd  0xd9b(%rip),%xmm0
cvtdq2ps %xmm0,%xmm5
movaps %xmm5,%xmm0
movlhps %xmm3,%xmm0
movdqa 0x70(%rsp),%xmm8
movdqa %xmm8,%xmm1
paddd  0xd8e(%rip),%xmm1
cvtdq2ps %xmm1,%xmm1
unpcklps %xmm1,%xmm7
shufps $0x24,%xmm0,%xmm7
movaps %xmm7,0x4(%rsp,%rax,1)
movdqa 0x50(%rsp),%xmm0
paddd  0xd81(%rip),%xmm0
cvtdq2ps %xmm0,%xmm0
movaps %xmm5,%xmm7
unpcklps %xmm0,%xmm7
movaps %xmm3,%xmm2
shufps $0x11,%xmm1,%xmm2
shufps $0xe2,%xmm7,%xmm2
movups %xmm2,0x58(%rsp,%rax,1)
movaps %xmm0,%xmm2
unpckhpd %xmm5,%xmm2
movaps %xmm1,%xmm7
unpckhps %xmm3,%xmm7
shufps $0x24,%xmm2,%xmm7
movups %xmm7,0xa8(%rsp,%rax,1)
unpckhps %xmm0,%xmm5
shufps $0x33,%xmm1,%xmm3
shufps $0xe2,%xmm5,%xmm3
movups %xmm3,0xf8(%rsp,%rax,1)
movss  %xmm0,0x14(%rsp,%rax,1)
movdqa (%rsp),%xmm0
paddd  0xd39(%rip),%xmm0
cvtdq2ps %xmm0,%xmm0
movss  %xmm0,0x18(%rsp,%rax,1)
movaps %xmm0,%xmm1
shufps $0x55,%xmm0,%xmm1
movss  %xmm1,0x68(%rsp,%rax,1)
movaps %xmm0,%xmm1
unpckhpd %xmm0,%xmm1
movss  %xmm1,0xb8(%rsp,%rax,1)
shufps $0xff,%xmm0,%xmm0
movss  %xmm0,0x108(%rsp,%rax,1)
movdqa 0x60(%rsp),%xmm0
paddd  0xd08(%rip),%xmm0
cvtdq2ps %xmm0,%xmm0
movss  %xmm0,0x1c(%rsp,%rax,1)
movaps %xmm0,%xmm1
shufps $0x55,%xmm0,%xmm1
movss  %xmm1,0x6c(%rsp,%rax,1)
movaps %xmm0,%xmm1
unpckhpd %xmm0,%xmm1
movss  %xmm1,0xbc(%rsp,%rax,1)
shufps $0xff,%xmm0,%xmm0
movss  %xmm0,0x10c(%rsp,%rax,1)
movdqa 0x40(%rsp),%xmm0
paddd  0xcd7(%rip),%xmm0
cvtdq2ps %xmm0,%xmm0
movss  %xmm0,0x20(%rsp,%rax,1)
movaps %xmm0,%xmm1
movdqa 0x20(%rsp),%xmm2
paddd  0xced(%rip),%xmm2
cvtdq2ps %xmm2,%xmm2
movaps %xmm2,%xmm3
shufps $0x33,%xmm0,%xmm3
shufps $0x55,%xmm0,%xmm0
movss  %xmm0,0x70(%rsp,%rax,1)
movhlps %xmm1,%xmm1
movss  %xmm1,0xc0(%rsp,%rax,1)
movdqa 0xb0(%rsp),%xmm12
movdqa %xmm12,%xmm0
paddd  0xc96(%rip),%xmm0
cvtdq2ps %xmm0,%xmm4
movdqa 0xa0(%rsp),%xmm11
movdqa %xmm11,%xmm1
paddd  0xc8c(%rip),%xmm1
cvtdq2ps %xmm1,%xmm1
movaps %xmm4,%xmm5
unpckhps %xmm1,%xmm5
shufps $0xe2,%xmm5,%xmm3
movups %xmm3,0x110(%rsp,%rax,1)
movss  %xmm2,0x24(%rsp,%rax,1)
movaps %xmm2,%xmm3
shufps $0x55,%xmm2,%xmm3
movss  %xmm3,0x74(%rsp,%rax,1)
movhlps %xmm2,%xmm2
movss  %xmm2,0xc4(%rsp,%rax,1)
movdqa 0x90(%rsp),%xmm10
movdqa %xmm10,%xmm2
paddd  0xc61(%rip),%xmm2
cvtdq2ps %xmm2,%xmm2
movdqa 0x80(%rsp),%xmm9
movdqa %xmm9,%xmm3
paddd  0xc57(%rip),%xmm3
cvtdq2ps %xmm3,%xmm3
movaps %xmm3,%xmm7
movlhps %xmm2,%xmm7
movaps %xmm4,%xmm0
unpcklps %xmm1,%xmm0
shufps $0x24,%xmm7,%xmm0
movdqa 0xe0(%rsp),%xmm7
movups %xmm0,0x28(%rsp,%rax,1)
shufps $0x11,%xmm4,%xmm1
movdqa 0xd0(%rsp),%xmm4
movaps %xmm2,%xmm0
unpcklps %xmm3,%xmm0
shufps $0xe2,%xmm0,%xmm1
movups %xmm1,0x78(%rsp,%rax,1)
movaps %xmm3,%xmm0
unpckhpd %xmm2,%xmm0
shufps $0x24,%xmm0,%xmm5
movups %xmm5,0xc8(%rsp,%rax,1)
movdqa 0xf0(%rsp),%xmm5
movdqa %xmm5,%xmm0
paddd  0xc02(%rip),%xmm0
cvtdq2ps %xmm0,%xmm0
movdqa %xmm7,%xmm1
paddd  0xc03(%rip),%xmm1
cvtdq2ps %xmm1,%xmm1
shufps $0x33,%xmm2,%xmm3
movaps %xmm0,%xmm2
unpckhps %xmm1,%xmm2
shufps $0xe2,%xmm2,%xmm3
movups %xmm3,0x120(%rsp,%rax,1)
movss  %xmm0,0x38(%rsp,%rax,1)
movaps %xmm0,%xmm2
shufps $0x55,%xmm0,%xmm2
movss  %xmm2,0x88(%rsp,%rax,1)
movdqa 0x120(%rsp),%xmm2
movhlps %xmm0,%xmm0
movss  %xmm0,0xd8(%rsp,%rax,1)
movss  %xmm1,0x3c(%rsp,%rax,1)
movaps %xmm1,%xmm0
shufps $0x55,%xmm1,%xmm0
movss  %xmm0,0x8c(%rsp,%rax,1)
movhlps %xmm1,%xmm1
movss  %xmm1,0xdc(%rsp,%rax,1)
movdqa %xmm4,%xmm0
paddd  0xba1(%rip),%xmm0
cvtdq2ps %xmm0,%xmm0
movss  %xmm0,0x40(%rsp,%rax,1)
movaps %xmm0,%xmm1
shufps $0x55,%xmm0,%xmm1
movss  %xmm1,0x90(%rsp,%rax,1)
movaps %xmm0,%xmm1
unpckhpd %xmm0,%xmm1
movss  %xmm1,0xe0(%rsp,%rax,1)
movdqa 0x100(%rsp),%xmm15
shufps $0xff,%xmm0,%xmm0
movss  %xmm0,0x130(%rsp,%rax,1)
movdqa 0xc0(%rsp),%xmm0
movdqa 0xb60(%rip),%xmm3
paddq  %xmm3,%xmm0
paddq  %xmm3,%xmm15
movdqa 0x110(%rsp),%xmm3
paddd  %xmm14,%xmm2
paddd  %xmm14,%xmm3
paddd  %xmm14,%xmm13
paddd  %xmm14,%xmm8
movdqa %xmm8,0x70(%rsp)
movdqa 0x30(%rsp),%xmm1
paddd  %xmm14,%xmm1
movdqa %xmm1,0x30(%rsp)
movdqa 0x10(%rsp),%xmm1
paddd  %xmm14,%xmm1
movdqa %xmm1,0x10(%rsp)
movdqa 0x50(%rsp),%xmm1
paddd  %xmm14,%xmm1
movdqa %xmm1,0x50(%rsp)
movdqa (%rsp),%xmm1
paddd  %xmm14,%xmm1
movdqa %xmm1,(%rsp)
movdqa 0x60(%rsp),%xmm1
paddd  %xmm14,%xmm1
movdqa %xmm1,0x60(%rsp)
movdqa 0x40(%rsp),%xmm1
paddd  %xmm14,%xmm1
movdqa %xmm1,0x40(%rsp)
movdqa 0x20(%rsp),%xmm1
paddd  %xmm14,%xmm1
movdqa %xmm1,0x20(%rsp)
paddd  %xmm14,%xmm12
movdqa %xmm12,0xb0(%rsp)
paddd  %xmm14,%xmm11
movdqa %xmm11,0xa0(%rsp)
paddd  %xmm14,%xmm10
movdqa %xmm10,0x90(%rsp)
paddd  %xmm14,%xmm9
movdqa %xmm9,0x80(%rsp)
paddd  %xmm14,%xmm5
paddd  %xmm14,%xmm7
paddd  %xmm14,%xmm4
add    $0x140,%rax
cmp    $0x77c,%rax
jne    11b0 <g+0x90>
lea    0x130(%rsp),%rsi
mov    $0x14,%edi
call   1040 <f@plt>
lea    0x17c(%rsp),%rax
xor    %edx,%edx
nopl   0x0(%rax,%rax,1)
lea    0x1(%rdx),%rcx
xorps  %xmm0,%xmm0
cvtsi2ss %ecx,%xmm0
movss  -0x4c(%rax),%xmm1
ucomiss %xmm0,%xmm1
jne    1959 <g+0x839>
jp     1959 <g+0x839>
lea    0x2(%rdx),%esi
xorps  %xmm0,%xmm0
cvtsi2ss %esi,%xmm0
movss  -0x48(%rax),%xmm1
ucomiss %xmm0,%xmm1
jne    1959 <g+0x839>
jp     1959 <g+0x839>
lea    0x3(%rdx),%esi
xorps  %xmm0,%xmm0
cvtsi2ss %esi,%xmm0
movss  -0x44(%rax),%xmm1
ucomiss %xmm0,%xmm1
jne    1959 <g+0x839>
jp     1959 <g+0x839>
lea    0x4(%rdx),%esi
xorps  %xmm0,%xmm0
cvtsi2ss %esi,%xmm0
movss  -0x40(%rax),%xmm1
ucomiss %xmm0,%xmm1
jne    1959 <g+0x839>
jp     1959 <g+0x839>
lea    0x5(%rdx),%esi
xorps  %xmm0,%xmm0
cvtsi2ss %esi,%xmm0
movss  -0x3c(%rax),%xmm1
ucomiss %xmm0,%xmm1
jne    1959 <g+0x839>
jp     1959 <g+0x839>
lea    0x6(%rdx),%esi
xorps  %xmm0,%xmm0
cvtsi2ss %esi,%xmm0
movss  -0x38(%rax),%xmm1
ucomiss %xmm0,%xmm1
jne    1959 <g+0x839>
jp     1959 <g+0x839>
lea    0x7(%rdx),%esi
xorps  %xmm0,%xmm0
cvtsi2ss %esi,%xmm0
movss  -0x34(%rax),%xmm1
ucomiss %xmm0,%xmm1
jne    1959 <g+0x839>
jp     1959 <g+0x839>
lea    0x8(%rdx),%esi
xorps  %xmm0,%xmm0
cvtsi2ss %esi,%xmm0
movss  -0x30(%rax),%xmm1
ucomiss %xmm0,%xmm1
jne    1959 <g+0x839>
jp     1959 <g+0x839>
lea    0x9(%rdx),%esi
xorps  %xmm0,%xmm0
cvtsi2ss %esi,%xmm0
movss  -0x2c(%rax),%xmm1
ucomiss %xmm0,%xmm1
jne    1959 <g+0x839>
jp     1959 <g+0x839>
lea    0xa(%rdx),%esi
xorps  %xmm0,%xmm0
cvtsi2ss %esi,%xmm0
movss  -0x28(%rax),%xmm1
ucomiss %xmm0,%xmm1
jne    1959 <g+0x839>
jp     1959 <g+0x839>
lea    0xb(%rdx),%esi
xorps  %xmm0,%xmm0
cvtsi2ss %esi,%xmm0
movss  -0x24(%rax),%xmm1
ucomiss %xmm0,%xmm1
jne    1959 <g+0x839>
jp     1959 <g+0x839>
lea    0xc(%rdx),%esi
xorps  %xmm0,%xmm0
cvtsi2ss %esi,%xmm0
movss  -0x20(%rax),%xmm1
ucomiss %xmm0,%xmm1
jne    1959 <g+0x839>
jp     1959 <g+0x839>
lea    0xd(%rdx),%esi
xorps  %xmm0,%xmm0
cvtsi2ss %esi,%xmm0
movss  -0x1c(%rax),%xmm1
ucomiss %xmm0,%xmm1
jne    1959 <g+0x839>
jp     1959 <g+0x839>
lea    0xe(%rdx),%esi
xorps  %xmm0,%xmm0
cvtsi2ss %esi,%xmm0
movss  -0x18(%rax),%xmm1
ucomiss %xmm0,%xmm1
jne    1959 <g+0x839>
jp     1959 <g+0x839>
lea    0xf(%rdx),%esi
xorps  %xmm0,%xmm0
cvtsi2ss %esi,%xmm0
movss  -0x14(%rax),%xmm1
ucomiss %xmm0,%xmm1
jne    1959 <g+0x839>
jp     1959 <g+0x839>
lea    0x10(%rdx),%esi
xorps  %xmm0,%xmm0
cvtsi2ss %esi,%xmm0
movss  -0x10(%rax),%xmm1
ucomiss %xmm0,%xmm1
jne    1959 <g+0x839>
jp     1959 <g+0x839>
lea    0x11(%rdx),%esi
xorps  %xmm0,%xmm0
cvtsi2ss %esi,%xmm0
movss  -0xc(%rax),%xmm1
ucomiss %xmm0,%xmm1
jne    1959 <g+0x839>
jp     1959 <g+0x839>
lea    0x12(%rdx),%esi
xorps  %xmm0,%xmm0
cvtsi2ss %esi,%xmm0
movss  -0x8(%rax),%xmm1
ucomiss %xmm0,%xmm1
jne    1959 <g+0x839>
jp     1959 <g+0x839>
lea    0x13(%rdx),%esi
xorps  %xmm0,%xmm0
cvtsi2ss %esi,%xmm0
movss  -0x4(%rax),%xmm1
ucomiss %xmm0,%xmm1
jne    1959 <g+0x839>
jp     1959 <g+0x839>
add    $0x14,%edx
xorps  %xmm0,%xmm0
cvtsi2ss %edx,%xmm0
movss  (%rax),%xmm1
ucomiss %xmm0,%xmm1
jne    1959 <g+0x839>
jp     1959 <g+0x839>
add    $0x50,%rax
mov    %rcx,%rdx
cmp    $0x14,%rcx
jne    1710 <g+0x5f0>
add    $0x778,%rsp
ret
xor    %eax,%eax
call   1030 <abort@plt>

LLVM IR (-O0):
define void @g() {
%1 = alloca [20 x [20 x float]]
%2 = alloca i32
%3 = alloca i32
%4 = alloca i32
store i32 20, i32* %2
store i32 0, i32* %3
br label %5
5: ; preds = %27, %0
%6 = load i32, i32* %3
%7 = icmp slt i32 %6, 20
br i1 %7, label %8, label %30
8: ; preds = %5
store i32 0, i32* %4
br label %9
9: ; preds = %23, %8
%10 = load i32, i32* %4
%11 = icmp slt i32 %10, 20
br i1 %11, label %12, label %26
12: ; preds = %9
%13 = load i32, i32* %3
%14 = load i32, i32* %4
%15 = add nsw i32 %13, %14
%16 = sitofp i32 %15 to float
%17 = load i32, i32* %3
%18 = sext i32 %17 to i64
%19 = getelementptr inbounds [20 x [20 x float]], [20 x [20 x float]]* %1, i64 0, i64 %18
%20 = load i32, i32* %4
%21 = sext i32 %20 to i64
%22 = getelementptr inbounds [20 x float], [20 x float]* %19, i64 0, i64 %21
store float %16, float* %22
br label %23
23: ; preds = %12
%24 = load i32, i32* %4
%25 = add nsw i32 %24, 1
store i32 %25, i32* %4
br label %9
26: ; preds = %9
br label %27
27: ; preds = %26
%28 = load i32, i32* %3
%29 = add nsw i32 %28, 1
store i32 %29, i32* %3
br label %5
30: ; preds = %5
%31 = load i32, i32* %2
%32 = getelementptr inbounds [20 x [20 x float]], [20 x [20 x float]]* %1, i64 0, i64 0
%33 = getelementptr inbounds [20 x float], [20 x float]* %32, i64 0, i64 0
%34 = bitcast float* %33 to i8*
%35 = call i32 @f(i32 %31, i8* %34)
store i32 0, i32* %3
br label %36
36: ; preds = %64, %30
%37 = load i32, i32* %3
%38 = icmp slt i32 %37, 20
br i1 %38, label %39, label %67
39: ; preds = %36
store i32 0, i32* %4
br label %40
40: ; preds = %60, %39
%41 = load i32, i32* %4
%42 = icmp slt i32 %41, 20
br i1 %42, label %43, label %63
43: ; preds = %40
%44 = load i32, i32* %3
%45 = sext i32 %44 to i64
%46 = getelementptr inbounds [20 x [20 x float]], [20 x [20 x float]]* %1, i64 0, i64 %45
%47 = load i32, i32* %4
%48 = sext i32 %47 to i64
%49 = getelementptr inbounds [20 x float], [20 x float]* %46, i64 0, i64 %48
%50 = load float, float* %49
%51 = load i32, i32* %3
%52 = load i32, i32* %4
%53 = add nsw i32 %51, %52
%54 = add nsw i32 %53, 1
%55 = sitofp i32 %54 to float
%56 = fcmp une float %50, %55
br i1 %56, label %57, label %59
57: ; preds = %43
%58 = call i32 (...) @abort()
unreachable
59: ; preds = %43
br label %60
60: ; preds = %59
%61 = load i32, i32* %4
%62 = add nsw i32 %61, 1
store i32 %62, i32* %4
br label %40
63: ; preds = %40
br label %64
64: ; preds = %63
%65 = load i32, i32* %3
%66 = add nsw i32 %65, 1
store i32 %66, i32* %3
br label %36
67: ; preds = %36
ret void
}

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