void next_generation(int *next, int *current, int length) {
  int i;
  *next = 0;
  *(next + length - 1) = 0;
  for (i = 1; i < length - 1; i++) {
    if (*(current + i - 1) == *(current + i + 1)) {
      *(next + i) = 0;
    } else {
      *(next + i) = 1;
    }
  }
  for (i = 0; i < length; i++) {
    *(current + i) = *(next + i);
  }
}


x86 assembly (clang, -O0):
<next_generation>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    -0x8(%rbp),%rax
movl   $0x0,(%rax)
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movl   $0x0,-0x4(%rax,%rcx,4)
movl   $0x1,-0x18(%rbp)
mov    -0x18(%rbp),%eax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    1195 <next_generation+0x95>
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    -0x4(%rax,%rcx,4),%eax
mov    -0x10(%rbp),%rcx
movslq -0x18(%rbp),%rdx
cmp    0x4(%rcx,%rdx,4),%eax
jne    1173 <next_generation+0x73>
mov    -0x8(%rbp),%rax
movslq -0x18(%rbp),%rcx
movl   $0x0,(%rax,%rcx,4)
jmp    1182 <next_generation+0x82>
mov    -0x8(%rbp),%rax
movslq -0x18(%rbp),%rcx
movl   $0x1,(%rax,%rcx,4)
jmp    1187 <next_generation+0x87>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1130 <next_generation+0x30>
movl   $0x0,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    11cc <next_generation+0xcc>
mov    -0x8(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    119c <next_generation+0x9c>
pop    %rbp
ret

x86 assembly (clang, -O2):
<next_generation>:
push   %rbx
movl   $0x0,(%rdi)
movslq %edx,%rax
movl   $0x0,-0x4(%rdi,%rax,4)
cmp    $0x3,%eax
jl     12a9 <next_generation+0x1a9>
lea    -0x1(%rdx),%r9d
lea    -0x1(%r9),%r8
mov    $0x1,%ebx
cmp    $0x8,%r8
jb     1253 <next_generation+0x153>
lea    0x4(%rdi),%r10
lea    (%rsi,%r9,4),%rax
add    $0x4,%rax
cmp    %rax,%r10
jae    1150 <next_generation+0x50>
lea    (%rdi,%r9,4),%rax
cmp    %rsi,%rax
ja     1253 <next_generation+0x153>
mov    %r8,%rbx
and    $0xfffffffffffffff8,%rbx
lea    -0x8(%rbx),%rax
mov    %rax,%r10
shr    $0x3,%r10
add    $0x1,%r10
test   %rax,%rax
je     140c <next_generation+0x30c>
movabs $0x3ffffffffffffffc,%r11
ff ff 3f
or     $0x2,%r11
and    %r10,%r11
xor    %eax,%eax
movdqa 0xe76(%rip),%xmm0
nopw   0x0(%rax,%rax,1)
movdqu (%rsi,%rax,4),%xmm1
movdqu 0x8(%rsi,%rax,4),%xmm2
pcmpeqd %xmm1,%xmm2
movdqu 0x10(%rsi,%rax,4),%xmm1
movdqu 0x18(%rsi,%rax,4),%xmm3
pcmpeqd %xmm1,%xmm3
pandn  %xmm0,%xmm2
pandn  %xmm0,%xmm3
movdqu %xmm2,0x4(%rdi,%rax,4)
movdqu %xmm3,0x14(%rdi,%rax,4)
movdqu 0x20(%rsi,%rax,4),%xmm1
movdqu 0x28(%rsi,%rax,4),%xmm2
pcmpeqd %xmm1,%xmm2
movdqu 0x30(%rsi,%rax,4),%xmm1
movdqu 0x38(%rsi,%rax,4),%xmm3
pcmpeqd %xmm1,%xmm3
pandn  %xmm0,%xmm2
pandn  %xmm0,%xmm3
movdqu %xmm2,0x24(%rdi,%rax,4)
movdqu %xmm3,0x34(%rdi,%rax,4)
add    $0x10,%rax
add    $0xfffffffffffffffe,%r11
jne    1190 <next_generation+0x90>
test   $0x1,%r10b
je     124a <next_generation+0x14a>
shl    $0x2,%rax
or     $0x4,%rax
movdqu -0x4(%rsi,%rax,1),%xmm0
movdqu 0x4(%rsi,%rax,1),%xmm1
pcmpeqd %xmm0,%xmm1
movdqu 0xc(%rsi,%rax,1),%xmm0
movdqu 0x14(%rsi,%rax,1),%xmm2
pcmpeqd %xmm0,%xmm2
movdqa 0xdc9(%rip),%xmm0
pandn  %xmm0,%xmm1
pandn  %xmm0,%xmm2
movdqu %xmm1,(%rdi,%rax,1)
movdqu %xmm2,0x10(%rdi,%rax,1)
cmp    %rbx,%r8
je     12a9 <next_generation+0x1a9>
or     $0x1,%rbx
mov    %rbx,%rax
not    %rax
test   $0x1,%r9b
jne    1278 <next_generation+0x178>
mov    -0x4(%rsi,%rbx,4),%r8d
xor    %r10d,%r10d
cmp    0x4(%rsi,%rbx,4),%r8d
setne  %r10b
mov    %r10d,(%rdi,%rbx,4)
add    $0x1,%rbx
add    %r9,%rax
je     12a9 <next_generation+0x1a9>
nopl   (%rax)
mov    -0x4(%rsi,%rbx,4),%eax
xor    %ecx,%ecx
cmp    0x4(%rsi,%rbx,4),%eax
setne  %cl
mov    %ecx,(%rdi,%rbx,4)
mov    (%rsi,%rbx,4),%eax
xor    %ecx,%ecx
cmp    0x8(%rsi,%rbx,4),%eax
setne  %cl
mov    %ecx,0x4(%rdi,%rbx,4)
add    $0x2,%rbx
cmp    %rbx,%r9
jne    1280 <next_generation+0x180>
test   %edx,%edx
jle    140a <next_generation+0x30a>
mov    %edx,%r9d
cmp    $0x8,%edx
jb     12cb <next_generation+0x1cb>
lea    (%rdi,%r9,4),%rax
cmp    %rsi,%rax
jbe    132c <next_generation+0x22c>
lea    (%rsi,%r9,4),%rax
cmp    %rdi,%rax
jbe    132c <next_generation+0x22c>
xor    %ecx,%ecx
mov    %rcx,%r8
not    %r8
add    %r9,%r8
mov    %r9,%rdx
and    $0x3,%rdx
je     12f0 <next_generation+0x1f0>
nop
mov    (%rdi,%rcx,4),%eax
mov    %eax,(%rsi,%rcx,4)
add    $0x1,%rcx
add    $0xffffffffffffffff,%rdx
jne    12e0 <next_generation+0x1e0>
cmp    $0x3,%r8
jb     140a <next_generation+0x30a>
nopw   0x0(%rax,%rax,1)
mov    (%rdi,%rcx,4),%eax
mov    %eax,(%rsi,%rcx,4)
mov    0x4(%rdi,%rcx,4),%eax
mov    %eax,0x4(%rsi,%rcx,4)
mov    0x8(%rdi,%rcx,4),%eax
mov    %eax,0x8(%rsi,%rcx,4)
mov    0xc(%rdi,%rcx,4),%eax
mov    %eax,0xc(%rsi,%rcx,4)
add    $0x4,%rcx
cmp    %rcx,%r9
jne    1300 <next_generation+0x200>
jmp    140a <next_generation+0x30a>
mov    %r9d,%ecx
and    $0xfffffff8,%ecx
lea    -0x8(%rcx),%rax
mov    %rax,%rdx
shr    $0x3,%rdx
add    $0x1,%rdx
mov    %edx,%r8d
and    $0x3,%r8d
cmp    $0x18,%rax
jae    1352 <next_generation+0x252>
xor    %eax,%eax
jmp    13bc <next_generation+0x2bc>
and    $0xfffffffffffffffc,%rdx
xor    %eax,%eax
nopl   0x0(%rax,%rax,1)
movups (%rdi,%rax,4),%xmm0
movups 0x10(%rdi,%rax,4),%xmm1
movups %xmm0,(%rsi,%rax,4)
movups %xmm1,0x10(%rsi,%rax,4)
movups 0x20(%rdi,%rax,4),%xmm0
movups 0x30(%rdi,%rax,4),%xmm1
movups %xmm0,0x20(%rsi,%rax,4)
movups %xmm1,0x30(%rsi,%rax,4)
movups 0x40(%rdi,%rax,4),%xmm0
movups 0x50(%rdi,%rax,4),%xmm1
movups %xmm0,0x40(%rsi,%rax,4)
movups %xmm1,0x50(%rsi,%rax,4)
movdqu 0x60(%rdi,%rax,4),%xmm0
movdqu 0x70(%rdi,%rax,4),%xmm1
movdqu %xmm0,0x60(%rsi,%rax,4)
movdqu %xmm1,0x70(%rsi,%rax,4)
add    $0x20,%rax
add    $0xfffffffffffffffc,%rdx
jne    1360 <next_generation+0x260>
test   %r8,%r8
je     1401 <next_generation+0x301>
lea    (%rsi,%rax,4),%r10
add    $0x10,%r10
lea    (%rdi,%rax,4),%rax
add    $0x10,%rax
shl    $0x5,%r8
xor    %edx,%edx
nopw   0x0(%rax,%rax,1)
movdqu -0x10(%rax,%rdx,1),%xmm0
movdqu (%rax,%rdx,1),%xmm1
movdqu %xmm0,-0x10(%r10,%rdx,1)
movdqu %xmm1,(%r10,%rdx,1)
add    $0x20,%rdx
cmp    %rdx,%r8
jne    13e0 <next_generation+0x2e0>
cmp    %r9,%rcx
jne    12cd <next_generation+0x1cd>
pop    %rbx
ret
xor    %eax,%eax
test   $0x1,%r10b
jne    1207 <next_generation+0x107>
jmp    124a <next_generation+0x14a>

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

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