void recva(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;
    dp[8] = (dp[8] + ((unsigned int)(sp[8] + sp2[8] + 1) >> 1) + 1) >> 1;
    dp[9] = (dp[9] + ((unsigned int)(sp[9] + sp2[9] + 1) >> 1) + 1) >> 1;
    dp[10] = (dp[10] + ((unsigned int)(sp[10] + sp2[10] + 1) >> 1) + 1) >> 1;
    dp[11] = (dp[11] + ((unsigned int)(sp[11] + sp2[11] + 1) >> 1) + 1) >> 1;
    dp[12] = (dp[12] + ((unsigned int)(sp[12] + sp2[12] + 1) >> 1) + 1) >> 1;
    dp[13] = (dp[13] + ((unsigned int)(sp[13] + sp2[13] + 1) >> 1) + 1) >> 1;
    dp[14] = (dp[14] + ((unsigned int)(sp[14] + sp2[14] + 1) >> 1) + 1) >> 1;
    dp[15] = (dp[15] + ((unsigned int)(sp[15] + sp2[15] + 1) >> 1) + 1) >> 1;
    sp += lx2;
    sp2 += lx2;
    dp += lx2;
  }
}


x86 assembly (clang, -O0):
<recva>:
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    1495 <recva+0x395>
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    -0x28(%rbp),%rax
movzbl 0x8(%rax),%eax
mov    -0x30(%rbp),%rcx
movzbl 0x8(%rcx),%ecx
mov    -0x38(%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    -0x28(%rbp),%rax
mov    %cl,0x8(%rax)
mov    -0x28(%rbp),%rax
movzbl 0x9(%rax),%eax
mov    -0x30(%rbp),%rcx
movzbl 0x9(%rcx),%ecx
mov    -0x38(%rbp),%rdx
movzbl 0x9(%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,0x9(%rax)
mov    -0x28(%rbp),%rax
movzbl 0xa(%rax),%eax
mov    -0x30(%rbp),%rcx
movzbl 0xa(%rcx),%ecx
mov    -0x38(%rbp),%rdx
movzbl 0xa(%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,0xa(%rax)
mov    -0x28(%rbp),%rax
movzbl 0xb(%rax),%eax
mov    -0x30(%rbp),%rcx
movzbl 0xb(%rcx),%ecx
mov    -0x38(%rbp),%rdx
movzbl 0xb(%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,0xb(%rax)
mov    -0x28(%rbp),%rax
movzbl 0xc(%rax),%eax
mov    -0x30(%rbp),%rcx
movzbl 0xc(%rcx),%ecx
mov    -0x38(%rbp),%rdx
movzbl 0xc(%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,0xc(%rax)
mov    -0x28(%rbp),%rax
movzbl 0xd(%rax),%eax
mov    -0x30(%rbp),%rcx
movzbl 0xd(%rcx),%ecx
mov    -0x38(%rbp),%rdx
movzbl 0xd(%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,0xd(%rax)
mov    -0x28(%rbp),%rax
movzbl 0xe(%rax),%eax
mov    -0x30(%rbp),%rcx
movzbl 0xe(%rcx),%ecx
mov    -0x38(%rbp),%rdx
movzbl 0xe(%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,0xe(%rax)
mov    -0x28(%rbp),%rax
movzbl 0xf(%rax),%eax
mov    -0x30(%rbp),%rcx
movzbl 0xf(%rcx),%ecx
mov    -0x38(%rbp),%rdx
movzbl 0xf(%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,0xf(%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 <recva+0x3c>
pop    %rbp
ret

x86 assembly (clang, -O2):
<recva>:
test   %r8d,%r8d
jle    1369 <recva+0x269>
movslq %edx,%r10
add    %rdi,%r10
movslq %ecx,%r9
mov    $0xf,%edx
nopw   0x0(%rax,%rax,1)
movzbl -0xf(%rsi,%rdx,1),%r11d
movzbl -0xf(%rdi,%rdx,1),%eax
movzbl -0xf(%r10,%rdx,1),%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    %eax
add    %r11d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0xf(%rsi,%rdx,1)
movzbl -0xe(%rsi,%rdx,1),%r11d
movzbl -0xe(%rdi,%rdx,1),%ecx
movzbl -0xe(%r10,%rdx,1),%eax
add    %ecx,%eax
add    $0x1,%eax
shr    %eax
add    %r11d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0xe(%rsi,%rdx,1)
movzbl -0xd(%rsi,%rdx,1),%r11d
movzbl -0xd(%rdi,%rdx,1),%ecx
movzbl -0xd(%r10,%rdx,1),%eax
add    %ecx,%eax
add    $0x1,%eax
shr    %eax
add    %r11d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0xd(%rsi,%rdx,1)
movzbl -0xc(%rsi,%rdx,1),%r11d
movzbl -0xc(%rdi,%rdx,1),%ecx
movzbl -0xc(%r10,%rdx,1),%eax
add    %ecx,%eax
add    $0x1,%eax
shr    %eax
add    %r11d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0xc(%rsi,%rdx,1)
movzbl -0xb(%rsi,%rdx,1),%r11d
movzbl -0xb(%rdi,%rdx,1),%ecx
movzbl -0xb(%r10,%rdx,1),%eax
add    %ecx,%eax
add    $0x1,%eax
shr    %eax
add    %r11d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0xb(%rsi,%rdx,1)
movzbl -0xa(%rsi,%rdx,1),%r11d
movzbl -0xa(%rdi,%rdx,1),%ecx
movzbl -0xa(%r10,%rdx,1),%eax
add    %ecx,%eax
add    $0x1,%eax
shr    %eax
add    %r11d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0xa(%rsi,%rdx,1)
movzbl -0x9(%rsi,%rdx,1),%r11d
movzbl -0x9(%rdi,%rdx,1),%ecx
movzbl -0x9(%r10,%rdx,1),%eax
add    %ecx,%eax
add    $0x1,%eax
shr    %eax
add    %r11d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x9(%rsi,%rdx,1)
movzbl -0x8(%rsi,%rdx,1),%r11d
movzbl -0x8(%rdi,%rdx,1),%ecx
movzbl -0x8(%r10,%rdx,1),%eax
add    %ecx,%eax
add    $0x1,%eax
shr    %eax
add    %r11d,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x8(%rsi,%rdx,1)
movzbl -0x7(%rsi,%rdx,1),%r11d
movzbl -0x7(%rdi,%rdx,1),%ecx
movzbl -0x7(%r10,%rdx,1),%eax
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    1120 <recva+0x20>
ret

LLVM IR (-O0):
define void @recva(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 = %374, %5
%22 = load i32, i32* %14
%23 = load i32, i32* %10
%24 = icmp slt i32 %22, %23
br i1 %24, label %25, label %377
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 i8*, i8** %11
%195 = getelementptr inbounds i8, i8* %194, i64 8
%196 = load i8, i8* %195
%197 = zext i8 %196 to i32
%198 = load i8*, i8** %12
%199 = getelementptr inbounds i8, i8* %198, i64 8
%200 = load i8, i8* %199
%201 = zext i8 %200 to i32
%202 = load i8*, i8** %13
%203 = getelementptr inbounds i8, i8* %202, i64 8
%204 = load i8, i8* %203
%205 = zext i8 %204 to i32
%206 = add nsw i32 %201, %205
%207 = add nsw i32 %206, 1
%208 = lshr i32 %207, 1
%209 = add i32 %197, %208
%210 = add i32 %209, 1
%211 = lshr i32 %210, 1
%212 = trunc i32 %211 to i8
%213 = load i8*, i8** %11
%214 = getelementptr inbounds i8, i8* %213, i64 8
store i8 %212, i8* %214
%215 = load i8*, i8** %11
%216 = getelementptr inbounds i8, i8* %215, i64 9
%217 = load i8, i8* %216
%218 = zext i8 %217 to i32
%219 = load i8*, i8** %12
%220 = getelementptr inbounds i8, i8* %219, i64 9
%221 = load i8, i8* %220
%222 = zext i8 %221 to i32
%223 = load i8*, i8** %13
%224 = getelementptr inbounds i8, i8* %223, i64 9
%225 = load i8, i8* %224
%226 = zext i8 %225 to i32
%227 = add nsw i32 %222, %226
%228 = add nsw i32 %227, 1
%229 = lshr i32 %228, 1
%230 = add i32 %218, %229
%231 = add i32 %230, 1
%232 = lshr i32 %231, 1
%233 = trunc i32 %232 to i8
%234 = load i8*, i8** %11
%235 = getelementptr inbounds i8, i8* %234, i64 9
store i8 %233, i8* %235
%236 = load i8*, i8** %11
%237 = getelementptr inbounds i8, i8* %236, i64 10
%238 = load i8, i8* %237
%239 = zext i8 %238 to i32
%240 = load i8*, i8** %12
%241 = getelementptr inbounds i8, i8* %240, i64 10
%242 = load i8, i8* %241
%243 = zext i8 %242 to i32
%244 = load i8*, i8** %13
%245 = getelementptr inbounds i8, i8* %244, i64 10
%246 = load i8, i8* %245
%247 = zext i8 %246 to i32
%248 = add nsw i32 %243, %247
%249 = add nsw i32 %248, 1
%250 = lshr i32 %249, 1
%251 = add i32 %239, %250
%252 = add i32 %251, 1
%253 = lshr i32 %252, 1
%254 = trunc i32 %253 to i8
%255 = load i8*, i8** %11
%256 = getelementptr inbounds i8, i8* %255, i64 10
store i8 %254, i8* %256
%257 = load i8*, i8** %11
%258 = getelementptr inbounds i8, i8* %257, i64 11
%259 = load i8, i8* %258
%260 = zext i8 %259 to i32
%261 = load i8*, i8** %12
%262 = getelementptr inbounds i8, i8* %261, i64 11
%263 = load i8, i8* %262
%264 = zext i8 %263 to i32
%265 = load i8*, i8** %13
%266 = getelementptr inbounds i8, i8* %265, i64 11
%267 = load i8, i8* %266
%268 = zext i8 %267 to i32
%269 = add nsw i32 %264, %268
%270 = add nsw i32 %269, 1
%271 = lshr i32 %270, 1
%272 = add i32 %260, %271
%273 = add i32 %272, 1
%274 = lshr i32 %273, 1
%275 = trunc i32 %274 to i8
%276 = load i8*, i8** %11
%277 = getelementptr inbounds i8, i8* %276, i64 11
store i8 %275, i8* %277
%278 = load i8*, i8** %11
%279 = getelementptr inbounds i8, i8* %278, i64 12
%280 = load i8, i8* %279
%281 = zext i8 %280 to i32
%282 = load i8*, i8** %12
%283 = getelementptr inbounds i8, i8* %282, i64 12
%284 = load i8, i8* %283
%285 = zext i8 %284 to i32
%286 = load i8*, i8** %13
%287 = getelementptr inbounds i8, i8* %286, i64 12
%288 = load i8, i8* %287
%289 = zext i8 %288 to i32
%290 = add nsw i32 %285, %289
%291 = add nsw i32 %290, 1
%292 = lshr i32 %291, 1
%293 = add i32 %281, %292
%294 = add i32 %293, 1
%295 = lshr i32 %294, 1
%296 = trunc i32 %295 to i8
%297 = load i8*, i8** %11
%298 = getelementptr inbounds i8, i8* %297, i64 12
store i8 %296, i8* %298
%299 = load i8*, i8** %11
%300 = getelementptr inbounds i8, i8* %299, i64 13
%301 = load i8, i8* %300
%302 = zext i8 %301 to i32
%303 = load i8*, i8** %12
%304 = getelementptr inbounds i8, i8* %303, i64 13
%305 = load i8, i8* %304
%306 = zext i8 %305 to i32
%307 = load i8*, i8** %13
%308 = getelementptr inbounds i8, i8* %307, i64 13
%309 = load i8, i8* %308
%310 = zext i8 %309 to i32
%311 = add nsw i32 %306, %310
%312 = add nsw i32 %311, 1
%313 = lshr i32 %312, 1
%314 = add i32 %302, %313
%315 = add i32 %314, 1
%316 = lshr i32 %315, 1
%317 = trunc i32 %316 to i8
%318 = load i8*, i8** %11
%319 = getelementptr inbounds i8, i8* %318, i64 13
store i8 %317, i8* %319
%320 = load i8*, i8** %11
%321 = getelementptr inbounds i8, i8* %320, i64 14
%322 = load i8, i8* %321
%323 = zext i8 %322 to i32
%324 = load i8*, i8** %12
%325 = getelementptr inbounds i8, i8* %324, i64 14
%326 = load i8, i8* %325
%327 = zext i8 %326 to i32
%328 = load i8*, i8** %13
%329 = getelementptr inbounds i8, i8* %328, i64 14
%330 = load i8, i8* %329
%331 = zext i8 %330 to i32
%332 = add nsw i32 %327, %331
%333 = add nsw i32 %332, 1
%334 = lshr i32 %333, 1
%335 = add i32 %323, %334
%336 = add i32 %335, 1
%337 = lshr i32 %336, 1
%338 = trunc i32 %337 to i8
%339 = load i8*, i8** %11
%340 = getelementptr inbounds i8, i8* %339, i64 14
store i8 %338, i8* %340
%341 = load i8*, i8** %11
%342 = getelementptr inbounds i8, i8* %341, i64 15
%343 = load i8, i8* %342
%344 = zext i8 %343 to i32
%345 = load i8*, i8** %12
%346 = getelementptr inbounds i8, i8* %345, i64 15
%347 = load i8, i8* %346
%348 = zext i8 %347 to i32
%349 = load i8*, i8** %13
%350 = getelementptr inbounds i8, i8* %349, i64 15
%351 = load i8, i8* %350
%352 = zext i8 %351 to i32
%353 = add nsw i32 %348, %352
%354 = add nsw i32 %353, 1
%355 = lshr i32 %354, 1
%356 = add i32 %344, %355
%357 = add i32 %356, 1
%358 = lshr i32 %357, 1
%359 = trunc i32 %358 to i8
%360 = load i8*, i8** %11
%361 = getelementptr inbounds i8, i8* %360, i64 15
store i8 %359, i8* %361
%362 = load i32, i32* %9
%363 = load i8*, i8** %12
%364 = sext i32 %362 to i64
%365 = getelementptr inbounds i8, i8* %363, i64 %364
store i8* %365, i8** %12
%366 = load i32, i32* %9
%367 = load i8*, i8** %13
%368 = sext i32 %366 to i64
%369 = getelementptr inbounds i8, i8* %367, i64 %368
store i8* %369, i8** %13
%370 = load i32, i32* %9
%371 = load i8*, i8** %11
%372 = sext i32 %370 to i64
%373 = getelementptr inbounds i8, i8* %371, i64 %372
store i8* %373, i8** %11
br label %374
374: ; preds = %25
%375 = load i32, i32* %14
%376 = add nsw i32 %375, 1
store i32 %376, i32* %14
br label %21
377: ; preds = %21
ret void
}

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