void reca(unsigned char *s, unsigned char *d, int lx2, int h) {
  int j;
  for (j = 0; j < h; j++, s += lx2, d += lx2) {
    d[0] = (unsigned int)(d[0] + s[0] + 1) >> 1;
    d[1] = (unsigned int)(d[1] + s[1] + 1) >> 1;
    d[2] = (unsigned int)(d[2] + s[2] + 1) >> 1;
    d[3] = (unsigned int)(d[3] + s[3] + 1) >> 1;
    d[4] = (unsigned int)(d[4] + s[4] + 1) >> 1;
    d[5] = (unsigned int)(d[5] + s[5] + 1) >> 1;
    d[6] = (unsigned int)(d[6] + s[6] + 1) >> 1;
    d[7] = (unsigned int)(d[7] + s[7] + 1) >> 1;
    d[8] = (unsigned int)(d[8] + s[8] + 1) >> 1;
    d[9] = (unsigned int)(d[9] + s[9] + 1) >> 1;
    d[10] = (unsigned int)(d[10] + s[10] + 1) >> 1;
    d[11] = (unsigned int)(d[11] + s[11] + 1) >> 1;
    d[12] = (unsigned int)(d[12] + s[12] + 1) >> 1;
    d[13] = (unsigned int)(d[13] + s[13] + 1) >> 1;
    d[14] = (unsigned int)(d[14] + s[14] + 1) >> 1;
    d[15] = (unsigned int)(d[15] + s[15] + 1) >> 1;
  }
}


