#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 */
typedef struct TYPE_8__ TYPE_4__;
typedef struct TYPE_7__ TYPE_3__;
typedef struct TYPE_6__ TYPE_2__;
typedef struct TYPE_5__ TYPE_1__;

/* Type definitions */
struct TYPE_8__ {
  int member_1;
  int member_2;
  int member_3;
  int member_4;
  int member_5;
  int member_6;
  int member_7;
  int member_8;
  int member_9;
  int member_10;
  int member_11;
  int member_12;
  int member_13;
  int member_14;
  int member_15;
  int /*<<< orphan*/ member_0;
};
struct TYPE_7__ {
  int member_1;
  int member_2;
  int member_3;
  int member_4;
  int member_5;
  int member_6;
  int member_7;
  int member_8;
  int member_9;
  int member_10;
  int member_11;
  int member_12;
  int member_13;
  int member_14;
  int member_15;
  int /*<<< orphan*/ member_0;
};
struct TYPE_6__ {
  int member_1;
  int member_2;
  int member_3;
  int member_4;
  int member_5;
  int member_6;
  int member_7;
  int member_8;
  int member_9;
  int member_10;
  int member_11;
  int member_12;
  int member_13;
  int member_14;
  int member_15;
  int /*<<< orphan*/ member_0;
};
struct TYPE_5__ {
  int member_1;
  int member_2;
  int member_3;
  int member_4;
  int member_5;
  int member_6;
  int member_7;
  int member_8;
  int member_9;
  int member_10;
  int member_11;
  int member_12;
  int member_13;
  int member_14;
  int member_15;
  int /*<<< orphan*/ member_0;
};

/* Variables and functions */
int /*<<< orphan*/ abort();
int main1() {
  int i, j;
  int ib[4][4][16] = {
      {{0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45},
       {0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45},
       {0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45},
       {0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45}},
      {{0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45},
       {0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45},
       {0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45},
       {0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45}},
      {{0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45},
       {0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45},
       {0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45},
       {0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45}},
      {{0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45},
       {0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45},
       {0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45},
       {0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45}}};
  int ia[4][4][16];
  int ic[16];
  for (i = 0; i < 4; i++) {
    for (j = 0; j < 16; j++) {
      ia[i][1][j] = ib[2][i][j];
    }
  }
  for (i = 0; i < 4; i++) {
    for (j = 0; j < 16; j++) {
      if (ia[i][1][j] != ib[2][i][j])
        abort();
    }
  }
  for (i = 0; i < 4; i++) {
    for (j = 0; j < 16; j++) {
      ic[j] = ib[2][i][j];
    }
  }
  for (i = 0; i < 4; i++) {
    for (j = 0; j < 16; j++) {
      if (ic[j] != ib[2][i][j])
        abort();
    }
  }
  return 0;
}


