void merge(int list[], int sort[], int i, int m, int n) {
  int j, k, t;
  k = i;
  j = m + 1;
  while ((i <= m) && (j <= n)) {
    if (list[i] < list[j]) {
      sort[k++] = list[i++];
    } else {
      sort[k++] = list[j++];
    }
  }
  if (i > m) {
    for (t = j; t <= n; t++)
      sort[k + t - j] = list[t];
  } else {
    for (t = i; t <= m; t++)
      sort[k + t - i] = list[t];
  }
  return;
}


x86 assembly (clang, -O0):
<merge>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %ecx,-0x18(%rbp)
mov    %r8d,-0x1c(%rbp)
mov    -0x14(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
mov    -0x14(%rbp),%ecx
xor    %eax,%eax
cmp    -0x18(%rbp),%ecx
mov    %al,-0x29(%rbp)
jg     1142 <merge+0x42>
mov    -0x20(%rbp),%eax
cmp    -0x1c(%rbp),%eax
setle  %al
mov    %al,-0x29(%rbp)
mov    -0x29(%rbp),%al
test   $0x1,%al
jne    1152 <merge+0x52>
jmp    11cc <merge+0xcc>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x8(%rbp),%rcx
movslq -0x20(%rbp),%rdx
cmp    (%rcx,%rdx,4),%eax
jge    119d <merge+0x9d>
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x14(%rbp)
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x24(%rbp)
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
jmp    11c7 <merge+0xc7>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x20(%rbp)
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x24(%rbp)
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
jmp    1125 <merge+0x25>
mov    -0x14(%rbp),%eax
cmp    -0x18(%rbp),%eax
jle    121b <merge+0x11b>
mov    -0x20(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jg     1216 <merge+0x116>
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    -0x28(%rbp),%ecx
sub    -0x20(%rbp),%ecx
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    11de <merge+0xde>
jmp    125e <merge+0x15e>
mov    -0x14(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x18(%rbp),%eax
jg     1259 <merge+0x159>
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    -0x28(%rbp),%ecx
sub    -0x14(%rbp),%ecx
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1221 <merge+0x121>
jmp    125e <merge+0x15e>
pop    %rbp
ret

x86 assembly (clang, -O2):
<merge>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    %edx,%r11d
lea    0x1(%rcx),%r9d
cmp    %ecx,%edx
jg     116b <merge+0x6b>
cmp    %r8d,%ecx
jge    1256 <merge+0x156>
movslq %r11d,%rax
lea    (%rsi,%rax,4),%rbx
mov    %r11d,%r10d
nopl   0x0(%rax,%rax,1)
movslq %r10d,%r10
mov    (%rdi,%r10,4),%r14d
movslq %r9d,%r9
mov    (%rdi,%r9,4),%ebp
xor    %edx,%edx
xor    %eax,%eax
cmp    %ebp,%r14d
setge  %dl
setl   %al
cmovl  %r14d,%ebp
add    %eax,%r10d
add    %edx,%r9d
mov    %ebp,(%rbx)
add    $0x1,%r11d
cmp    %ecx,%r10d
jg     116e <merge+0x6e>
add    $0x4,%rbx
cmp    %r8d,%r9d
jle    1130 <merge+0x30>
jmp    116e <merge+0x6e>
mov    %r11d,%r10d
cmp    %ecx,%r10d
jle    1262 <merge+0x162>
cmp    %r8d,%r9d
jg     14dd <merge+0x3dd>
movslq %r9d,%rax
mov    %r8d,%r14d
sub    %r9d,%r14d
cmp    $0x7,%r14d
jb     1441 <merge+0x341>
lea    (%r11,%r14,1),%ecx
cmp    %r11d,%ecx
jl     1441 <merge+0x341>
lea    (%rdi,%rax,4),%rdx
movslq %r11d,%rcx
lea    (%rcx,%r14,1),%rbp
lea    (%rsi,%rbp,4),%rbp
add    $0x4,%rbp
cmp    %rbp,%rdx
jae    11d1 <merge+0xd1>
lea    (%rax,%r14,1),%rdx
lea    (%rdi,%rdx,4),%rdx
add    $0x4,%rdx
lea    (%rsi,%rcx,4),%rcx
cmp    %rdx,%rcx
jb     1441 <merge+0x341>
add    $0x1,%r14
mov    %r14,%r10
and    $0xfffffffffffffff8,%r10
lea    -0x8(%r10),%rcx
mov    %rcx,%rbp
shr    $0x3,%rbp
add    $0x1,%rbp
test   %rcx,%rcx
je     1411 <merge+0x311>
mov    %rbp,%rcx
and    $0xfffffffffffffffe,%rcx
lea    (%rdi,%rax,4),%r15
add    $0x30,%r15
lea    0x8(%r11),%r12d
mov    %r11d,%r13d
xor    %ebx,%ebx
nopl   0x0(%rax)
movups -0x30(%r15,%rbx,4),%xmm0
movups -0x20(%r15,%rbx,4),%xmm1
lea    (%rbx,%r13,1),%edx
movslq %edx,%rdx
movups %xmm0,(%rsi,%rdx,4)
movups %xmm1,0x10(%rsi,%rdx,4)
movups -0x10(%r15,%rbx,4),%xmm0
movups (%r15,%rbx,4),%xmm1
lea    (%r12,%rbx,1),%edx
movslq %edx,%rdx
movups %xmm0,(%rsi,%rdx,4)
movups %xmm1,0x10(%rsi,%rdx,4)
add    $0x10,%rbx
add    $0xfffffffffffffffe,%rcx
jne    1210 <merge+0x110>
jmp    1413 <merge+0x313>
mov    %r11d,%r10d
cmp    %ecx,%r10d
jg     1177 <merge+0x77>
movslq %r10d,%r8
mov    %ecx,%r9d
sub    %r10d,%r9d
cmp    $0x7,%r9d
jb     135e <merge+0x25e>
lea    (%r11,%r9,1),%eax
cmp    %r11d,%eax
jl     135e <merge+0x25e>
lea    (%rdi,%r8,4),%rax
movslq %r11d,%rbx
lea    (%rbx,%r9,1),%rdx
lea    (%rsi,%rdx,4),%rdx
add    $0x4,%rdx
cmp    %rdx,%rax
jae    12b3 <merge+0x1b3>
lea    (%r8,%r9,1),%rax
lea    (%rdi,%rax,4),%rax
add    $0x4,%rax
lea    (%rsi,%rbx,4),%rdx
cmp    %rax,%rdx
jb     135e <merge+0x25e>
add    $0x1,%r9
mov    %r9,%rax
and    $0xfffffffffffffff8,%rax
lea    -0x8(%rax),%rbx
mov    %rbx,%rdx
shr    $0x3,%rdx
add    $0x1,%rdx
test   %rbx,%rbx
je     1401 <merge+0x301>
mov    %rdx,%r14
and    $0xfffffffffffffffe,%r14
lea    (%rdi,%r8,4),%r15
add    $0x30,%r15
lea    0x8(%r11),%r12d
mov    %r11d,%r13d
xor    %ebx,%ebx
xchg   %ax,%ax
movups -0x30(%r15,%rbx,4),%xmm0
movups -0x20(%r15,%rbx,4),%xmm1
lea    (%rbx,%r13,1),%ebp
movslq %ebp,%rbp
movups %xmm0,(%rsi,%rbp,4)
movups %xmm1,0x10(%rsi,%rbp,4)
movups -0x10(%r15,%rbx,4),%xmm0
movups (%r15,%rbx,4),%xmm1
lea    (%r12,%rbx,1),%ebp
movslq %ebp,%rbp
movups %xmm0,(%rsi,%rbp,4)
movups %xmm1,0x10(%rsi,%rbp,4)
add    $0x10,%rbx
add    $0xfffffffffffffffe,%r14
jne    12f0 <merge+0x1f0>
test   $0x1,%dl
je     1352 <merge+0x252>
lea    (%rbx,%r8,1),%rdx
movups (%rdi,%rdx,4),%xmm0
movups 0x10(%rdi,%rdx,4),%xmm1
add    %r11d,%ebx
movslq %ebx,%rdx
movups %xmm0,(%rsi,%rdx,4)
movups %xmm1,0x10(%rsi,%rdx,4)
cmp    %rax,%r9
je     14dd <merge+0x3dd>
add    %rax,%r8
mov    %ecx,%r9d
sub    %r8d,%r9d
lea    0x1(%r9),%ebx
and    $0x3,%ebx
je     1397 <merge+0x297>
mov    %r11d,%eax
sub    %r10d,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    (%rdi,%r8,4),%edx
lea    (%rax,%r8,1),%ebp
movslq %ebp,%rbp
mov    %edx,(%rsi,%rbp,4)
add    $0x1,%r8
add    $0xffffffff,%ebx
jne    1380 <merge+0x280>
cmp    $0x3,%r9d
jb     14dd <merge+0x3dd>
sub    %r8d,%ecx
add    $0x1,%ecx
add    %r8d,%r11d
sub    %r10d,%r11d
lea    (%rdi,%r8,4),%rax
add    $0xc,%rax
xor    %edi,%edi
nopw   0x0(%rax,%rax,1)
mov    -0xc(%rax,%rdi,4),%edx
lea    (%r11,%rdi,1),%rbp
movslq %ebp,%rbp
mov    %edx,(%rsi,%rbp,4)
mov    -0x8(%rax,%rdi,4),%edx
lea    0x1(%rbp),%ebx
movslq %ebx,%rbx
mov    %edx,(%rsi,%rbx,4)
mov    -0x4(%rax,%rdi,4),%edx
lea    0x2(%rbp),%ebx
movslq %ebx,%rbx
mov    %edx,(%rsi,%rbx,4)
mov    (%rax,%rdi,4),%edx
add    $0x3,%ebp
movslq %ebp,%rbp
mov    %edx,(%rsi,%rbp,4)
add    $0x4,%rdi
cmp    %edi,%ecx
jne    13c0 <merge+0x2c0>
jmp    14dd <merge+0x3dd>
xor    %ebx,%ebx
test   $0x1,%dl
jne    1336 <merge+0x236>
jmp    1352 <merge+0x252>
xor    %ebx,%ebx
test   $0x1,%bpl
je     1435 <merge+0x335>
lea    (%rbx,%rax,1),%rcx
movups (%rdi,%rcx,4),%xmm0
movups 0x10(%rdi,%rcx,4),%xmm1
add    %r11d,%ebx
movslq %ebx,%rcx
movups %xmm0,(%rsi,%rcx,4)
movups %xmm1,0x10(%rsi,%rcx,4)
cmp    %r10,%r14
je     14dd <merge+0x3dd>
add    %r10,%rax
mov    %r8d,%r10d
sub    %eax,%r10d
lea    0x1(%r10),%ebx
and    $0x3,%ebx
je     1475 <merge+0x375>
mov    %r11d,%ecx
sub    %r9d,%ecx
cs nopw 0x0(%rax,%rax,1)
mov    (%rdi,%rax,4),%ebp
lea    (%rcx,%rax,1),%edx
movslq %edx,%rdx
mov    %ebp,(%rsi,%rdx,4)
add    $0x1,%rax
add    $0xffffffff,%ebx
jne    1460 <merge+0x360>
cmp    $0x3,%r10d
jb     14dd <merge+0x3dd>
sub    %eax,%r8d
add    $0x1,%r8d
add    %eax,%r11d
sub    %r9d,%r11d
lea    (%rdi,%rax,4),%rax
add    $0xc,%rax
xor    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    -0xc(%rax,%rcx,4),%edx
lea    (%r11,%rcx,1),%rdi
movslq %edi,%rdi
mov    %edx,(%rsi,%rdi,4)
mov    -0x8(%rax,%rcx,4),%edx
lea    0x1(%rdi),%ebp
movslq %ebp,%rbp
mov    %edx,(%rsi,%rbp,4)
mov    -0x4(%rax,%rcx,4),%edx
lea    0x2(%rdi),%ebp
movslq %ebp,%rbp
mov    %edx,(%rsi,%rbp,4)
mov    (%rax,%rcx,4),%edx
add    $0x3,%edi
movslq %edi,%rdi
mov    %edx,(%rsi,%rdi,4)
add    $0x4,%rcx
cmp    %ecx,%r8d
jne    14a0 <merge+0x3a0>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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