void recvac(unsigned char *s, unsigned char *d, int lx, int lx2, int h) {
  unsigned char *dp, *sp, *sp2;
  int j;
  sp = s;
  sp2 = s + lx;
  dp = d;
  for (j = 0; j < h; j++) {
    dp[0] = (dp[0] + ((unsigned int)(sp[0] + sp2[0] + 1) >> 1) + 1) >> 1;
    dp[1] = (dp[1] + ((unsigned int)(sp[1] + sp2[1] + 1) >> 1) + 1) >> 1;
    dp[2] = (dp[2] + ((unsigned int)(sp[2] + sp2[2] + 1) >> 1) + 1) >> 1;
    dp[3] = (dp[3] + ((unsigned int)(sp[3] + sp2[3] + 1) >> 1) + 1) >> 1;
    dp[4] = (dp[4] + ((unsigned int)(sp[4] + sp2[4] + 1) >> 1) + 1) >> 1;
    dp[5] = (dp[5] + ((unsigned int)(sp[5] + sp2[5] + 1) >> 1) + 1) >> 1;
    dp[6] = (dp[6] + ((unsigned int)(sp[6] + sp2[6] + 1) >> 1) + 1) >> 1;
    dp[7] = (dp[7] + ((unsigned int)(sp[7] + sp2[7] + 1) >> 1) + 1) >> 1;
    sp += lx2;
    sp2 += lx2;
    dp += lx2;
  }
}


