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


x86 assembly (clang, -O0):
<recv>:
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    1396 <recv+0x296>
mov    -0x30(%rbp),%rax
movzbl (%rax),%eax
mov    -0x38(%rbp),%rcx
movzbl (%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x28(%rbp),%rax
mov    %cl,(%rax)
mov    -0x30(%rbp),%rax
movzbl 0x1(%rax),%eax
mov    -0x38(%rbp),%rcx
movzbl 0x1(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x28(%rbp),%rax
mov    %cl,0x1(%rax)
mov    -0x30(%rbp),%rax
movzbl 0x2(%rax),%eax
mov    -0x38(%rbp),%rcx
movzbl 0x2(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x28(%rbp),%rax
mov    %cl,0x2(%rax)
mov    -0x30(%rbp),%rax
movzbl 0x3(%rax),%eax
mov    -0x38(%rbp),%rcx
movzbl 0x3(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x28(%rbp),%rax
mov    %cl,0x3(%rax)
mov    -0x30(%rbp),%rax
movzbl 0x4(%rax),%eax
mov    -0x38(%rbp),%rcx
movzbl 0x4(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x28(%rbp),%rax
mov    %cl,0x4(%rax)
mov    -0x30(%rbp),%rax
movzbl 0x5(%rax),%eax
mov    -0x38(%rbp),%rcx
movzbl 0x5(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x28(%rbp),%rax
mov    %cl,0x5(%rax)
mov    -0x30(%rbp),%rax
movzbl 0x6(%rax),%eax
mov    -0x38(%rbp),%rcx
movzbl 0x6(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x28(%rbp),%rax
mov    %cl,0x6(%rax)
mov    -0x30(%rbp),%rax
movzbl 0x7(%rax),%eax
mov    -0x38(%rbp),%rcx
movzbl 0x7(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x28(%rbp),%rax
mov    %cl,0x7(%rax)
mov    -0x30(%rbp),%rax
movzbl 0x8(%rax),%eax
mov    -0x38(%rbp),%rcx
movzbl 0x8(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x28(%rbp),%rax
mov    %cl,0x8(%rax)
mov    -0x30(%rbp),%rax
movzbl 0x9(%rax),%eax
mov    -0x38(%rbp),%rcx
movzbl 0x9(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x28(%rbp),%rax
mov    %cl,0x9(%rax)
mov    -0x30(%rbp),%rax
movzbl 0xa(%rax),%eax
mov    -0x38(%rbp),%rcx
movzbl 0xa(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x28(%rbp),%rax
mov    %cl,0xa(%rax)
mov    -0x30(%rbp),%rax
movzbl 0xb(%rax),%eax
mov    -0x38(%rbp),%rcx
movzbl 0xb(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x28(%rbp),%rax
mov    %cl,0xb(%rax)
mov    -0x30(%rbp),%rax
movzbl 0xc(%rax),%eax
mov    -0x38(%rbp),%rcx
movzbl 0xc(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x28(%rbp),%rax
mov    %cl,0xc(%rax)
mov    -0x30(%rbp),%rax
movzbl 0xd(%rax),%eax
mov    -0x38(%rbp),%rcx
movzbl 0xd(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x28(%rbp),%rax
mov    %cl,0xd(%rax)
mov    -0x30(%rbp),%rax
movzbl 0xe(%rax),%eax
mov    -0x38(%rbp),%rcx
movzbl 0xe(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
shr    $0x1,%eax
mov    %al,%cl
mov    -0x28(%rbp),%rax
mov    %cl,0xe(%rax)
mov    -0x30(%rbp),%rax
movzbl 0xf(%rax),%eax
mov    -0x38(%rbp),%rcx
movzbl 0xf(%rcx),%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 <recv+0x3c>
pop    %rbp
ret

x86 assembly (clang, -O2):
<recv>:
test   %r8d,%r8d
jle    129a <recv+0x19a>
movslq %edx,%rax
add    %rdi,%rax
movslq %ecx,%r9
mov    $0xf,%edx
nopw   0x0(%rax,%rax,1)
movzbl -0xf(%rdi,%rdx,1),%r10d
movzbl -0xf(%rax,%rdx,1),%ecx
add    %r10d,%ecx
add    $0x1,%ecx
shr    %ecx
mov    %cl,-0xf(%rsi,%rdx,1)
movzbl -0xe(%rdi,%rdx,1),%r10d
movzbl -0xe(%rax,%rdx,1),%ecx
add    %r10d,%ecx
add    $0x1,%ecx
shr    %ecx
mov    %cl,-0xe(%rsi,%rdx,1)
movzbl -0xd(%rdi,%rdx,1),%r10d
movzbl -0xd(%rax,%rdx,1),%ecx
add    %r10d,%ecx
add    $0x1,%ecx
shr    %ecx
mov    %cl,-0xd(%rsi,%rdx,1)
movzbl -0xc(%rdi,%rdx,1),%r10d
movzbl -0xc(%rax,%rdx,1),%ecx
add    %r10d,%ecx
add    $0x1,%ecx
shr    %ecx
mov    %cl,-0xc(%rsi,%rdx,1)
movzbl -0xb(%rdi,%rdx,1),%r10d
movzbl -0xb(%rax,%rdx,1),%ecx
add    %r10d,%ecx
add    $0x1,%ecx
shr    %ecx
mov    %cl,-0xb(%rsi,%rdx,1)
movzbl -0xa(%rdi,%rdx,1),%r10d
movzbl -0xa(%rax,%rdx,1),%ecx
add    %r10d,%ecx
add    $0x1,%ecx
shr    %ecx
mov    %cl,-0xa(%rsi,%rdx,1)
movzbl -0x9(%rdi,%rdx,1),%r10d
movzbl -0x9(%rax,%rdx,1),%ecx
add    %r10d,%ecx
add    $0x1,%ecx
shr    %ecx
mov    %cl,-0x9(%rsi,%rdx,1)
movzbl -0x8(%rdi,%rdx,1),%r10d
movzbl -0x8(%rax,%rdx,1),%ecx
add    %r10d,%ecx
add    $0x1,%ecx
shr    %ecx
mov    %cl,-0x8(%rsi,%rdx,1)
movzbl -0x7(%rdi,%rdx,1),%r10d
movzbl -0x7(%rax,%rdx,1),%ecx
add    %r10d,%ecx
add    $0x1,%ecx
shr    %ecx
mov    %cl,-0x7(%rsi,%rdx,1)
movzbl -0x6(%rdi,%rdx,1),%r10d
movzbl -0x6(%rax,%rdx,1),%ecx
add    %r10d,%ecx
add    $0x1,%ecx
shr    %ecx
mov    %cl,-0x6(%rsi,%rdx,1)
movzbl -0x5(%rdi,%rdx,1),%r10d
movzbl -0x5(%rax,%rdx,1),%ecx
add    %r10d,%ecx
add    $0x1,%ecx
shr    %ecx
mov    %cl,-0x5(%rsi,%rdx,1)
movzbl -0x4(%rdi,%rdx,1),%r10d
movzbl -0x4(%rax,%rdx,1),%ecx
add    %r10d,%ecx
add    $0x1,%ecx
shr    %ecx
mov    %cl,-0x4(%rsi,%rdx,1)
movzbl -0x3(%rdi,%rdx,1),%r10d
movzbl -0x3(%rax,%rdx,1),%ecx
add    %r10d,%ecx
add    $0x1,%ecx
shr    %ecx
mov    %cl,-0x3(%rsi,%rdx,1)
movzbl -0x2(%rdi,%rdx,1),%r10d
movzbl -0x2(%rax,%rdx,1),%ecx
add    %r10d,%ecx
add    $0x1,%ecx
shr    %ecx
mov    %cl,-0x2(%rsi,%rdx,1)
movzbl -0x1(%rdi,%rdx,1),%r10d
movzbl -0x1(%rax,%rdx,1),%ecx
add    %r10d,%ecx
add    $0x1,%ecx
shr    %ecx
mov    %cl,-0x1(%rsi,%rdx,1)
movzbl (%rdi,%rdx,1),%r10d
movzbl (%rax,%rdx,1),%ecx
add    %r10d,%ecx
add    $0x1,%ecx
shr    %ecx
mov    %cl,(%rsi,%rdx,1)
add    %r9,%rdx
add    $0xffffffff,%r8d
jne    1120 <recv+0x20>
ret

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

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