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


x86 assembly (clang, -O0):
<rechac>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %ecx,-0x18(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x20(%rbp)
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    12e2 <rechac+0x1e2>
mov    -0x28(%rbp),%rax
movzbl (%rax),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
mov    -0x2c(%rbp),%ecx
mov    -0x28(%rbp),%rdx
movzbl 0x1(%rdx),%edx
mov    %edx,-0x30(%rbp)
add    %edx,%ecx
add    $0x1,%ecx
shr    $0x1,%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x20(%rbp),%rax
mov    %cl,(%rax)
mov    -0x20(%rbp),%rax
movzbl 0x1(%rax),%eax
mov    -0x30(%rbp),%ecx
mov    -0x28(%rbp),%rdx
movzbl 0x2(%rdx),%edx
mov    %edx,-0x2c(%rbp)
add    %edx,%ecx
add    $0x1,%ecx
shr    $0x1,%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x20(%rbp),%rax
mov    %cl,0x1(%rax)
mov    -0x20(%rbp),%rax
movzbl 0x2(%rax),%eax
mov    -0x2c(%rbp),%ecx
mov    -0x28(%rbp),%rdx
movzbl 0x3(%rdx),%edx
mov    %edx,-0x30(%rbp)
add    %edx,%ecx
add    $0x1,%ecx
shr    $0x1,%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x20(%rbp),%rax
mov    %cl,0x2(%rax)
mov    -0x20(%rbp),%rax
movzbl 0x3(%rax),%eax
mov    -0x30(%rbp),%ecx
mov    -0x28(%rbp),%rdx
movzbl 0x4(%rdx),%edx
mov    %edx,-0x2c(%rbp)
add    %edx,%ecx
add    $0x1,%ecx
shr    $0x1,%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x20(%rbp),%rax
mov    %cl,0x3(%rax)
mov    -0x20(%rbp),%rax
movzbl 0x4(%rax),%eax
mov    -0x2c(%rbp),%ecx
mov    -0x28(%rbp),%rdx
movzbl 0x5(%rdx),%edx
mov    %edx,-0x30(%rbp)
add    %edx,%ecx
add    $0x1,%ecx
shr    $0x1,%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x20(%rbp),%rax
mov    %cl,0x4(%rax)
mov    -0x20(%rbp),%rax
movzbl 0x5(%rax),%eax
mov    -0x30(%rbp),%ecx
mov    -0x28(%rbp),%rdx
movzbl 0x6(%rdx),%edx
mov    %edx,-0x2c(%rbp)
add    %edx,%ecx
add    $0x1,%ecx
shr    $0x1,%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x20(%rbp),%rax
mov    %cl,0x5(%rax)
mov    -0x20(%rbp),%rax
movzbl 0x6(%rax),%eax
mov    -0x2c(%rbp),%ecx
mov    -0x28(%rbp),%rdx
movzbl 0x7(%rdx),%edx
mov    %edx,-0x30(%rbp)
add    %edx,%ecx
add    $0x1,%ecx
shr    $0x1,%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x20(%rbp),%rax
mov    %cl,0x6(%rax)
mov    -0x20(%rbp),%rax
movzbl 0x7(%rax),%eax
mov    -0x30(%rbp),%ecx
mov    -0x28(%rbp),%rdx
movzbl 0x8(%rdx),%edx
add    %edx,%ecx
add    $0x1,%ecx
shr    $0x1,%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x20(%rbp),%rax
mov    %cl,0x7(%rax)
mov    -0x14(%rbp),%ecx
mov    -0x28(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x28(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x20(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x20(%rbp)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1129 <rechac+0x29>
pop    %rbp
ret

x86 assembly (clang, -O2):
<rechac>:
push   %rbx
test   %ecx,%ecx
jle    1355 <rechac+0x255>
movslq %edx,%r8
cmp    $0x1,%r8d
jne    1237 <rechac+0x137>
mov    0x6(%rsi),%bl
mov    $0x7,%edx
xchg   %ax,%ax
movzbl -0x7(%rdi,%rdx,1),%r9d
movzbl -0x7(%rsi,%rdx,1),%r10d
movzbl -0x6(%rdi,%rdx,1),%r11d
lea    (%r11,%r9,1),%eax
add    $0x1,%eax
shr    %eax
add    %r10d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x7(%rsi,%rdx,1)
movzbl -0x6(%rsi,%rdx,1),%r9d
movzbl -0x5(%rdi,%rdx,1),%r10d
lea    (%r11,%r10,1),%eax
add    $0x1,%eax
shr    %eax
add    %r9d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x6(%rsi,%rdx,1)
movzbl -0x5(%rsi,%rdx,1),%r9d
movzbl -0x4(%rdi,%rdx,1),%r11d
lea    (%r10,%r11,1),%eax
add    $0x1,%eax
shr    %eax
add    %r9d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x5(%rsi,%rdx,1)
movzbl -0x4(%rsi,%rdx,1),%r9d
movzbl -0x3(%rdi,%rdx,1),%r10d
lea    (%r11,%r10,1),%eax
add    $0x1,%eax
shr    %eax
add    %r9d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x4(%rsi,%rdx,1)
movzbl -0x3(%rsi,%rdx,1),%r9d
movzbl -0x2(%rdi,%rdx,1),%r11d
lea    (%r10,%r11,1),%eax
add    $0x1,%eax
shr    %eax
add    %r9d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x3(%rsi,%rdx,1)
movzbl -0x2(%rsi,%rdx,1),%r9d
movzbl -0x1(%rdi,%rdx,1),%r10d
lea    (%r11,%r10,1),%eax
add    $0x1,%eax
shr    %eax
add    %r9d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x2(%rsi,%rdx,1)
movzbl %bl,%r9d
movzbl (%rdi,%rdx,1),%ebx
lea    (%r10,%rbx,1),%eax
add    $0x1,%eax
shr    %eax
add    %r9d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x1(%rsi,%rdx,1)
movzbl (%rsi,%rdx,1),%r9d
movzbl 0x1(%rdi,%rdx,1),%eax
add    %ebx,%eax
add    $0x1,%eax
shr    %eax
lea    (%r9,%rax,1),%ebx
add    $0x1,%ebx
shr    %ebx
mov    %bl,(%rsi,%rdx,1)
add    %r8,%rdx
add    $0xffffffff,%ecx
jne    1120 <rechac+0x20>
jmp    1355 <rechac+0x255>
mov    $0x7,%edx
nopl   0x0(%rax)
movzbl -0x7(%rdi,%rdx,1),%r10d
movzbl -0x7(%rsi,%rdx,1),%r9d
movzbl -0x6(%rdi,%rdx,1),%r11d
lea    (%r11,%r10,1),%eax
add    $0x1,%eax
shr    %eax
add    %r9d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x7(%rsi,%rdx,1)
movzbl -0x6(%rsi,%rdx,1),%r9d
movzbl -0x5(%rdi,%rdx,1),%r10d
lea    (%r11,%r10,1),%eax
add    $0x1,%eax
shr    %eax
add    %r9d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x6(%rsi,%rdx,1)
movzbl -0x5(%rsi,%rdx,1),%r9d
movzbl -0x4(%rdi,%rdx,1),%r11d
lea    (%r10,%r11,1),%eax
add    $0x1,%eax
shr    %eax
add    %r9d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x5(%rsi,%rdx,1)
movzbl -0x4(%rsi,%rdx,1),%r9d
movzbl -0x3(%rdi,%rdx,1),%r10d
lea    (%r11,%r10,1),%eax
add    $0x1,%eax
shr    %eax
add    %r9d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x4(%rsi,%rdx,1)
movzbl -0x3(%rsi,%rdx,1),%r9d
movzbl -0x2(%rdi,%rdx,1),%r11d
lea    (%r10,%r11,1),%eax
add    $0x1,%eax
shr    %eax
add    %r9d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x3(%rsi,%rdx,1)
movzbl -0x2(%rsi,%rdx,1),%r9d
movzbl -0x1(%rdi,%rdx,1),%r10d
lea    (%r11,%r10,1),%eax
add    $0x1,%eax
shr    %eax
add    %r9d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x2(%rsi,%rdx,1)
movzbl -0x1(%rsi,%rdx,1),%r9d
movzbl (%rdi,%rdx,1),%r11d
lea    (%r10,%r11,1),%eax
add    $0x1,%eax
shr    %eax
add    %r9d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x1(%rsi,%rdx,1)
movzbl (%rsi,%rdx,1),%r9d
movzbl 0x1(%rdi,%rdx,1),%eax
add    %r11d,%eax
add    $0x1,%eax
shr    %eax
add    %r9d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,(%rsi,%rdx,1)
add    %r8,%rdx
add    $0xffffffff,%ecx
jne    1240 <rechac+0x140>
pop    %rbx
ret

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

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