x86 assembly (clang, -O0):
<recvac>:
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    -0x8(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
add    %rcx,%rax
mov    %rax,-0x38(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x28(%rbp)
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    130d <recvac+0x20d>
mov    -0x28(%rbp),%rax
movzbl (%rax),%eax
mov    -0x30(%rbp),%rcx
movzbl (%rcx),%ecx
mov    -0x38(%rbp),%rdx
movzbl (%rdx),%edx
add    %edx,%ecx
add    $0x1,%ecx
shr    $0x1,%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x28(%rbp),%rax
mov    %cl,(%rax)
mov    -0x28(%rbp),%rax
movzbl 0x1(%rax),%eax
mov    -0x30(%rbp),%rcx
movzbl 0x1(%rcx),%ecx
mov    -0x38(%rbp),%rdx
movzbl 0x1(%rdx),%edx
add    %edx,%ecx
add    $0x1,%ecx
shr    $0x1,%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x28(%rbp),%rax
mov    %cl,0x1(%rax)
mov    -0x28(%rbp),%rax
movzbl 0x2(%rax),%eax
mov    -0x30(%rbp),%rcx
movzbl 0x2(%rcx),%ecx
mov    -0x38(%rbp),%rdx
movzbl 0x2(%rdx),%edx
add    %edx,%ecx
add    $0x1,%ecx
shr    $0x1,%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x28(%rbp),%rax
mov    %cl,0x2(%rax)
mov    -0x28(%rbp),%rax
movzbl 0x3(%rax),%eax
mov    -0x30(%rbp),%rcx
movzbl 0x3(%rcx),%ecx
mov    -0x38(%rbp),%rdx
movzbl 0x3(%rdx),%edx
add    %edx,%ecx
add    $0x1,%ecx
shr    $0x1,%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x28(%rbp),%rax
mov    %cl,0x3(%rax)
mov    -0x28(%rbp),%rax
movzbl 0x4(%rax),%eax
mov    -0x30(%rbp),%rcx
movzbl 0x4(%rcx),%ecx
mov    -0x38(%rbp),%rdx
movzbl 0x4(%rdx),%edx
add    %edx,%ecx
add    $0x1,%ecx
shr    $0x1,%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x28(%rbp),%rax
mov    %cl,0x4(%rax)
mov    -0x28(%rbp),%rax
movzbl 0x5(%rax),%eax
mov    -0x30(%rbp),%rcx
movzbl 0x5(%rcx),%ecx
mov    -0x38(%rbp),%rdx
movzbl 0x5(%rdx),%edx
add    %edx,%ecx
add    $0x1,%ecx
shr    $0x1,%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x28(%rbp),%rax
mov    %cl,0x5(%rax)
mov    -0x28(%rbp),%rax
movzbl 0x6(%rax),%eax
mov    -0x30(%rbp),%rcx
movzbl 0x6(%rcx),%ecx
mov    -0x38(%rbp),%rdx
movzbl 0x6(%rdx),%edx
add    %edx,%ecx
add    $0x1,%ecx
shr    $0x1,%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x28(%rbp),%rax
mov    %cl,0x6(%rax)
mov    -0x28(%rbp),%rax
movzbl 0x7(%rax),%eax
mov    -0x30(%rbp),%rcx
movzbl 0x7(%rcx),%ecx
mov    -0x38(%rbp),%rdx
movzbl 0x7(%rdx),%edx
add    %edx,%ecx
add    $0x1,%ecx
shr    $0x1,%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x28(%rbp),%rax
mov    %cl,0x7(%rax)
mov    -0x18(%rbp),%ecx
mov    -0x30(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x30(%rbp)
mov    -0x18(%rbp),%ecx
mov    -0x38(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x38(%rbp)
mov    -0x18(%rbp),%ecx
mov    -0x28(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x28(%rbp)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    113c <recvac+0x3c>
pop    %rbp
ret

x86 assembly (clang, -O2):
<recvac>:
push   %rbx
test   %r8d,%r8d
jle    1389 <recvac+0x289>
movslq %edx,%r10
add    %rdi,%r10
movslq %ecx,%r9
cmp    $0x1,%r9d
jne    1258 <recvac+0x158>
mov    0x6(%rsi),%cl
mov    $0x7,%edx
cs nopw 0x0(%rax,%rax,1)
nop
movzbl -0x7(%rsi,%rdx,1),%r11d
movzbl -0x7(%rdi,%rdx,1),%eax
movzbl -0x7(%r10,%rdx,1),%ebx
add    %ebx,%eax
add    $0x1,%eax
shr    %eax
add    %r11d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x7(%rsi,%rdx,1)
movzbl -0x6(%rsi,%rdx,1),%r11d
movzbl -0x6(%rdi,%rdx,1),%ebx
movzbl -0x6(%r10,%rdx,1),%eax
add    %ebx,%eax
add    $0x1,%eax
shr    %eax
add    %r11d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x6(%rsi,%rdx,1)
movzbl -0x5(%rsi,%rdx,1),%r11d
movzbl -0x5(%rdi,%rdx,1),%ebx
movzbl -0x5(%r10,%rdx,1),%eax
add    %ebx,%eax
add    $0x1,%eax
shr    %eax
add    %r11d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x5(%rsi,%rdx,1)
movzbl -0x4(%rsi,%rdx,1),%r11d
movzbl -0x4(%rdi,%rdx,1),%ebx
movzbl -0x4(%r10,%rdx,1),%eax
add    %ebx,%eax
add    $0x1,%eax
shr    %eax
add    %r11d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x4(%rsi,%rdx,1)
movzbl -0x3(%rsi,%rdx,1),%r11d
movzbl -0x3(%rdi,%rdx,1),%ebx
movzbl -0x3(%r10,%rdx,1),%eax
add    %ebx,%eax
add    $0x1,%eax
shr    %eax
add    %r11d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x3(%rsi,%rdx,1)
movzbl -0x2(%rsi,%rdx,1),%r11d
movzbl -0x2(%rdi,%rdx,1),%ebx
movzbl -0x2(%r10,%rdx,1),%eax
add    %ebx,%eax
add    $0x1,%eax
shr    %eax
add    %r11d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x2(%rsi,%rdx,1)
movzbl %cl,%eax
movzbl -0x1(%rdi,%rdx,1),%ecx
movzbl -0x1(%r10,%rdx,1),%ebx
add    %ebx,%ecx
add    $0x1,%ecx
shr    %ecx
add    %ecx,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x1(%rsi,%rdx,1)
movzbl (%rsi,%rdx,1),%eax
movzbl (%rdi,%rdx,1),%ecx
movzbl (%r10,%rdx,1),%ebx
add    %ebx,%ecx
add    $0x1,%ecx
shr    %ecx
add    %eax,%ecx
add    $0x1,%ecx
shr    %ecx
mov    %cl,(%rsi,%rdx,1)
add    %r9,%rdx
add    $0xffffffff,%r8d
jne    1130 <recvac+0x30>
jmp    1389 <recvac+0x289>
mov    $0x7,%edx
nopl   (%rax)
movzbl -0x7(%rsi,%rdx,1),%r11d
movzbl -0x7(%rdi,%rdx,1),%eax
movzbl -0x7(%r10,%rdx,1),%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    %eax
add    %r11d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x7(%rsi,%rdx,1)
movzbl -0x6(%rsi,%rdx,1),%r11d
movzbl -0x6(%rdi,%rdx,1),%ecx
movzbl -0x6(%r10,%rdx,1),%eax
add    %ecx,%eax
add    $0x1,%eax
shr    %eax
add    %r11d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x6(%rsi,%rdx,1)
movzbl -0x5(%rsi,%rdx,1),%r11d
movzbl -0x5(%rdi,%rdx,1),%ecx
movzbl -0x5(%r10,%rdx,1),%eax
add    %ecx,%eax
add    $0x1,%eax
shr    %eax
add    %r11d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x5(%rsi,%rdx,1)
movzbl -0x4(%rsi,%rdx,1),%r11d
movzbl -0x4(%rdi,%rdx,1),%ecx
movzbl -0x4(%r10,%rdx,1),%eax
add    %ecx,%eax
add    $0x1,%eax
shr    %eax
add    %r11d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x4(%rsi,%rdx,1)
movzbl -0x3(%rsi,%rdx,1),%r11d
movzbl -0x3(%rdi,%rdx,1),%ecx
movzbl -0x3(%r10,%rdx,1),%eax
add    %ecx,%eax
add    $0x1,%eax
shr    %eax
add    %r11d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x3(%rsi,%rdx,1)
movzbl -0x2(%rsi,%rdx,1),%r11d
movzbl -0x2(%rdi,%rdx,1),%ecx
movzbl -0x2(%r10,%rdx,1),%eax
add    %ecx,%eax
add    $0x1,%eax
shr    %eax
add    %r11d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x2(%rsi,%rdx,1)
movzbl -0x1(%rsi,%rdx,1),%r11d
movzbl -0x1(%rdi,%rdx,1),%ecx
movzbl -0x1(%r10,%rdx,1),%eax
add    %ecx,%eax
add    $0x1,%eax
shr    %eax
add    %r11d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x1(%rsi,%rdx,1)
movzbl (%rsi,%rdx,1),%r11d
movzbl (%rdi,%rdx,1),%ecx
movzbl (%r10,%rdx,1),%eax
add    %ecx,%eax
add    $0x1,%eax
shr    %eax
add    %r11d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,(%rsi,%rdx,1)
add    %r9,%rdx
add    $0xffffffff,%r8d
jne    1260 <recvac+0x160>
pop    %rbx
ret

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

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