#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*/ foo(float **, float **, float *, int const, int const,
                       int const);
scalar_t__ malloc(int const);
int main() {
  const int N = 32;
  float **ar1, **ar2;
  float *res;
  int i, j;
  ar1 = (float **)malloc(N * sizeof(float *));
  ar2 = (float **)malloc(N * sizeof(float *));
  res = (float *)malloc(N * sizeof(float));
  for (i = 0; i < N; i++) {
    ar1[i] = (float *)malloc(N * sizeof(float));
    ar2[i] = (float *)malloc(N * sizeof(float));
  }
  for (i = 0; i < N; i++) {
    for (j = 0; j < N; j++) {
      ar1[i][j] = 2.0f;
      ar2[i][j] = 1.5f;
    }
    res[i] = 0.0f;
  }
  foo(ar1, ar2, res, N, N, N);
  for (i = 0; i < N; i++)
    if (res[i] != 3072.0f)
      abort();
  for (i = 0; i < N; i++)
    res[i] = 0.0f;
  foo(ar1, ar2, res, N, 0, N);
  for (i = 0; i < N; i++)
    if (res[i] != 0.0f)
      abort();
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
movl   $0x0,-0x4(%rbp)
movl   $0x20,-0x8(%rbp)
mov    $0x100,%edi
call   1040 <malloc@plt>
mov    %rax,-0x10(%rbp)
mov    $0x100,%edi
call   1040 <malloc@plt>
mov    %rax,-0x18(%rbp)
mov    $0x80,%edi
call   1040 <malloc@plt>
mov    %rax,-0x20(%rbp)
movl   $0x0,-0x24(%rbp)
cmpl   $0x20,-0x24(%rbp)
jge    11c1 <main+0x91>
mov    $0x80,%edi
call   1040 <malloc@plt>
mov    %rax,%rdx
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    %rdx,(%rax,%rcx,8)
mov    $0x80,%edi
call   1040 <malloc@plt>
mov    %rax,%rdx
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    %rdx,(%rax,%rcx,8)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    1177 <main+0x47>
movl   $0x0,-0x24(%rbp)
cmpl   $0x20,-0x24(%rbp)
jge    1249 <main+0x119>
movl   $0x0,-0x28(%rbp)
cmpl   $0x20,-0x28(%rbp)
jge    122b <main+0xfb>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x28(%rbp),%rcx
movss  0xe0d(%rip),%xmm0
movss  %xmm0,(%rax,%rcx,4)
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x28(%rbp),%rcx
movss  0xdec(%rip),%xmm0
movss  %xmm0,(%rax,%rcx,4)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    11d9 <main+0xa9>
mov    -0x20(%rbp),%rax
movslq -0x24(%rbp),%rcx
xorps  %xmm0,%xmm0
movss  %xmm0,(%rax,%rcx,4)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    11c8 <main+0x98>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    -0x20(%rbp),%rdx
mov    $0x20,%r9d
mov    %r9d,%ecx
mov    %r9d,%r8d
call   1050 <foo@plt>
movl   $0x0,-0x24(%rbp)
cmpl   $0x20,-0x24(%rbp)
jge    12ba <main+0x18a>
mov    -0x20(%rbp),%rax
movslq -0x24(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  0xd74(%rip),%xmm1
ucomiss %xmm1,%xmm0
jne    12a0 <main+0x170>
jp     12a0 <main+0x170>
jmp    12a7 <main+0x177>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    12ac <main+0x17c>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    126d <main+0x13d>
movl   $0x0,-0x24(%rbp)
cmpl   $0x20,-0x24(%rbp)
jge    12e9 <main+0x1b9>
mov    -0x20(%rbp),%rax
movslq -0x24(%rbp),%rcx
xorps  %xmm0,%xmm0
movss  %xmm0,(%rax,%rcx,4)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    12c1 <main+0x191>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    -0x20(%rbp),%rdx
mov    $0x20,%r9d
xor    %r8d,%r8d
mov    %r9d,%ecx
call   1050 <foo@plt>
movl   $0x0,-0x24(%rbp)
cmpl   $0x20,-0x24(%rbp)
jge    1355 <main+0x225>
mov    -0x20(%rbp),%rax
movslq -0x24(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jne    133b <main+0x20b>
jp     133b <main+0x20b>
jmp    1342 <main+0x212>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    1347 <main+0x217>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    130d <main+0x1dd>
xor    %eax,%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %r15
push   %r14
push   %r12
push   %rbx
push   %rax
mov    $0x100,%edi
call   1040 <malloc@plt>
mov    %rax,%r14
mov    $0x100,%edi
call   1040 <malloc@plt>
mov    %rax,%r12
mov    $0x80,%edi
call   1040 <malloc@plt>
mov    %rax,%r15
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    $0x80,%edi
call   1040 <malloc@plt>
mov    %rax,(%r14,%rbx,8)
mov    $0x80,%edi
call   1040 <malloc@plt>
mov    %rax,(%r12,%rbx,8)
add    $0x1,%rbx
cmp    $0x20,%rbx
jne    1170 <main+0x40>
xor    %eax,%eax
movaps 0xe61(%rip),%xmm0
movaps 0xe6a(%rip),%xmm1
jmp    1200 <main+0xd0>
nopl   0x0(%rax,%rax,1)
movups %xmm0,(%rcx)
movups %xmm1,(%rdx)
movups %xmm0,0x10(%rcx)
movups %xmm1,0x10(%rdx)
movups %xmm0,0x20(%rcx)
movups %xmm1,0x20(%rdx)
movups %xmm0,0x30(%rcx)
movups %xmm1,0x30(%rdx)
movups %xmm0,0x40(%rcx)
movups %xmm1,0x40(%rdx)
movups %xmm0,0x50(%rcx)
movups %xmm1,0x50(%rdx)
movups %xmm0,0x60(%rcx)
movups %xmm1,0x60(%rdx)
movups %xmm0,0x70(%rcx)
movups %xmm1,0x70(%rdx)
movl   $0x0,(%r15,%rax,4)
add    $0x1,%rax
cmp    $0x20,%rax
je     127d <main+0x14d>
mov    (%r14,%rax,8),%rcx
mov    (%r12,%rax,8),%rdx
lea    0x80(%rdx),%rsi
cmp    %rsi,%rcx
jae    11b0 <main+0x80>
lea    0x80(%rcx),%rsi
cmp    %rsi,%rdx
jae    11b0 <main+0x80>
xor    %esi,%esi
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movl   $0x40000000,(%rcx,%rsi,4)
movl   $0x3fc00000,(%rdx,%rsi,4)
movl   $0x40000000,0x4(%rcx,%rsi,4)
40
movl   $0x3fc00000,0x4(%rdx,%rsi,4)
3f
movl   $0x40000000,0x8(%rcx,%rsi,4)
40
movl   $0x3fc00000,0x8(%rdx,%rsi,4)
3f
movl   $0x40000000,0xc(%rcx,%rsi,4)
40
movl   $0x3fc00000,0xc(%rdx,%rsi,4)
3f
add    $0x4,%rsi
cmp    $0x20,%rsi
jne    1230 <main+0x100>
jmp    11ee <main+0xbe>
mov    %r14,%rdi
mov    %r12,%rsi
mov    %r15,%rdx
mov    $0x20,%ecx
mov    $0x20,%r8d
mov    $0x20,%r9d
call   1050 <foo@plt>
movss  (%r15),%xmm0
ucomiss 0xd78(%rip),%xmm0
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x4(%r15),%xmm0
ucomiss 0xd5f(%rip),%xmm0
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x8(%r15),%xmm0
ucomiss 0xd46(%rip),%xmm0
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0xc(%r15),%xmm0
ucomiss 0xd2d(%rip),%xmm0
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x10(%r15),%xmm0
ucomiss 0xd14(%rip),%xmm0
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x14(%r15),%xmm0
ucomiss 0xcfb(%rip),%xmm0
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x18(%r15),%xmm0
ucomiss 0xce2(%rip),%xmm0
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x1c(%r15),%xmm0
ucomiss 0xcc9(%rip),%xmm0
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x20(%r15),%xmm0
ucomiss 0xcb0(%rip),%xmm0
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x24(%r15),%xmm0
ucomiss 0xc97(%rip),%xmm0
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x28(%r15),%xmm0
ucomiss 0xc7e(%rip),%xmm0
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x2c(%r15),%xmm0
ucomiss 0xc65(%rip),%xmm0
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x30(%r15),%xmm0
ucomiss 0xc4c(%rip),%xmm0
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x34(%r15),%xmm0
ucomiss 0xc33(%rip),%xmm0
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x38(%r15),%xmm0
ucomiss 0xc1a(%rip),%xmm0
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x3c(%r15),%xmm0
ucomiss 0xc01(%rip),%xmm0
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x40(%r15),%xmm0
ucomiss 0xbe8(%rip),%xmm0
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x44(%r15),%xmm0
ucomiss 0xbcf(%rip),%xmm0
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x48(%r15),%xmm0
ucomiss 0xbb6(%rip),%xmm0
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x4c(%r15),%xmm0
ucomiss 0xb9d(%rip),%xmm0
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x50(%r15),%xmm0
ucomiss 0xb84(%rip),%xmm0
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x54(%r15),%xmm0
ucomiss 0xb6b(%rip),%xmm0
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x58(%r15),%xmm0
ucomiss 0xb52(%rip),%xmm0
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x5c(%r15),%xmm0
ucomiss 0xb39(%rip),%xmm0
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x60(%r15),%xmm0
ucomiss 0xb20(%rip),%xmm0
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x64(%r15),%xmm0
ucomiss 0xb07(%rip),%xmm0
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x68(%r15),%xmm0
ucomiss 0xaee(%rip),%xmm0
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x6c(%r15),%xmm0
ucomiss 0xad5(%rip),%xmm0
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x70(%r15),%xmm0
ucomiss 0xabc(%rip),%xmm0
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x74(%r15),%xmm0
ucomiss 0xaa3(%rip),%xmm0
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x78(%r15),%xmm0
ucomiss 0xa8a(%rip),%xmm0
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x7c(%r15),%xmm0
ucomiss 0xa71(%rip),%xmm0
jne    189e <main+0x76e>
jp     189e <main+0x76e>
xorps  %xmm0,%xmm0
movups %xmm0,0x70(%r15)
movups %xmm0,0x60(%r15)
movups %xmm0,0x50(%r15)
movups %xmm0,0x40(%r15)
movups %xmm0,0x30(%r15)
movups %xmm0,0x20(%r15)
movups %xmm0,0x10(%r15)
movups %xmm0,(%r15)
mov    %r14,%rdi
mov    %r12,%rsi
mov    %r15,%rdx
mov    $0x20,%ecx
xor    %r8d,%r8d
mov    $0x20,%r9d
call   1050 <foo@plt>
movss  (%r15),%xmm1
xorps  %xmm0,%xmm0
ucomiss %xmm0,%xmm1
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x4(%r15),%xmm1
ucomiss %xmm0,%xmm1
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x8(%r15),%xmm1
xorps  %xmm0,%xmm0
ucomiss %xmm0,%xmm1
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0xc(%r15),%xmm1
ucomiss %xmm0,%xmm1
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x10(%r15),%xmm1
xorps  %xmm0,%xmm0
ucomiss %xmm0,%xmm1
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x14(%r15),%xmm1
ucomiss %xmm0,%xmm1
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x18(%r15),%xmm1
xorps  %xmm0,%xmm0
ucomiss %xmm0,%xmm1
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x1c(%r15),%xmm1
ucomiss %xmm0,%xmm1
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x20(%r15),%xmm1
xorps  %xmm0,%xmm0
ucomiss %xmm0,%xmm1
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x24(%r15),%xmm1
ucomiss %xmm0,%xmm1
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x28(%r15),%xmm1
xorps  %xmm0,%xmm0
ucomiss %xmm0,%xmm1
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x2c(%r15),%xmm1
ucomiss %xmm0,%xmm1
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x30(%r15),%xmm1
xorps  %xmm0,%xmm0
ucomiss %xmm0,%xmm1
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x34(%r15),%xmm1
ucomiss %xmm0,%xmm1
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x38(%r15),%xmm1
xorps  %xmm0,%xmm0
ucomiss %xmm0,%xmm1
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x3c(%r15),%xmm1
ucomiss %xmm0,%xmm1
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x40(%r15),%xmm1
xorps  %xmm0,%xmm0
ucomiss %xmm0,%xmm1
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x44(%r15),%xmm1
ucomiss %xmm0,%xmm1
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x48(%r15),%xmm1
xorps  %xmm0,%xmm0
ucomiss %xmm0,%xmm1
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x4c(%r15),%xmm1
ucomiss %xmm0,%xmm1
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x50(%r15),%xmm1
xorps  %xmm0,%xmm0
ucomiss %xmm0,%xmm1
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x54(%r15),%xmm1
ucomiss %xmm0,%xmm1
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x58(%r15),%xmm1
xorps  %xmm0,%xmm0
ucomiss %xmm0,%xmm1
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x5c(%r15),%xmm1
ucomiss %xmm0,%xmm1
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x60(%r15),%xmm1
xorps  %xmm0,%xmm0
ucomiss %xmm0,%xmm1
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x64(%r15),%xmm1
ucomiss %xmm0,%xmm1
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x68(%r15),%xmm1
xorps  %xmm0,%xmm0
ucomiss %xmm0,%xmm1
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x6c(%r15),%xmm1
ucomiss %xmm0,%xmm1
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x70(%r15),%xmm1
xorps  %xmm0,%xmm0
ucomiss %xmm0,%xmm1
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x74(%r15),%xmm1
ucomiss %xmm0,%xmm1
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x78(%r15),%xmm1
xorps  %xmm0,%xmm0
ucomiss %xmm0,%xmm1
jne    189e <main+0x76e>
jp     189e <main+0x76e>
movss  0x7c(%r15),%xmm1
ucomiss %xmm0,%xmm1
jne    189e <main+0x76e>
jp     189e <main+0x76e>
xor    %eax,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
ret
xor    %eax,%eax
call   1030 <abort@plt>

LLVM IR (-O0):
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca float**
%4 = alloca float**
%5 = alloca float*
%6 = alloca i32
%7 = alloca i32
store i32 0, i32* %1
store i32 32, i32* %2
%8 = call i64 @malloc(i32 256)
%9 = inttoptr i64 %8 to float**
store float** %9, float*** %3
%10 = call i64 @malloc(i32 256)
%11 = inttoptr i64 %10 to float**
store float** %11, float*** %4
%12 = call i64 @malloc(i32 128)
%13 = inttoptr i64 %12 to float*
store float* %13, float** %5
store i32 0, i32* %6
br label %14
14: ; preds = %30, %0
%15 = load i32, i32* %6
%16 = icmp slt i32 %15, 32
br i1 %16, label %17, label %33
17: ; preds = %14
%18 = call i64 @malloc(i32 128)
%19 = inttoptr i64 %18 to float*
%20 = load float**, float*** %3
%21 = load i32, i32* %6
%22 = sext i32 %21 to i64
%23 = getelementptr inbounds float*, float** %20, i64 %22
store float* %19, float** %23
%24 = call i64 @malloc(i32 128)
%25 = inttoptr i64 %24 to float*
%26 = load float**, float*** %4
%27 = load i32, i32* %6
%28 = sext i32 %27 to i64
%29 = getelementptr inbounds float*, float** %26, i64 %28
store float* %25, float** %29
br label %30
30: ; preds = %17
%31 = load i32, i32* %6
%32 = add nsw i32 %31, 1
store i32 %32, i32* %6
br label %14
33: ; preds = %14
store i32 0, i32* %6
br label %34
34: ; preds = %66, %33
%35 = load i32, i32* %6
%36 = icmp slt i32 %35, 32
br i1 %36, label %37, label %69
37: ; preds = %34
store i32 0, i32* %7
br label %38
38: ; preds = %58, %37
%39 = load i32, i32* %7
%40 = icmp slt i32 %39, 32
br i1 %40, label %41, label %61
41: ; preds = %38
%42 = load float**, float*** %3
%43 = load i32, i32* %6
%44 = sext i32 %43 to i64
%45 = getelementptr inbounds float*, float** %42, i64 %44
%46 = load float*, float** %45
%47 = load i32, i32* %7
%48 = sext i32 %47 to i64
%49 = getelementptr inbounds float, float* %46, i64 %48
store float 2.000000e+00, float* %49
%50 = load float**, float*** %4
%51 = load i32, i32* %6
%52 = sext i32 %51 to i64
%53 = getelementptr inbounds float*, float** %50, i64 %52
%54 = load float*, float** %53
%55 = load i32, i32* %7
%56 = sext i32 %55 to i64
%57 = getelementptr inbounds float, float* %54, i64 %56
store float 1.500000e+00, float* %57
br label %58
58: ; preds = %41
%59 = load i32, i32* %7
%60 = add nsw i32 %59, 1
store i32 %60, i32* %7
br label %38
61: ; preds = %38
%62 = load float*, float** %5
%63 = load i32, i32* %6
%64 = sext i32 %63 to i64
%65 = getelementptr inbounds float, float* %62, i64 %64
store float 0.000000e+00, float* %65
br label %66
66: ; preds = %61
%67 = load i32, i32* %6
%68 = add nsw i32 %67, 1
store i32 %68, i32* %6
br label %34
69: ; preds = %34
%70 = load float**, float*** %3
%71 = load float**, float*** %4
%72 = load float*, float** %5
%73 = call i32 @foo(float** %70, float** %71, float* %72, i32 32, i32 32, i32 32)
store i32 0, i32* %6
br label %74
74: ; preds = %87, %69
%75 = load i32, i32* %6
%76 = icmp slt i32 %75, 32
br i1 %76, label %77, label %90
77: ; preds = %74
%78 = load float*, float** %5
%79 = load i32, i32* %6
%80 = sext i32 %79 to i64
%81 = getelementptr inbounds float, float* %78, i64 %80
%82 = load float, float* %81
%83 = fcmp une float %82, 3.072000e+03
br i1 %83, label %84, label %86
84: ; preds = %77
%85 = call i32 (...) @abort()
unreachable
86: ; preds = %77
br label %87
87: ; preds = %86
%88 = load i32, i32* %6
%89 = add nsw i32 %88, 1
store i32 %89, i32* %6
br label %74
90: ; preds = %74
store i32 0, i32* %6
br label %91
91: ; preds = %99, %90
%92 = load i32, i32* %6
%93 = icmp slt i32 %92, 32
br i1 %93, label %94, label %102
94: ; preds = %91
%95 = load float*, float** %5
%96 = load i32, i32* %6
%97 = sext i32 %96 to i64
%98 = getelementptr inbounds float, float* %95, i64 %97
store float 0.000000e+00, float* %98
br label %99
99: ; preds = %94
%100 = load i32, i32* %6
%101 = add nsw i32 %100, 1
store i32 %101, i32* %6
br label %91
102: ; preds = %91
%103 = load float**, float*** %3
%104 = load float**, float*** %4
%105 = load float*, float** %5
%106 = call i32 @foo(float** %103, float** %104, float* %105, i32 32, i32 0, i32 32)
store i32 0, i32* %6
br label %107
107: ; preds = %120, %102
%108 = load i32, i32* %6
%109 = icmp slt i32 %108, 32
br i1 %109, label %110, label %123
110: ; preds = %107
%111 = load float*, float** %5
%112 = load i32, i32* %6
%113 = sext i32 %112 to i64
%114 = getelementptr inbounds float, float* %111, i64 %113
%115 = load float, float* %114
%116 = fcmp une float %115, 0.000000e+00
br i1 %116, label %117, label %119
117: ; preds = %110
%118 = call i32 (...) @abort()
unreachable
119: ; preds = %110
br label %120
120: ; preds = %119
%121 = load i32, i32* %6
%122 = add nsw i32 %121, 1
store i32 %122, i32* %6
br label %107
123: ; preds = %107
ret i32 0
}

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