void MC_avg_xy_8_c(unsigned char *dest, const unsigned char *ref,
                   const int stride, int height) {
  do {
    dest[0] = (((((ref[0] + ref[0 + 1] + (ref + stride)[0] +
                   (ref + stride)[0 + 1] + 2) >>
                  2)) +
                dest[0] + 1) >>
               1);
    dest[1] = (((((ref[1] + ref[1 + 1] + (ref + stride)[1] +
                   (ref + stride)[1 + 1] + 2) >>
                  2)) +
                dest[1] + 1) >>
               1);
    dest[2] = (((((ref[2] + ref[2 + 1] + (ref + stride)[2] +
                   (ref + stride)[2 + 1] + 2) >>
                  2)) +
                dest[2] + 1) >>
               1);
    dest[3] = (((((ref[3] + ref[3 + 1] + (ref + stride)[3] +
                   (ref + stride)[3 + 1] + 2) >>
                  2)) +
                dest[3] + 1) >>
               1);
    dest[4] = (((((ref[4] + ref[4 + 1] + (ref + stride)[4] +
                   (ref + stride)[4 + 1] + 2) >>
                  2)) +
                dest[4] + 1) >>
               1);
    dest[5] = (((((ref[5] + ref[5 + 1] + (ref + stride)[5] +
                   (ref + stride)[5 + 1] + 2) >>
                  2)) +
                dest[5] + 1) >>
               1);
    dest[6] = (((((ref[6] + ref[6 + 1] + (ref + stride)[6] +
                   (ref + stride)[6 + 1] + 2) >>
                  2)) +
                dest[6] + 1) >>
               1);
    dest[7] = (((((ref[7] + ref[7 + 1] + (ref + stride)[7] +
                   (ref + stride)[7 + 1] + 2) >>
                  2)) +
                dest[7] + 1) >>
               1);
    ref += stride;
    dest += stride;
  } while (--height);
}