x86 assembly (clang, -O0):
<main1>:
push   %rbp
mov    %rsp,%rbp
sub    $0x850,%rsp
lea    -0x410(%rbp),%rdi
lea    0xec7(%rip),%rsi
mov    $0x400,%edx
call   1040 <memcpy@plt>
movl   $0x0,-0x4(%rbp)
cmpl   $0x4,-0x4(%rbp)
jge    11bf <main1+0x9f>
movl   $0x0,-0x8(%rbp)
cmpl   $0x10,-0x8(%rbp)
jge    11ac <main1+0x8c>
lea    -0x410(%rbp),%rax
add    $0x200,%rax
movslq -0x4(%rbp),%rcx
shl    $0x6,%rcx
add    %rcx,%rax
movslq -0x8(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
movslq -0x4(%rbp),%rcx
lea    -0x810(%rbp),%rax
shl    $0x8,%rcx
add    %rcx,%rax
movslq -0x8(%rbp),%rcx
mov    %edx,0x40(%rax,%rcx,4)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    115b <main1+0x3b>
jmp    11b1 <main1+0x91>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    114a <main1+0x2a>
movl   $0x0,-0x4(%rbp)
cmpl   $0x4,-0x4(%rbp)
jge    124e <main1+0x12e>
movl   $0x0,-0x8(%rbp)
cmpl   $0x10,-0x8(%rbp)
jge    123b <main1+0x11b>
movslq -0x4(%rbp),%rcx
lea    -0x810(%rbp),%rax
shl    $0x8,%rcx
add    %rcx,%rax
movslq -0x8(%rbp),%rcx
mov    0x40(%rax,%rcx,4),%eax
lea    -0x410(%rbp),%rcx
add    $0x200,%rcx
movslq -0x4(%rbp),%rdx
shl    $0x6,%rdx
add    %rdx,%rcx
movslq -0x8(%rbp),%rdx
cmp    (%rcx,%rdx,4),%eax
je     1228 <main1+0x108>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    122d <main1+0x10d>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    11d7 <main1+0xb7>
jmp    1240 <main1+0x120>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    11c6 <main1+0xa6>
movl   $0x0,-0x4(%rbp)
cmpl   $0x4,-0x4(%rbp)
jge    12bb <main1+0x19b>
movl   $0x0,-0x8(%rbp)
cmpl   $0x10,-0x8(%rbp)
jge    12a8 <main1+0x188>
lea    -0x410(%rbp),%rax
add    $0x200,%rax
movslq -0x4(%rbp),%rcx
shl    $0x6,%rcx
add    %rcx,%rax
movslq -0x8(%rbp),%rcx
mov    (%rax,%rcx,4),%ecx
movslq -0x8(%rbp),%rax
mov    %ecx,-0x850(%rbp,%rax,4)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1266 <main1+0x146>
jmp    12ad <main1+0x18d>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    1255 <main1+0x135>
movl   $0x0,-0x4(%rbp)
cmpl   $0x4,-0x4(%rbp)
jge    133b <main1+0x21b>
movl   $0x0,-0x8(%rbp)
cmpl   $0x10,-0x8(%rbp)
jge    1328 <main1+0x208>
movslq -0x8(%rbp),%rax
mov    -0x850(%rbp,%rax,4),%eax
lea    -0x410(%rbp),%rcx
add    $0x200,%rcx
movslq -0x4(%rbp),%rdx
shl    $0x6,%rdx
add    %rdx,%rcx
movslq -0x8(%rbp),%rdx
cmp    (%rcx,%rdx,4),%eax
je     1315 <main1+0x1f5>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    131a <main1+0x1fa>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    12d3 <main1+0x1b3>
jmp    132d <main1+0x20d>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    12c2 <main1+0x1a2>
xor    %eax,%eax
add    $0x850,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main1>:
sub    $0x408,%rsp
movaps 0x1112(%rip),%xmm0
movaps %xmm0,0x70(%rsp)
movaps 0x10f6(%rip),%xmm0
movaps %xmm0,0x60(%rsp)
movaps 0x10da(%rip),%xmm0
movaps %xmm0,0x50(%rsp)
movaps 0x10be(%rip),%xmm0
movaps %xmm0,0x40(%rsp)
movaps 0x10f2(%rip),%xmm0
movaps %xmm0,0x140(%rsp)
movaps 0x10f3(%rip),%xmm0
movaps %xmm0,0x150(%rsp)
movaps 0x10f4(%rip),%xmm0
movaps %xmm0,0x160(%rsp)
movaps 0x10f5(%rip),%xmm0
movaps %xmm0,0x170(%rsp)
movaps 0x10f6(%rip),%xmm0
movaps %xmm0,0x240(%rsp)
movaps 0x10f7(%rip),%xmm0
movaps %xmm0,0x250(%rsp)
movaps 0x10f8(%rip),%xmm0
movaps %xmm0,0x260(%rsp)
movaps 0x10f9(%rip),%xmm0
movaps %xmm0,0x270(%rsp)
movaps 0x112a(%rip),%xmm0
movaps %xmm0,0x370(%rsp)
movaps 0x110b(%rip),%xmm0
movaps %xmm0,0x360(%rsp)
movaps 0x10ec(%rip),%xmm0
movaps %xmm0,0x350(%rsp)
movaps 0x10cd(%rip),%xmm0
movaps %xmm0,0x340(%rsp)
xor    %ecx,%ecx
lea    0xdfc(%rip),%rax
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    0x44(%rsp,%rcx,4),%edx
cmp    0x204(%rcx,%rax,1),%edx
jne    1313 <main1+0x203>
mov    0x48(%rsp,%rcx,4),%edx
cmp    0x208(%rcx,%rax,1),%edx
jne    1313 <main1+0x203>
mov    0x4c(%rsp,%rcx,4),%edx
cmp    0x20c(%rcx,%rax,1),%edx
jne    1313 <main1+0x203>
mov    0x50(%rsp,%rcx,4),%edx
cmp    0x210(%rcx,%rax,1),%edx
jne    1313 <main1+0x203>
mov    0x54(%rsp,%rcx,4),%edx
cmp    0x214(%rcx,%rax,1),%edx
jne    1313 <main1+0x203>
mov    0x58(%rsp,%rcx,4),%edx
cmp    0x218(%rcx,%rax,1),%edx
jne    1313 <main1+0x203>
mov    0x5c(%rsp,%rcx,4),%edx
cmp    0x21c(%rcx,%rax,1),%edx
jne    1313 <main1+0x203>
mov    0x60(%rsp,%rcx,4),%edx
cmp    0x220(%rcx,%rax,1),%edx
jne    1313 <main1+0x203>
mov    0x64(%rsp,%rcx,4),%edx
cmp    0x224(%rcx,%rax,1),%edx
jne    1313 <main1+0x203>
mov    0x68(%rsp,%rcx,4),%edx
cmp    0x228(%rcx,%rax,1),%edx
jne    1313 <main1+0x203>
mov    0x6c(%rsp,%rcx,4),%edx
cmp    0x22c(%rcx,%rax,1),%edx
jne    1313 <main1+0x203>
mov    0x70(%rsp,%rcx,4),%edx
cmp    0x230(%rcx,%rax,1),%edx
jne    1313 <main1+0x203>
mov    0x74(%rsp,%rcx,4),%edx
cmp    0x234(%rcx,%rax,1),%edx
jne    1313 <main1+0x203>
mov    0x78(%rsp,%rcx,4),%edx
cmp    0x238(%rcx,%rax,1),%edx
jne    1313 <main1+0x203>
mov    0x7c(%rsp,%rcx,4),%edx
cmp    0x23c(%rcx,%rax,1),%edx
jne    1313 <main1+0x203>
lea    0x40(%rcx),%rdx
cmp    $0x100,%rdx
je     131a <main1+0x20a>
mov    0x140(%rsp,%rcx,4),%esi
cmp    0x240(%rcx,%rax,1),%esi
mov    %rdx,%rcx
je     1210 <main1+0x100>
xor    %eax,%eax
call   1030 <abort@plt>
xor    %ecx,%ecx
nopl   0x0(%rax)
cmpl   $0x0,0x200(%rcx,%rax,1)
jne    1313 <main1+0x203>
cmpl   $0x3,0x204(%rcx,%rax,1)
03
jne    1313 <main1+0x203>
cmpl   $0x6,0x208(%rcx,%rax,1)
06
jne    1313 <main1+0x203>
cmpl   $0x9,0x20c(%rcx,%rax,1)
09
jne    1313 <main1+0x203>
cmpl   $0xc,0x210(%rcx,%rax,1)
0c
jne    1313 <main1+0x203>
cmpl   $0xf,0x214(%rcx,%rax,1)
0f
jne    1313 <main1+0x203>
cmpl   $0x12,0x218(%rcx,%rax,1)
12
jne    1313 <main1+0x203>
cmpl   $0x15,0x21c(%rcx,%rax,1)
15
jne    1313 <main1+0x203>
cmpl   $0x18,0x220(%rcx,%rax,1)
18
jne    1313 <main1+0x203>
cmpl   $0x1b,0x224(%rcx,%rax,1)
1b
jne    1313 <main1+0x203>
cmpl   $0x1e,0x228(%rcx,%rax,1)
1e
jne    1313 <main1+0x203>
cmpl   $0x21,0x22c(%rcx,%rax,1)
21
jne    1313 <main1+0x203>
cmpl   $0x24,0x230(%rcx,%rax,1)
24
jne    1313 <main1+0x203>
cmpl   $0x27,0x234(%rcx,%rax,1)
27
jne    1313 <main1+0x203>
cmpl   $0x2a,0x238(%rcx,%rax,1)
2a
jne    1313 <main1+0x203>
cmpl   $0x2d,0x23c(%rcx,%rax,1)
2d
jne    1313 <main1+0x203>
add    $0x40,%rcx
cmp    $0x100,%rcx
jne    1320 <main1+0x210>
xor    %eax,%eax
add    $0x408,%rsp
ret

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

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