x86 assembly (clang, -O0):
<reca>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %ecx,-0x18(%rbp)
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    1362 <reca+0x262>
mov    -0x10(%rbp),%rax
movzbl (%rax),%eax
mov    -0x8(%rbp),%rcx
movzbl (%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,(%rax)
mov    -0x10(%rbp),%rax
movzbl 0x1(%rax),%eax
mov    -0x8(%rbp),%rcx
movzbl 0x1(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,0x1(%rax)
mov    -0x10(%rbp),%rax
movzbl 0x2(%rax),%eax
mov    -0x8(%rbp),%rcx
movzbl 0x2(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,0x2(%rax)
mov    -0x10(%rbp),%rax
movzbl 0x3(%rax),%eax
mov    -0x8(%rbp),%rcx
movzbl 0x3(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,0x3(%rax)
mov    -0x10(%rbp),%rax
movzbl 0x4(%rax),%eax
mov    -0x8(%rbp),%rcx
movzbl 0x4(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,0x4(%rax)
mov    -0x10(%rbp),%rax
movzbl 0x5(%rax),%eax
mov    -0x8(%rbp),%rcx
movzbl 0x5(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,0x5(%rax)
mov    -0x10(%rbp),%rax
movzbl 0x6(%rax),%eax
mov    -0x8(%rbp),%rcx
movzbl 0x6(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,0x6(%rax)
mov    -0x10(%rbp),%rax
movzbl 0x7(%rax),%eax
mov    -0x8(%rbp),%rcx
movzbl 0x7(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,0x7(%rax)
mov    -0x10(%rbp),%rax
movzbl 0x8(%rax),%eax
mov    -0x8(%rbp),%rcx
movzbl 0x8(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,0x8(%rax)
mov    -0x10(%rbp),%rax
movzbl 0x9(%rax),%eax
mov    -0x8(%rbp),%rcx
movzbl 0x9(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,0x9(%rax)
mov    -0x10(%rbp),%rax
movzbl 0xa(%rax),%eax
mov    -0x8(%rbp),%rcx
movzbl 0xa(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,0xa(%rax)
mov    -0x10(%rbp),%rax
movzbl 0xb(%rax),%eax
mov    -0x8(%rbp),%rcx
movzbl 0xb(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,0xb(%rax)
mov    -0x10(%rbp),%rax
movzbl 0xc(%rax),%eax
mov    -0x8(%rbp),%rcx
movzbl 0xc(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,0xc(%rax)
mov    -0x10(%rbp),%rax
movzbl 0xd(%rax),%eax
mov    -0x8(%rbp),%rcx
movzbl 0xd(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,0xd(%rax)
mov    -0x10(%rbp),%rax
movzbl 0xe(%rax),%eax
mov    -0x8(%rbp),%rcx
movzbl 0xe(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,0xe(%rax)
mov    -0x10(%rbp),%rax
movzbl 0xf(%rax),%eax
mov    -0x8(%rbp),%rcx
movzbl 0xf(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,0xf(%rax)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x8(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x8(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x10(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x10(%rbp)
jmp    1119 <reca+0x19>
pop    %rbp
ret

x86 assembly (clang, -O2):
<reca>:
test   %ecx,%ecx
jle    1289 <reca+0x189>
movslq %edx,%r8
mov    $0xf,%edx
movzbl -0xf(%rsi,%rdx,1),%r9d
movzbl -0xf(%rdi,%rdx,1),%eax
add    %r9d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0xf(%rsi,%rdx,1)
movzbl -0xe(%rsi,%rdx,1),%r9d
movzbl -0xe(%rdi,%rdx,1),%eax
add    %r9d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0xe(%rsi,%rdx,1)
movzbl -0xd(%rsi,%rdx,1),%r9d
movzbl -0xd(%rdi,%rdx,1),%eax
add    %r9d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0xd(%rsi,%rdx,1)
movzbl -0xc(%rsi,%rdx,1),%r9d
movzbl -0xc(%rdi,%rdx,1),%eax
add    %r9d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0xc(%rsi,%rdx,1)
movzbl -0xb(%rsi,%rdx,1),%r9d
movzbl -0xb(%rdi,%rdx,1),%eax
add    %r9d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0xb(%rsi,%rdx,1)
movzbl -0xa(%rsi,%rdx,1),%r9d
movzbl -0xa(%rdi,%rdx,1),%eax
add    %r9d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0xa(%rsi,%rdx,1)
movzbl -0x9(%rsi,%rdx,1),%r9d
movzbl -0x9(%rdi,%rdx,1),%eax
add    %r9d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x9(%rsi,%rdx,1)
movzbl -0x8(%rsi,%rdx,1),%r9d
movzbl -0x8(%rdi,%rdx,1),%eax
add    %r9d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x8(%rsi,%rdx,1)
movzbl -0x7(%rsi,%rdx,1),%r9d
movzbl -0x7(%rdi,%rdx,1),%eax
add    %r9d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x7(%rsi,%rdx,1)
movzbl -0x6(%rsi,%rdx,1),%r9d
movzbl -0x6(%rdi,%rdx,1),%eax
add    %r9d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x6(%rsi,%rdx,1)
movzbl -0x5(%rsi,%rdx,1),%r9d
movzbl -0x5(%rdi,%rdx,1),%eax
add    %r9d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x5(%rsi,%rdx,1)
movzbl -0x4(%rsi,%rdx,1),%r9d
movzbl -0x4(%rdi,%rdx,1),%eax
add    %r9d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x4(%rsi,%rdx,1)
movzbl -0x3(%rsi,%rdx,1),%r9d
movzbl -0x3(%rdi,%rdx,1),%eax
add    %r9d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x3(%rsi,%rdx,1)
movzbl -0x2(%rsi,%rdx,1),%r9d
movzbl -0x2(%rdi,%rdx,1),%eax
add    %r9d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x2(%rsi,%rdx,1)
movzbl -0x1(%rsi,%rdx,1),%r9d
movzbl -0x1(%rdi,%rdx,1),%eax
add    %r9d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x1(%rsi,%rdx,1)
movzbl (%rsi,%rdx,1),%r9d
movzbl (%rdi,%rdx,1),%eax
add    %r9d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,(%rsi,%rdx,1)
add    %r8,%rdx
add    $0xffffffff,%ecx
jne    1110 <reca+0x10>
ret

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

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