x86 assembly (clang, -O0):
<MC_avg_xy_8_c>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %ecx,-0x18(%rbp)
mov    -0x10(%rbp),%rax
movzbl (%rax),%eax
mov    -0x10(%rbp),%rcx
movzbl 0x1(%rcx),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl (%rcx,%rdx,1),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0x1(%rcx,%rdx,1),%ecx
add    %ecx,%eax
add    $0x2,%eax
sar    $0x2,%eax
mov    -0x8(%rbp),%rcx
movzbl (%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
sar    $0x1,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %cl,(%rax)
mov    -0x10(%rbp),%rax
movzbl 0x1(%rax),%eax
mov    -0x10(%rbp),%rcx
movzbl 0x2(%rcx),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0x1(%rcx,%rdx,1),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0x2(%rcx,%rdx,1),%ecx
add    %ecx,%eax
add    $0x2,%eax
sar    $0x2,%eax
mov    -0x8(%rbp),%rcx
movzbl 0x1(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
sar    $0x1,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x1(%rax)
mov    -0x10(%rbp),%rax
movzbl 0x2(%rax),%eax
mov    -0x10(%rbp),%rcx
movzbl 0x3(%rcx),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0x2(%rcx,%rdx,1),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0x3(%rcx,%rdx,1),%ecx
add    %ecx,%eax
add    $0x2,%eax
sar    $0x2,%eax
mov    -0x8(%rbp),%rcx
movzbl 0x2(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
sar    $0x1,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x2(%rax)
mov    -0x10(%rbp),%rax
movzbl 0x3(%rax),%eax
mov    -0x10(%rbp),%rcx
movzbl 0x4(%rcx),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0x3(%rcx,%rdx,1),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0x4(%rcx,%rdx,1),%ecx
add    %ecx,%eax
add    $0x2,%eax
sar    $0x2,%eax
mov    -0x8(%rbp),%rcx
movzbl 0x3(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
sar    $0x1,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x3(%rax)
mov    -0x10(%rbp),%rax
movzbl 0x4(%rax),%eax
mov    -0x10(%rbp),%rcx
movzbl 0x5(%rcx),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0x4(%rcx,%rdx,1),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0x5(%rcx,%rdx,1),%ecx
add    %ecx,%eax
add    $0x2,%eax
sar    $0x2,%eax
mov    -0x8(%rbp),%rcx
movzbl 0x4(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
sar    $0x1,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x4(%rax)
mov    -0x10(%rbp),%rax
movzbl 0x5(%rax),%eax
mov    -0x10(%rbp),%rcx
movzbl 0x6(%rcx),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0x5(%rcx,%rdx,1),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0x6(%rcx,%rdx,1),%ecx
add    %ecx,%eax
add    $0x2,%eax
sar    $0x2,%eax
mov    -0x8(%rbp),%rcx
movzbl 0x5(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
sar    $0x1,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x5(%rax)
mov    -0x10(%rbp),%rax
movzbl 0x6(%rax),%eax
mov    -0x10(%rbp),%rcx
movzbl 0x7(%rcx),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0x6(%rcx,%rdx,1),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0x7(%rcx,%rdx,1),%ecx
add    %ecx,%eax
add    $0x2,%eax
sar    $0x2,%eax
mov    -0x8(%rbp),%rcx
movzbl 0x6(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
sar    $0x1,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x6(%rax)
mov    -0x10(%rbp),%rax
movzbl 0x7(%rax),%eax
mov    -0x10(%rbp),%rcx
movzbl 0x8(%rcx),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0x7(%rcx,%rdx,1),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movzbl 0x8(%rcx,%rdx,1),%ecx
add    %ecx,%eax
add    $0x2,%eax
sar    $0x2,%eax
mov    -0x8(%rbp),%rcx
movzbl 0x7(%rcx),%ecx
add    %ecx,%eax
add    $0x1,%eax
sar    $0x1,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x7(%rax)
mov    -0x14(%rbp),%ecx
mov    -0x10(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x10(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x8(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x8(%rbp)
mov    -0x18(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x18(%rbp)
cmp    $0x0,%eax
jne    1112 <MC_avg_xy_8_c+0x12>
pop    %rbp
ret

x86 assembly (clang, -O2):
<MC_avg_xy_8_c>:
movslq %edx,%r9
cmp    $0x1,%r9d
jne    12a8 <MC_avg_xy_8_c+0x1a8>
mov    0x6(%rdi),%r8b
add    $0x8,%rsi
add    $0x7,%rdi
nopl   0x0(%rax)
movzbl -0x8(%rsi),%eax
movzbl -0x7(%rsi),%edx
add    %eax,%edx
movzbl -0x8(%rsi,%r9,1),%eax
add    %edx,%eax
movzbl -0x7(%rsi,%r9,1),%edx
add    %edx,%eax
add    $0x2,%eax
shr    $0x2,%eax
movzbl -0x7(%rdi),%edx
add    %edx,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x7(%rdi)
movzbl -0x7(%rsi),%eax
movzbl -0x6(%rsi),%edx
add    %eax,%edx
movzbl -0x7(%rsi,%r9,1),%eax
add    %edx,%eax
movzbl -0x6(%rsi,%r9,1),%edx
add    %edx,%eax
add    $0x2,%eax
shr    $0x2,%eax
movzbl -0x6(%rdi),%edx
add    %edx,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x6(%rdi)
movzbl -0x6(%rsi),%eax
movzbl -0x5(%rsi),%edx
add    %eax,%edx
movzbl -0x6(%rsi,%r9,1),%eax
add    %edx,%eax
movzbl -0x5(%rsi,%r9,1),%edx
add    %edx,%eax
add    $0x2,%eax
shr    $0x2,%eax
movzbl -0x5(%rdi),%edx
add    %edx,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x5(%rdi)
movzbl -0x5(%rsi),%eax
movzbl -0x4(%rsi),%edx
add    %eax,%edx
movzbl -0x5(%rsi,%r9,1),%eax
add    %edx,%eax
movzbl -0x4(%rsi,%r9,1),%edx
add    %edx,%eax
add    $0x2,%eax
shr    $0x2,%eax
movzbl -0x4(%rdi),%edx
add    %edx,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x4(%rdi)
movzbl -0x4(%rsi),%eax
movzbl -0x3(%rsi),%edx
add    %eax,%edx
movzbl -0x4(%rsi,%r9,1),%eax
add    %edx,%eax
movzbl -0x3(%rsi,%r9,1),%edx
add    %edx,%eax
add    $0x2,%eax
shr    $0x2,%eax
movzbl -0x3(%rdi),%edx
add    %edx,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x3(%rdi)
movzbl -0x3(%rsi),%eax
movzbl -0x2(%rsi),%edx
add    %eax,%edx
movzbl -0x3(%rsi,%r9,1),%eax
add    %edx,%eax
movzbl -0x2(%rsi,%r9,1),%edx
add    %edx,%eax
add    $0x2,%eax
shr    $0x2,%eax
movzbl -0x2(%rdi),%edx
add    %edx,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x2(%rdi)
movzbl -0x2(%rsi),%eax
movzbl -0x1(%rsi),%edx
add    %eax,%edx
movzbl -0x2(%rsi,%r9,1),%eax
add    %edx,%eax
movzbl -0x1(%rsi,%r9,1),%edx
add    %edx,%eax
add    $0x2,%eax
shr    $0x2,%eax
movzbl %r8b,%edx
add    %edx,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x1(%rdi)
movzbl -0x1(%rsi),%r8d
movzbl (%rsi),%edx
movzbl -0x1(%rsi,%r9,1),%eax
movzbl (%rsi,%r9,1),%r10d
add    %r9,%rsi
add    %r8d,%edx
add    %edx,%eax
add    %r10d,%eax
add    $0x2,%eax
shr    $0x2,%eax
movzbl (%rdi),%edx
lea    (%rdx,%rax,1),%r8d
add    $0x1,%r8d
shr    %r8d
mov    %r8b,(%rdi)
add    %r9,%rdi
add    $0xffffffff,%ecx
jne    1120 <MC_avg_xy_8_c+0x20>
jmp    142e <MC_avg_xy_8_c+0x32e>
add    $0x8,%rsi
add    $0x7,%rdi
movzbl -0x8(%rsi),%r8d
movzbl -0x7(%rsi),%edx
add    %r8d,%edx
movzbl -0x8(%rsi,%r9,1),%eax
add    %edx,%eax
movzbl -0x7(%rsi,%r9,1),%edx
add    %edx,%eax
add    $0x2,%eax
shr    $0x2,%eax
movzbl -0x7(%rdi),%edx
add    %edx,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x7(%rdi)
movzbl -0x7(%rsi),%eax
movzbl -0x6(%rsi),%edx
add    %eax,%edx
movzbl -0x7(%rsi,%r9,1),%eax
add    %edx,%eax
movzbl -0x6(%rsi,%r9,1),%edx
add    %edx,%eax
add    $0x2,%eax
shr    $0x2,%eax
movzbl -0x6(%rdi),%edx
add    %edx,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x6(%rdi)
movzbl -0x6(%rsi),%eax
movzbl -0x5(%rsi),%edx
add    %eax,%edx
movzbl -0x6(%rsi,%r9,1),%eax
add    %edx,%eax
movzbl -0x5(%rsi,%r9,1),%edx
add    %edx,%eax
add    $0x2,%eax
shr    $0x2,%eax
movzbl -0x5(%rdi),%edx
add    %edx,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x5(%rdi)
movzbl -0x5(%rsi),%eax
movzbl -0x4(%rsi),%edx
add    %eax,%edx
movzbl -0x5(%rsi,%r9,1),%eax
add    %edx,%eax
movzbl -0x4(%rsi,%r9,1),%edx
add    %edx,%eax
add    $0x2,%eax
shr    $0x2,%eax
movzbl -0x4(%rdi),%edx
add    %edx,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x4(%rdi)
movzbl -0x4(%rsi),%eax
movzbl -0x3(%rsi),%edx
add    %eax,%edx
movzbl -0x4(%rsi,%r9,1),%eax
add    %edx,%eax
movzbl -0x3(%rsi,%r9,1),%edx
add    %edx,%eax
add    $0x2,%eax
shr    $0x2,%eax
movzbl -0x3(%rdi),%edx
add    %edx,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x3(%rdi)
movzbl -0x3(%rsi),%eax
movzbl -0x2(%rsi),%edx
add    %eax,%edx
movzbl -0x3(%rsi,%r9,1),%eax
add    %edx,%eax
movzbl -0x2(%rsi,%r9,1),%edx
add    %edx,%eax
add    $0x2,%eax
shr    $0x2,%eax
movzbl -0x2(%rdi),%edx
add    %edx,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x2(%rdi)
movzbl -0x2(%rsi),%eax
movzbl -0x1(%rsi),%edx
add    %eax,%edx
movzbl -0x2(%rsi,%r9,1),%eax
add    %edx,%eax
movzbl -0x1(%rsi,%r9,1),%edx
add    %edx,%eax
add    $0x2,%eax
shr    $0x2,%eax
movzbl -0x1(%rdi),%edx
add    %edx,%eax
add    $0x1,%eax
shr    %eax
mov    %al,-0x1(%rdi)
movzbl -0x1(%rsi),%eax
movzbl (%rsi),%edx
add    %eax,%edx
movzbl -0x1(%rsi,%r9,1),%eax
movzbl (%rsi,%r9,1),%r8d
add    %r9,%rsi
add    %edx,%eax
add    %r8d,%eax
add    $0x2,%eax
shr    $0x2,%eax
movzbl (%rdi),%edx
add    %edx,%eax
add    $0x1,%eax
shr    %eax
mov    %al,(%rdi)
add    %r9,%rdi
add    $0xffffffff,%ecx
jne    12b0 <MC_avg_xy_8_c+0x1b0>
ret

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

LLVM IR (-O2):
define void @MC_avg_xy_8_c(i8* nocapture %0, i8* nocapture %1, i32 %2, i32 %3) {
%5 = sext i32 %2 to i64
%6 = icmp eq i32 %2, 1
br i1 %6, label %190, label %7
7: ; preds = %4, %7
%8 = phi i8* [ %16, %7 ], [ %1, %4 ]
%9 = phi i8* [ %187, %7 ], [ %0, %4 ]
%10 = phi i32 [ %188, %7 ], [ %3, %4 ]
%11 = load i8, i8* %8
%12 = zext i8 %11 to i32
%13 = getelementptr inbounds i8, i8* %8, i64 1
%14 = load i8, i8* %13
%15 = zext i8 %14 to i32
%16 = getelementptr inbounds i8, i8* %8, i64 %5
%17 = load i8, i8* %16
%18 = zext i8 %17 to i32
%19 = getelementptr inbounds i8, i8* %16, i64 1
%20 = load i8, i8* %19
%21 = zext i8 %20 to i32
%22 = add nuw nsw i32 %12, 2
%23 = add nuw nsw i32 %22, %15
%24 = add nuw nsw i32 %23, %18
%25 = add nuw nsw i32 %24, %21
%26 = lshr i32 %25, 2
%27 = load i8, i8* %9
%28 = zext i8 %27 to i32
%29 = add nuw nsw i32 %28, 1
%30 = add nuw nsw i32 %29, %26
%31 = lshr i32 %30, 1
%32 = trunc i32 %31 to i8
store i8 %32, i8* %9
%33 = load i8, i8* %13
%34 = zext i8 %33 to i32
%35 = getelementptr inbounds i8, i8* %8, i64 2
%36 = load i8, i8* %35
%37 = zext i8 %36 to i32
%38 = load i8, i8* %19
%39 = zext i8 %38 to i32
%40 = getelementptr inbounds i8, i8* %16, i64 2
%41 = load i8, i8* %40
%42 = zext i8 %41 to i32
%43 = add nuw nsw i32 %34, 2
%44 = add nuw nsw i32 %43, %37
%45 = add nuw nsw i32 %44, %39
%46 = add nuw nsw i32 %45, %42
%47 = lshr i32 %46, 2
%48 = getelementptr inbounds i8, i8* %9, i64 1
%49 = load i8, i8* %48
%50 = zext i8 %49 to i32
%51 = add nuw nsw i32 %50, 1
%52 = add nuw nsw i32 %51, %47
%53 = lshr i32 %52, 1
%54 = trunc i32 %53 to i8
store i8 %54, i8* %48
%55 = load i8, i8* %35
%56 = zext i8 %55 to i32
%57 = getelementptr inbounds i8, i8* %8, i64 3
%58 = load i8, i8* %57
%59 = zext i8 %58 to i32
%60 = load i8, i8* %40
%61 = zext i8 %60 to i32
%62 = getelementptr inbounds i8, i8* %16, i64 3
%63 = load i8, i8* %62
%64 = zext i8 %63 to i32
%65 = add nuw nsw i32 %56, 2
%66 = add nuw nsw i32 %65, %59
%67 = add nuw nsw i32 %66, %61
%68 = add nuw nsw i32 %67, %64
%69 = lshr i32 %68, 2
%70 = getelementptr inbounds i8, i8* %9, i64 2
%71 = load i8, i8* %70
%72 = zext i8 %71 to i32
%73 = add nuw nsw i32 %72, 1
%74 = add nuw nsw i32 %73, %69
%75 = lshr i32 %74, 1
%76 = trunc i32 %75 to i8
store i8 %76, i8* %70
%77 = load i8, i8* %57
%78 = zext i8 %77 to i32
%79 = getelementptr inbounds i8, i8* %8, i64 4
%80 = load i8, i8* %79
%81 = zext i8 %80 to i32
%82 = load i8, i8* %62
%83 = zext i8 %82 to i32
%84 = getelementptr inbounds i8, i8* %16, i64 4
%85 = load i8, i8* %84
%86 = zext i8 %85 to i32
%87 = add nuw nsw i32 %78, 2
%88 = add nuw nsw i32 %87, %81
%89 = add nuw nsw i32 %88, %83
%90 = add nuw nsw i32 %89, %86
%91 = lshr i32 %90, 2
%92 = getelementptr inbounds i8, i8* %9, i64 3
%93 = load i8, i8* %92
%94 = zext i8 %93 to i32
%95 = add nuw nsw i32 %94, 1
%96 = add nuw nsw i32 %95, %91
%97 = lshr i32 %96, 1
%98 = trunc i32 %97 to i8
store i8 %98, i8* %92
%99 = load i8, i8* %79
%100 = zext i8 %99 to i32
%101 = getelementptr inbounds i8, i8* %8, i64 5
%102 = load i8, i8* %101
%103 = zext i8 %102 to i32
%104 = load i8, i8* %84
%105 = zext i8 %104 to i32
%106 = getelementptr inbounds i8, i8* %16, i64 5
%107 = load i8, i8* %106
%108 = zext i8 %107 to i32
%109 = add nuw nsw i32 %100, 2
%110 = add nuw nsw i32 %109, %103
%111 = add nuw nsw i32 %110, %105
%112 = add nuw nsw i32 %111, %108
%113 = lshr i32 %112, 2
%114 = getelementptr inbounds i8, i8* %9, i64 4
%115 = load i8, i8* %114
%116 = zext i8 %115 to i32
%117 = add nuw nsw i32 %116, 1
%118 = add nuw nsw i32 %117, %113
%119 = lshr i32 %118, 1
%120 = trunc i32 %119 to i8
store i8 %120, i8* %114
%121 = load i8, i8* %101
%122 = zext i8 %121 to i32
%123 = getelementptr inbounds i8, i8* %8, i64 6
%124 = load i8, i8* %123
%125 = zext i8 %124 to i32
%126 = load i8, i8* %106
%127 = zext i8 %126 to i32
%128 = getelementptr inbounds i8, i8* %16, i64 6
%129 = load i8, i8* %128
%130 = zext i8 %129 to i32
%131 = add nuw nsw i32 %122, 2
%132 = add nuw nsw i32 %131, %125
%133 = add nuw nsw i32 %132, %127
%134 = add nuw nsw i32 %133, %130
%135 = lshr i32 %134, 2
%136 = getelementptr inbounds i8, i8* %9, i64 5
%137 = load i8, i8* %136
%138 = zext i8 %137 to i32
%139 = add nuw nsw i32 %138, 1
%140 = add nuw nsw i32 %139, %135
%141 = lshr i32 %140, 1
%142 = trunc i32 %141 to i8
store i8 %142, i8* %136
%143 = load i8, i8* %123
%144 = zext i8 %143 to i32
%145 = getelementptr inbounds i8, i8* %8, i64 7
%146 = load i8, i8* %145
%147 = zext i8 %146 to i32
%148 = load i8, i8* %128
%149 = zext i8 %148 to i32
%150 = getelementptr inbounds i8, i8* %16, i64 7
%151 = load i8, i8* %150
%152 = zext i8 %151 to i32
%153 = add nuw nsw i32 %144, 2
%154 = add nuw nsw i32 %153, %147
%155 = add nuw nsw i32 %154, %149
%156 = add nuw nsw i32 %155, %152
%157 = lshr i32 %156, 2
%158 = getelementptr inbounds i8, i8* %9, i64 6
%159 = load i8, i8* %158
%160 = zext i8 %159 to i32
%161 = add nuw nsw i32 %160, 1
%162 = add nuw nsw i32 %161, %157
%163 = lshr i32 %162, 1
%164 = trunc i32 %163 to i8
store i8 %164, i8* %158
%165 = load i8, i8* %145
%166 = zext i8 %165 to i32
%167 = getelementptr inbounds i8, i8* %8, i64 8
%168 = load i8, i8* %167
%169 = zext i8 %168 to i32
%170 = load i8, i8* %150
%171 = zext i8 %170 to i32
%172 = getelementptr inbounds i8, i8* %16, i64 8
%173 = load i8, i8* %172
%174 = zext i8 %173 to i32
%175 = add nuw nsw i32 %166, 2
%176 = add nuw nsw i32 %175, %169
%177 = add nuw nsw i32 %176, %171
%178 = add nuw nsw i32 %177, %174
%179 = lshr i32 %178, 2
%180 = getelementptr inbounds i8, i8* %9, i64 7
%181 = load i8, i8* %180
%182 = zext i8 %181 to i32
%183 = add nuw nsw i32 %182, 1
%184 = add nuw nsw i32 %183, %179
%185 = lshr i32 %184, 1
%186 = trunc i32 %185 to i8
store i8 %186, i8* %180
%187 = getelementptr inbounds i8, i8* %9, i64 %5
%188 = add nsw i32 %10, -1
%189 = icmp eq i32 %188, 0
br i1 %189, label %376, label %7
190: ; preds = %4
%191 = getelementptr i8, i8* %0, i64 6
%192 = load i8, i8* %191
br label %193
193: ; preds = %193, %190
%194 = phi i8 [ %192, %190 ], [ %372, %193 ]
%195 = phi i8* [ %1, %190 ], [ %203, %193 ]
%196 = phi i8* [ %0, %190 ], [ %373, %193 ]
%197 = phi i32 [ %3, %190 ], [ %374, %193 ]
%198 = load i8, i8* %195
%199 = zext i8 %198 to i32
%200 = getelementptr inbounds i8, i8* %195, i64 1
%201 = load i8, i8* %200
%202 = zext i8 %201 to i32
%203 = getelementptr inbounds i8, i8* %195, i64 %5
%204 = load i8, i8* %203
%205 = zext i8 %204 to i32
%206 = getelementptr inbounds i8, i8* %203, i64 1
%207 = load i8, i8* %206
%208 = zext i8 %207 to i32
%209 = add nuw nsw i32 %199, 2
%210 = add nuw nsw i32 %209, %202
%211 = add nuw nsw i32 %210, %205
%212 = add nuw nsw i32 %211, %208
%213 = lshr i32 %212, 2
%214 = load i8, i8* %196
%215 = zext i8 %214 to i32
%216 = add nuw nsw i32 %215, 1
%217 = add nuw nsw i32 %216, %213
%218 = lshr i32 %217, 1
%219 = trunc i32 %218 to i8
store i8 %219, i8* %196
%220 = load i8, i8* %200
%221 = zext i8 %220 to i32
%222 = getelementptr inbounds i8, i8* %195, i64 2
%223 = load i8, i8* %222
%224 = zext i8 %223 to i32
%225 = load i8, i8* %206
%226 = zext i8 %225 to i32
%227 = getelementptr inbounds i8, i8* %203, i64 2
%228 = load i8, i8* %227
%229 = zext i8 %228 to i32
%230 = add nuw nsw i32 %221, 2
%231 = add nuw nsw i32 %230, %224
%232 = add nuw nsw i32 %231, %226
%233 = add nuw nsw i32 %232, %229
%234 = lshr i32 %233, 2
%235 = getelementptr inbounds i8, i8* %196, i64 1
%236 = load i8, i8* %235
%237 = zext i8 %236 to i32
%238 = add nuw nsw i32 %237, 1
%239 = add nuw nsw i32 %238, %234
%240 = lshr i32 %239, 1
%241 = trunc i32 %240 to i8
store i8 %241, i8* %235
%242 = load i8, i8* %222
%243 = zext i8 %242 to i32
%244 = getelementptr inbounds i8, i8* %195, i64 3
%245 = load i8, i8* %244
%246 = zext i8 %245 to i32
%247 = load i8, i8* %227
%248 = zext i8 %247 to i32
%249 = getelementptr inbounds i8, i8* %203, i64 3
%250 = load i8, i8* %249
%251 = zext i8 %250 to i32
%252 = add nuw nsw i32 %243, 2
%253 = add nuw nsw i32 %252, %246
%254 = add nuw nsw i32 %253, %248
%255 = add nuw nsw i32 %254, %251
%256 = lshr i32 %255, 2
%257 = getelementptr inbounds i8, i8* %196, i64 2
%258 = load i8, i8* %257
%259 = zext i8 %258 to i32
%260 = add nuw nsw i32 %259, 1
%261 = add nuw nsw i32 %260, %256
%262 = lshr i32 %261, 1
%263 = trunc i32 %262 to i8
store i8 %263, i8* %257
%264 = load i8, i8* %244
%265 = zext i8 %264 to i32
%266 = getelementptr inbounds i8, i8* %195, i64 4
%267 = load i8, i8* %266
%268 = zext i8 %267 to i32
%269 = load i8, i8* %249
%270 = zext i8 %269 to i32
%271 = getelementptr inbounds i8, i8* %203, i64 4
%272 = load i8, i8* %271
%273 = zext i8 %272 to i32
%274 = add nuw nsw i32 %265, 2
%275 = add nuw nsw i32 %274, %268
%276 = add nuw nsw i32 %275, %270
%277 = add nuw nsw i32 %276, %273
%278 = lshr i32 %277, 2
%279 = getelementptr inbounds i8, i8* %196, i64 3
%280 = load i8, i8* %279
%281 = zext i8 %280 to i32
%282 = add nuw nsw i32 %281, 1
%283 = add nuw nsw i32 %282, %278
%284 = lshr i32 %283, 1
%285 = trunc i32 %284 to i8
store i8 %285, i8* %279
%286 = load i8, i8* %266
%287 = zext i8 %286 to i32
%288 = getelementptr inbounds i8, i8* %195, i64 5
%289 = load i8, i8* %288
%290 = zext i8 %289 to i32
%291 = load i8, i8* %271
%292 = zext i8 %291 to i32
%293 = getelementptr inbounds i8, i8* %203, i64 5
%294 = load i8, i8* %293
%295 = zext i8 %294 to i32
%296 = add nuw nsw i32 %287, 2
%297 = add nuw nsw i32 %296, %290
%298 = add nuw nsw i32 %297, %292
%299 = add nuw nsw i32 %298, %295
%300 = lshr i32 %299, 2
%301 = getelementptr inbounds i8, i8* %196, i64 4
%302 = load i8, i8* %301
%303 = zext i8 %302 to i32
%304 = add nuw nsw i32 %303, 1
%305 = add nuw nsw i32 %304, %300
%306 = lshr i32 %305, 1
%307 = trunc i32 %306 to i8
store i8 %307, i8* %301
%308 = load i8, i8* %288
%309 = zext i8 %308 to i32
%310 = getelementptr inbounds i8, i8* %195, i64 6
%311 = load i8, i8* %310
%312 = zext i8 %311 to i32
%313 = load i8, i8* %293
%314 = zext i8 %313 to i32
%315 = getelementptr inbounds i8, i8* %203, i64 6
%316 = load i8, i8* %315
%317 = zext i8 %316 to i32
%318 = add nuw nsw i32 %309, 2
%319 = add nuw nsw i32 %318, %312
%320 = add nuw nsw i32 %319, %314
%321 = add nuw nsw i32 %320, %317
%322 = lshr i32 %321, 2
%323 = getelementptr inbounds i8, i8* %196, i64 5
%324 = load i8, i8* %323
%325 = zext i8 %324 to i32
%326 = add nuw nsw i32 %325, 1
%327 = add nuw nsw i32 %326, %322
%328 = lshr i32 %327, 1
%329 = trunc i32 %328 to i8
store i8 %329, i8* %323
%330 = load i8, i8* %310
%331 = zext i8 %330 to i32
%332 = getelementptr inbounds i8, i8* %195, i64 7
%333 = load i8, i8* %332
%334 = zext i8 %333 to i32
%335 = load i8, i8* %315
%336 = zext i8 %335 to i32
%337 = getelementptr inbounds i8, i8* %203, i64 7
%338 = load i8, i8* %337
%339 = zext i8 %338 to i32
%340 = add nuw nsw i32 %331, 2
%341 = add nuw nsw i32 %340, %334
%342 = add nuw nsw i32 %341, %336
%343 = add nuw nsw i32 %342, %339
%344 = lshr i32 %343, 2
%345 = getelementptr inbounds i8, i8* %196, i64 6
%346 = zext i8 %194 to i32
%347 = add nuw nsw i32 %346, 1
%348 = add nuw nsw i32 %347, %344
%349 = lshr i32 %348, 1
%350 = trunc i32 %349 to i8
store i8 %350, i8* %345
%351 = load i8, i8* %332
%352 = zext i8 %351 to i32
%353 = getelementptr inbounds i8, i8* %195, i64 8
%354 = load i8, i8* %353
%355 = zext i8 %354 to i32
%356 = load i8, i8* %337
%357 = zext i8 %356 to i32
%358 = getelementptr inbounds i8, i8* %203, i64 8
%359 = load i8, i8* %358
%360 = zext i8 %359 to i32
%361 = add nuw nsw i32 %352, 2
%362 = add nuw nsw i32 %361, %355
%363 = add nuw nsw i32 %362, %357
%364 = add nuw nsw i32 %363, %360
%365 = lshr i32 %364, 2
%366 = getelementptr inbounds i8, i8* %196, i64 7
%367 = load i8, i8* %366
%368 = zext i8 %367 to i32
%369 = add nuw nsw i32 %368, 1
%370 = add nuw nsw i32 %369, %365
%371 = lshr i32 %370, 1
%372 = trunc i32 %371 to i8
store i8 %372, i8* %366
%373 = getelementptr inbounds i8, i8* %196, i64 %5
%374 = add nsw i32 %197, -1
%375 = icmp eq i32 %374, 0
br i1 %375, label %376, label %193
376: ; preds = %7, %193
ret void
}