void ramb_words_split_data_parity(const int (*ramb_words)[1024],
                                  int (*init_data)[64][16],
                                  int (*init_parity)[8][16]) {
  int init_i, i, j;
  for (init_i = 0; init_i < 8; init_i++) {
    for (i = 0; i < 16; i++) {
      (*init_parity)[init_i][i] = 0;
      for (j = 0; j < 8; j++) {
        if ((*ramb_words)[128 * init_i + 8 * i + j] & (1 << 16))
          (*init_parity)[init_i][i] |= 1 << (j * 2 + 0);
        if ((*ramb_words)[128 * init_i + 8 * i + j] & (1 << 17))
          (*init_parity)[init_i][i] |= 1 << (j * 2 + 1);
      }
    }
  }
  for (init_i = 0; init_i < 64; init_i++) {
    for (i = 0; i < 16; i++) {
      (*init_data)[init_i][i] = (*ramb_words)[init_i * 16 + i] & 0xFFFF;
    }
  }
}


x86 assembly (clang, -O0):
<ramb_words_split_data_parity>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
movl   $0x0,-0x1c(%rbp)
cmpl   $0x8,-0x1c(%rbp)
jge    123a <ramb_words_split_data_parity+0x13a>
movl   $0x0,-0x20(%rbp)
cmpl   $0x10,-0x20(%rbp)
jge    1227 <ramb_words_split_data_parity+0x127>
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
shl    $0x6,%rcx
add    %rcx,%rax
movslq -0x20(%rbp),%rcx
movl   $0x0,(%rax,%rcx,4)
movl   $0x0,-0x24(%rbp)
cmpl   $0x8,-0x24(%rbp)
jge    1214 <ramb_words_split_data_parity+0x114>
mov    -0x8(%rbp),%rax
mov    -0x1c(%rbp),%ecx
shl    $0x7,%ecx
mov    -0x20(%rbp),%edx
shl    $0x3,%edx
add    %edx,%ecx
add    -0x24(%rbp),%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
and    $0x10000,%eax
cmp    $0x0,%eax
je     11af <ramb_words_split_data_parity+0xaf>
mov    -0x24(%rbp),%ecx
shl    $0x1,%ecx
add    $0x0,%ecx
mov    $0x1,%edx
shl    %cl,%edx
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
shl    $0x6,%rcx
add    %rcx,%rax
movslq -0x20(%rbp),%rcx
or     (%rax,%rcx,4),%edx
mov    %edx,(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
mov    -0x1c(%rbp),%ecx
shl    $0x7,%ecx
mov    -0x20(%rbp),%edx
shl    $0x3,%edx
add    %edx,%ecx
add    -0x24(%rbp),%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
and    $0x20000,%eax
cmp    $0x0,%eax
je     1201 <ramb_words_split_data_parity+0x101>
mov    -0x24(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
mov    $0x1,%edx
shl    %cl,%edx
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
shl    $0x6,%rcx
add    %rcx,%rax
movslq -0x20(%rbp),%rcx
or     (%rax,%rcx,4),%edx
mov    %edx,(%rax,%rcx,4)
jmp    1206 <ramb_words_split_data_parity+0x106>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    1153 <ramb_words_split_data_parity+0x53>
jmp    1219 <ramb_words_split_data_parity+0x119>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    1128 <ramb_words_split_data_parity+0x28>
jmp    122c <ramb_words_split_data_parity+0x12c>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1117 <ramb_words_split_data_parity+0x17>
movl   $0x0,-0x1c(%rbp)
cmpl   $0x40,-0x1c(%rbp)
jge    12ac <ramb_words_split_data_parity+0x1ac>
movl   $0x0,-0x20(%rbp)
cmpl   $0x10,-0x20(%rbp)
jge    1299 <ramb_words_split_data_parity+0x199>
mov    -0x8(%rbp),%rax
mov    -0x1c(%rbp),%ecx
shl    $0x4,%ecx
add    -0x20(%rbp),%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
and    $0xffff,%edx
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
shl    $0x6,%rcx
add    %rcx,%rax
movslq -0x20(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    1252 <ramb_words_split_data_parity+0x152>
jmp    129e <ramb_words_split_data_parity+0x19e>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1241 <ramb_words_split_data_parity+0x141>
pop    %rbp
ret

x86 assembly (clang, -O2):
<ramb_words_split_data_parity>:
lea    0x1c(%rdi),%r9
xor    %r8d,%r8d
jmp    1129 <ramb_words_split_data_parity+0x29>
nopl   0x0(%rax)
add    $0x1,%r8
add    $0x200,%r9
add    $0x40,%rdx
cmp    $0x8,%r8
je     12a6 <ramb_words_split_data_parity+0x1a6>
xor    %ecx,%ecx
jmp    113a <ramb_words_split_data_parity+0x3a>
nopl   (%rax)
add    $0x4,%rcx
cmp    $0x40,%rcx
je     1110 <ramb_words_split_data_parity+0x10>
movl   $0x0,(%rdx,%rcx,1)
lea    (%rcx,%rcx,1),%r10
mov    -0x1c(%r9,%rcx,8),%r11d
xor    %eax,%eax
test   $0x10000,%r11d
je     1166 <ramb_words_split_data_parity+0x66>
movl   $0x1,(%rdx,%rcx,1)
mov    -0x1c(%r9,%r10,4),%r11d
mov    $0x1,%eax
test   $0x20000,%r11d
je     1175 <ramb_words_split_data_parity+0x75>
or     $0x2,%eax
mov    %eax,(%rdx,%rcx,1)
mov    -0x18(%r9,%rcx,8),%r11d
test   $0x10000,%r11d
je     118e <ramb_words_split_data_parity+0x8e>
or     $0x4,%eax
mov    %eax,(%rdx,%rcx,1)
mov    -0x18(%r9,%r10,4),%r11d
test   $0x20000,%r11d
je     119d <ramb_words_split_data_parity+0x9d>
or     $0x8,%eax
mov    %eax,(%rdx,%rcx,1)
mov    -0x14(%r9,%rcx,8),%r11d
test   $0x10000,%r11d
je     11b6 <ramb_words_split_data_parity+0xb6>
or     $0x10,%eax
mov    %eax,(%rdx,%rcx,1)
mov    -0x14(%r9,%r10,4),%r11d
test   $0x20000,%r11d
je     11c5 <ramb_words_split_data_parity+0xc5>
or     $0x20,%eax
mov    %eax,(%rdx,%rcx,1)
mov    -0x10(%r9,%rcx,8),%r11d
test   $0x10000,%r11d
je     11de <ramb_words_split_data_parity+0xde>
or     $0x40,%eax
mov    %eax,(%rdx,%rcx,1)
mov    -0x10(%r9,%r10,4),%r11d
test   $0x20000,%r11d
je     11ef <ramb_words_split_data_parity+0xef>
or     $0x80,%eax
mov    %eax,(%rdx,%rcx,1)
mov    -0xc(%r9,%rcx,8),%r11d
test   $0x10000,%r11d
je     120a <ramb_words_split_data_parity+0x10a>
or     $0x100,%eax
mov    %eax,(%rdx,%rcx,1)
mov    -0xc(%r9,%r10,4),%r11d
test   $0x20000,%r11d
je     121b <ramb_words_split_data_parity+0x11b>
or     $0x200,%eax
mov    %eax,(%rdx,%rcx,1)
mov    -0x8(%r9,%rcx,8),%r11d
test   $0x10000,%r11d
je     1236 <ramb_words_split_data_parity+0x136>
or     $0x400,%eax
mov    %eax,(%rdx,%rcx,1)
mov    -0x8(%r9,%r10,4),%r11d
test   $0x20000,%r11d
je     1247 <ramb_words_split_data_parity+0x147>
or     $0x800,%eax
mov    %eax,(%rdx,%rcx,1)
mov    -0x4(%r9,%rcx,8),%r11d
test   $0x10000,%r11d
je     1262 <ramb_words_split_data_parity+0x162>
or     $0x1000,%eax
mov    %eax,(%rdx,%rcx,1)
mov    -0x4(%r9,%r10,4),%r11d
test   $0x20000,%r11d
je     1273 <ramb_words_split_data_parity+0x173>
or     $0x2000,%eax
mov    %eax,(%rdx,%rcx,1)
mov    (%r9,%rcx,8),%r11d
test   $0x10000,%r11d
je     128c <ramb_words_split_data_parity+0x18c>
or     $0x4000,%eax
mov    %eax,(%rdx,%rcx,1)
mov    (%r9,%r10,4),%r11d
test   $0x20000,%r11d
je     1130 <ramb_words_split_data_parity+0x30>
or     $0x8000,%eax
mov    %eax,(%rdx,%rcx,1)
jmp    1130 <ramb_words_split_data_parity+0x30>
xor    %eax,%eax
nopl   0x0(%rax,%rax,1)
movzwl (%rdi,%rax,1),%ecx
mov    %ecx,(%rsi,%rax,1)
movzwl 0x4(%rdi,%rax,1),%ecx
mov    %ecx,0x4(%rsi,%rax,1)
movzwl 0x8(%rdi,%rax,1),%ecx
mov    %ecx,0x8(%rsi,%rax,1)
movzwl 0xc(%rdi,%rax,1),%ecx
mov    %ecx,0xc(%rsi,%rax,1)
movzwl 0x10(%rdi,%rax,1),%ecx
mov    %ecx,0x10(%rsi,%rax,1)
movzwl 0x14(%rdi,%rax,1),%ecx
mov    %ecx,0x14(%rsi,%rax,1)
movzwl 0x18(%rdi,%rax,1),%ecx
mov    %ecx,0x18(%rsi,%rax,1)
movzwl 0x1c(%rdi,%rax,1),%ecx
mov    %ecx,0x1c(%rsi,%rax,1)
movzwl 0x20(%rdi,%rax,1),%ecx
mov    %ecx,0x20(%rsi,%rax,1)
movzwl 0x24(%rdi,%rax,1),%ecx
mov    %ecx,0x24(%rsi,%rax,1)
movzwl 0x28(%rdi,%rax,1),%ecx
mov    %ecx,0x28(%rsi,%rax,1)
movzwl 0x2c(%rdi,%rax,1),%ecx
mov    %ecx,0x2c(%rsi,%rax,1)
movzwl 0x30(%rdi,%rax,1),%ecx
mov    %ecx,0x30(%rsi,%rax,1)
movzwl 0x34(%rdi,%rax,1),%ecx
mov    %ecx,0x34(%rsi,%rax,1)
movzwl 0x38(%rdi,%rax,1),%ecx
mov    %ecx,0x38(%rsi,%rax,1)
movzwl 0x3c(%rdi,%rax,1),%ecx
mov    %ecx,0x3c(%rsi,%rax,1)
add    $0x40,%rax
cmp    $0x1000,%rax
jne    12b0 <ramb_words_split_data_parity+0x1b0>
ret

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

LLVM IR (-O2):
define void @ramb_words_split_data_parity([1024 x i32]* nocapture %0, [64 x [16 x i32]]* nocapture writeonly %1, [8 x [16 x i32]]* nocapture %2) {
br label %4
4: ; preds = %3, %147
%5 = phi i64 [ 0, %3 ], [ %148, %147 ]
%6 = shl nsw i64 %5, 7
br label %7
7: ; preds = %4, %144
%8 = phi i64 [ 0, %4 ], [ %145, %144 ]
%9 = getelementptr inbounds [8 x [16 x i32]], [8 x [16 x i32]]* %2, i64 0, i64 %5, i64 %8
store i32 0, i32* %9
%10 = shl nsw i64 %8, 3
%11 = add nuw nsw i64 %10, %6
%12 = getelementptr inbounds [1024 x i32], [1024 x i32]* %0, i64 0, i64 %11
%13 = load i32, i32* %12
%14 = and i32 %13, 65536
%15 = icmp eq i32 %14, 0
br i1 %15, label %18, label %16
16: ; preds = %7
store i32 1, i32* %9
%17 = load i32, i32* %12
br label %18
18: ; preds = %16, %7
%19 = phi i32 [ 1, %16 ], [ 0, %7 ]
%20 = phi i32 [ %17, %16 ], [ %13, %7 ]
%21 = and i32 %20, 131072
%22 = icmp eq i32 %21, 0
br i1 %22, label %25, label %23
23: ; preds = %18
%24 = or i32 %19, 2
store i32 %24, i32* %9
br label %25
25: ; preds = %18, %23
%26 = phi i32 [ %19, %18 ], [ %24, %23 ]
%27 = or i64 %11, 1
%28 = getelementptr inbounds [1024 x i32], [1024 x i32]* %0, i64 0, i64 %27
%29 = load i32, i32* %28
%30 = and i32 %29, 65536
%31 = icmp eq i32 %30, 0
br i1 %31, label %35, label %32
32: ; preds = %25
%33 = or i32 %26, 4
store i32 %33, i32* %9
%34 = load i32, i32* %28
br label %35
35: ; preds = %32, %25
%36 = phi i32 [ %33, %32 ], [ %26, %25 ]
%37 = phi i32 [ %34, %32 ], [ %29, %25 ]
%38 = and i32 %37, 131072
%39 = icmp eq i32 %38, 0
br i1 %39, label %42, label %40
40: ; preds = %35
%41 = or i32 %36, 8
store i32 %41, i32* %9
br label %42
42: ; preds = %40, %35
%43 = phi i32 [ %41, %40 ], [ %36, %35 ]
%44 = or i64 %11, 2
%45 = getelementptr inbounds [1024 x i32], [1024 x i32]* %0, i64 0, i64 %44
%46 = load i32, i32* %45
%47 = and i32 %46, 65536
%48 = icmp eq i32 %47, 0
br i1 %48, label %52, label %49
49: ; preds = %42
%50 = or i32 %43, 16
store i32 %50, i32* %9
%51 = load i32, i32* %45
br label %52
52: ; preds = %49, %42
%53 = phi i32 [ %50, %49 ], [ %43, %42 ]
%54 = phi i32 [ %51, %49 ], [ %46, %42 ]
%55 = and i32 %54, 131072
%56 = icmp eq i32 %55, 0
br i1 %56, label %59, label %57
57: ; preds = %52
%58 = or i32 %53, 32
store i32 %58, i32* %9
br label %59
59: ; preds = %57, %52
%60 = phi i32 [ %58, %57 ], [ %53, %52 ]
%61 = or i64 %11, 3
%62 = getelementptr inbounds [1024 x i32], [1024 x i32]* %0, i64 0, i64 %61
%63 = load i32, i32* %62
%64 = and i32 %63, 65536
%65 = icmp eq i32 %64, 0
br i1 %65, label %69, label %66
66: ; preds = %59
%67 = or i32 %60, 64
store i32 %67, i32* %9
%68 = load i32, i32* %62
br label %69
69: ; preds = %66, %59
%70 = phi i32 [ %67, %66 ], [ %60, %59 ]
%71 = phi i32 [ %68, %66 ], [ %63, %59 ]
%72 = and i32 %71, 131072
%73 = icmp eq i32 %72, 0
br i1 %73, label %76, label %74
74: ; preds = %69
%75 = or i32 %70, 128
store i32 %75, i32* %9
br label %76
76: ; preds = %74, %69
%77 = phi i32 [ %75, %74 ], [ %70, %69 ]
%78 = or i64 %11, 4
%79 = getelementptr inbounds [1024 x i32], [1024 x i32]* %0, i64 0, i64 %78
%80 = load i32, i32* %79
%81 = and i32 %80, 65536
%82 = icmp eq i32 %81, 0
br i1 %82, label %86, label %83
83: ; preds = %76
%84 = or i32 %77, 256
store i32 %84, i32* %9
%85 = load i32, i32* %79
br label %86
86: ; preds = %83, %76
%87 = phi i32 [ %84, %83 ], [ %77, %76 ]
%88 = phi i32 [ %85, %83 ], [ %80, %76 ]
%89 = and i32 %88, 131072
%90 = icmp eq i32 %89, 0
br i1 %90, label %93, label %91
91: ; preds = %86
%92 = or i32 %87, 512
store i32 %92, i32* %9
br label %93
93: ; preds = %91, %86
%94 = phi i32 [ %92, %91 ], [ %87, %86 ]
%95 = or i64 %11, 5
%96 = getelementptr inbounds [1024 x i32], [1024 x i32]* %0, i64 0, i64 %95
%97 = load i32, i32* %96
%98 = and i32 %97, 65536
%99 = icmp eq i32 %98, 0
br i1 %99, label %103, label %100
100: ; preds = %93
%101 = or i32 %94, 1024
store i32 %101, i32* %9
%102 = load i32, i32* %96
br label %103
103: ; preds = %100, %93
%104 = phi i32 [ %101, %100 ], [ %94, %93 ]
%105 = phi i32 [ %102, %100 ], [ %97, %93 ]
%106 = and i32 %105, 131072
%107 = icmp eq i32 %106, 0
br i1 %107, label %110, label %108
108: ; preds = %103
%109 = or i32 %104, 2048
store i32 %109, i32* %9
br label %110
110: ; preds = %108, %103
%111 = phi i32 [ %109, %108 ], [ %104, %103 ]
%112 = or i64 %11, 6
%113 = getelementptr inbounds [1024 x i32], [1024 x i32]* %0, i64 0, i64 %112
%114 = load i32, i32* %113
%115 = and i32 %114, 65536
%116 = icmp eq i32 %115, 0
br i1 %116, label %120, label %117
117: ; preds = %110
%118 = or i32 %111, 4096
store i32 %118, i32* %9
%119 = load i32, i32* %113
br label %120
120: ; preds = %117, %110
%121 = phi i32 [ %118, %117 ], [ %111, %110 ]
%122 = phi i32 [ %119, %117 ], [ %114, %110 ]
%123 = and i32 %122, 131072
%124 = icmp eq i32 %123, 0
br i1 %124, label %127, label %125
125: ; preds = %120
%126 = or i32 %121, 8192
store i32 %126, i32* %9
br label %127
127: ; preds = %125, %120
%128 = phi i32 [ %126, %125 ], [ %121, %120 ]
%129 = or i64 %11, 7
%130 = getelementptr inbounds [1024 x i32], [1024 x i32]* %0, i64 0, i64 %129
%131 = load i32, i32* %130
%132 = and i32 %131, 65536
%133 = icmp eq i32 %132, 0
br i1 %133, label %137, label %134
134: ; preds = %127
%135 = or i32 %128, 16384
store i32 %135, i32* %9
%136 = load i32, i32* %130
br label %137
137: ; preds = %134, %127
%138 = phi i32 [ %135, %134 ], [ %128, %127 ]
%139 = phi i32 [ %136, %134 ], [ %131, %127 ]
%140 = and i32 %139, 131072
%141 = icmp eq i32 %140, 0
br i1 %141, label %144, label %142
142: ; preds = %137
%143 = or i32 %138, 32768
store i32 %143, i32* %9
br label %144
144: ; preds = %142, %137
%145 = add nuw nsw i64 %8, 1
%146 = icmp eq i64 %145, 16
br i1 %146, label %147, label %7
147: ; preds = %144
%148 = add nuw nsw i64 %5, 1
%149 = icmp eq i64 %148, 8
br i1 %149, label %150, label %4
150: ; preds = %147, %150
%151 = phi i64 [ %232, %150 ], [ 0, %147 ]
%152 = shl nsw i64 %151, 4
%153 = getelementptr inbounds [1024 x i32], [1024 x i32]* %0, i64 0, i64 %152
%154 = load i32, i32* %153
%155 = and i32 %154, 65535
%156 = getelementptr inbounds [64 x [16 x i32]], [64 x [16 x i32]]* %1, i64 0, i64 %151, i64 0
store i32 %155, i32* %156
%157 = or i64 %152, 1
%158 = getelementptr inbounds [1024 x i32], [1024 x i32]* %0, i64 0, i64 %157
%159 = load i32, i32* %158
%160 = and i32 %159, 65535
%161 = getelementptr inbounds [64 x [16 x i32]], [64 x [16 x i32]]* %1, i64 0, i64 %151, i64 1
store i32 %160, i32* %161
%162 = or i64 %152, 2
%163 = getelementptr inbounds [1024 x i32], [1024 x i32]* %0, i64 0, i64 %162
%164 = load i32, i32* %163
%165 = and i32 %164, 65535
%166 = getelementptr inbounds [64 x [16 x i32]], [64 x [16 x i32]]* %1, i64 0, i64 %151, i64 2
store i32 %165, i32* %166
%167 = or i64 %152, 3
%168 = getelementptr inbounds [1024 x i32], [1024 x i32]* %0, i64 0, i64 %167
%169 = load i32, i32* %168
%170 = and i32 %169, 65535
%171 = getelementptr inbounds [64 x [16 x i32]], [64 x [16 x i32]]* %1, i64 0, i64 %151, i64 3
store i32 %170, i32* %171
%172 = or i64 %152, 4
%173 = getelementptr inbounds [1024 x i32], [1024 x i32]* %0, i64 0, i64 %172
%174 = load i32, i32* %173
%175 = and i32 %174, 65535
%176 = getelementptr inbounds [64 x [16 x i32]], [64 x [16 x i32]]* %1, i64 0, i64 %151, i64 4
store i32 %175, i32* %176
%177 = or i64 %152, 5
%178 = getelementptr inbounds [1024 x i32], [1024 x i32]* %0, i64 0, i64 %177
%179 = load i32, i32* %178
%180 = and i32 %179, 65535
%181 = getelementptr inbounds [64 x [16 x i32]], [64 x [16 x i32]]* %1, i64 0, i64 %151, i64 5
store i32 %180, i32* %181
%182 = or i64 %152, 6
%183 = getelementptr inbounds [1024 x i32], [1024 x i32]* %0, i64 0, i64 %182
%184 = load i32, i32* %183
%185 = and i32 %184, 65535
%186 = getelementptr inbounds [64 x [16 x i32]], [64 x [16 x i32]]* %1, i64 0, i64 %151, i64 6
store i32 %185, i32* %186
%187 = or i64 %152, 7
%188 = getelementptr inbounds [1024 x i32], [1024 x i32]* %0, i64 0, i64 %187
%189 = load i32, i32* %188
%190 = and i32 %189, 65535
%191 = getelementptr inbounds [64 x [16 x i32]], [64 x [16 x i32]]* %1, i64 0, i64 %151, i64 7
store i32 %190, i32* %191
%192 = or i64 %152, 8
%193 = getelementptr inbounds [1024 x i32], [1024 x i32]* %0, i64 0, i64 %192
%194 = load i32, i32* %193
%195 = and i32 %194, 65535
%196 = getelementptr inbounds [64 x [16 x i32]], [64 x [16 x i32]]* %1, i64 0, i64 %151, i64 8
store i32 %195, i32* %196
%197 = or i64 %152, 9
%198 = getelementptr inbounds [1024 x i32], [1024 x i32]* %0, i64 0, i64 %197
%199 = load i32, i32* %198
%200 = and i32 %199, 65535
%201 = getelementptr inbounds [64 x [16 x i32]], [64 x [16 x i32]]* %1, i64 0, i64 %151, i64 9
store i32 %200, i32* %201
%202 = or i64 %152, 10
%203 = getelementptr inbounds [1024 x i32], [1024 x i32]* %0, i64 0, i64 %202
%204 = load i32, i32* %203
%205 = and i32 %204, 65535
%206 = getelementptr inbounds [64 x [16 x i32]], [64 x [16 x i32]]* %1, i64 0, i64 %151, i64 10
store i32 %205, i32* %206
%207 = or i64 %152, 11
%208 = getelementptr inbounds [1024 x i32], [1024 x i32]* %0, i64 0, i64 %207
%209 = load i32, i32* %208
%210 = and i32 %209, 65535
%211 = getelementptr inbounds [64 x [16 x i32]], [64 x [16 x i32]]* %1, i64 0, i64 %151, i64 11
store i32 %210, i32* %211
%212 = or i64 %152, 12
%213 = getelementptr inbounds [1024 x i32], [1024 x i32]* %0, i64 0, i64 %212
%214 = load i32, i32* %213
%215 = and i32 %214, 65535
%216 = getelementptr inbounds [64 x [16 x i32]], [64 x [16 x i32]]* %1, i64 0, i64 %151, i64 12
store i32 %215, i32* %216
%217 = or i64 %152, 13
%218 = getelementptr inbounds [1024 x i32], [1024 x i32]* %0, i64 0, i64 %217
%219 = load i32, i32* %218
%220 = and i32 %219, 65535
%221 = getelementptr inbounds [64 x [16 x i32]], [64 x [16 x i32]]* %1, i64 0, i64 %151, i64 13
store i32 %220, i32* %221
%222 = or i64 %152, 14
%223 = getelementptr inbounds [1024 x i32], [1024 x i32]* %0, i64 0, i64 %222
%224 = load i32, i32* %223
%225 = and i32 %224, 65535
%226 = getelementptr inbounds [64 x [16 x i32]], [64 x [16 x i32]]* %1, i64 0, i64 %151, i64 14
store i32 %225, i32* %226
%227 = or i64 %152, 15
%228 = getelementptr inbounds [1024 x i32], [1024 x i32]* %0, i64 0, i64 %227
%229 = load i32, i32* %228
%230 = and i32 %229, 65535
%231 = getelementptr inbounds [64 x [16 x i32]], [64 x [16 x i32]]* %1, i64 0, i64 %151, i64 15
store i32 %230, i32* %231
%232 = add nuw nsw i64 %151, 1
%233 = icmp eq i64 %232, 64
br i1 %233, label %234, label %150
234: ; preds = %150
ret void
}