void __attribute__((noipa))
f(unsigned char *restrict a, unsigned char *restrict b,
  unsigned char *restrict c, int *restrict d) {
  for (int i = 0; i < 50; ++i) {
    int res = b[i] + c[i];
    a[i] = (res + (res >> 1)) >> 2;
    d[i] = res;
  }
}


x86 assembly (clang, -O0):
<f>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
movl   $0x0,-0x24(%rbp)
cmpl   $0x32,-0x24(%rbp)
jge    1179 <f+0x79>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
mov    -0x18(%rbp),%rcx
movslq -0x24(%rbp),%rdx
movzbl (%rcx,%rdx,1),%ecx
add    %ecx,%eax
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%eax
mov    -0x28(%rbp),%ecx
sar    $0x1,%ecx
add    %ecx,%eax
sar    $0x2,%eax
mov    %al,%dl
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x28(%rbp),%edx
mov    -0x20(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    111b <f+0x1b>
pop    %rbp
ret

x86 assembly (clang, -O2):
<f>:
movd   (%rsi),%xmm1
pxor   %xmm0,%xmm0
punpcklbw %xmm0,%xmm1
punpcklwd %xmm0,%xmm1
movd   (%rdx),%xmm2
punpcklbw %xmm0,%xmm2
punpcklwd %xmm0,%xmm2
paddd  %xmm1,%xmm2
movdqa %xmm2,%xmm3
psrld  $0x1,%xmm3
paddd  %xmm2,%xmm3
psrld  $0x2,%xmm3
movdqa 0xec6(%rip),%xmm1
pand   %xmm1,%xmm3
packuswb %xmm3,%xmm3
packuswb %xmm3,%xmm3
movd   %xmm3,(%rdi)
movdqu %xmm2,(%rcx)
movd   0x4(%rsi),%xmm2
punpcklbw %xmm0,%xmm2
punpcklwd %xmm0,%xmm2
movd   0x4(%rdx),%xmm3
punpcklbw %xmm0,%xmm3
punpcklwd %xmm0,%xmm3
paddd  %xmm2,%xmm3
movdqa %xmm3,%xmm2
psrld  $0x1,%xmm2
paddd  %xmm3,%xmm2
psrld  $0x2,%xmm2
pand   %xmm1,%xmm2
packuswb %xmm2,%xmm2
packuswb %xmm2,%xmm2
movd   %xmm2,0x4(%rdi)
movdqu %xmm3,0x10(%rcx)
movd   0x8(%rsi),%xmm2
punpcklbw %xmm0,%xmm2
punpcklwd %xmm0,%xmm2
movd   0x8(%rdx),%xmm3
punpcklbw %xmm0,%xmm3
punpcklwd %xmm0,%xmm3
paddd  %xmm2,%xmm3
movdqa %xmm3,%xmm2
psrld  $0x1,%xmm2
paddd  %xmm3,%xmm2
psrld  $0x2,%xmm2
pand   %xmm1,%xmm2
packuswb %xmm2,%xmm2
packuswb %xmm2,%xmm2
movd   %xmm2,0x8(%rdi)
movdqu %xmm3,0x20(%rcx)
movd   0xc(%rsi),%xmm2
punpcklbw %xmm0,%xmm2
punpcklwd %xmm0,%xmm2
movd   0xc(%rdx),%xmm3
punpcklbw %xmm0,%xmm3
punpcklwd %xmm0,%xmm3
paddd  %xmm2,%xmm3
movdqa %xmm3,%xmm2
psrld  $0x1,%xmm2
paddd  %xmm3,%xmm2
psrld  $0x2,%xmm2
pand   %xmm1,%xmm2
packuswb %xmm2,%xmm2
packuswb %xmm2,%xmm2
movd   %xmm2,0xc(%rdi)
movdqu %xmm3,0x30(%rcx)
movd   0x10(%rsi),%xmm2
punpcklbw %xmm0,%xmm2
punpcklwd %xmm0,%xmm2
movd   0x10(%rdx),%xmm3
punpcklbw %xmm0,%xmm3
punpcklwd %xmm0,%xmm3
paddd  %xmm2,%xmm3
movdqa %xmm3,%xmm2
psrld  $0x1,%xmm2
paddd  %xmm3,%xmm2
psrld  $0x2,%xmm2
pand   %xmm1,%xmm2
packuswb %xmm2,%xmm2
packuswb %xmm2,%xmm2
movd   %xmm2,0x10(%rdi)
movdqu %xmm3,0x40(%rcx)
movd   0x14(%rsi),%xmm2
punpcklbw %xmm0,%xmm2
punpcklwd %xmm0,%xmm2
movd   0x14(%rdx),%xmm3
punpcklbw %xmm0,%xmm3
punpcklwd %xmm0,%xmm3
paddd  %xmm2,%xmm3
movdqa %xmm3,%xmm2
psrld  $0x1,%xmm2
paddd  %xmm3,%xmm2
psrld  $0x2,%xmm2
pand   %xmm1,%xmm2
packuswb %xmm2,%xmm2
packuswb %xmm2,%xmm2
movd   %xmm2,0x14(%rdi)
movdqu %xmm3,0x50(%rcx)
movd   0x18(%rsi),%xmm2
punpcklbw %xmm0,%xmm2
punpcklwd %xmm0,%xmm2
movd   0x18(%rdx),%xmm3
punpcklbw %xmm0,%xmm3
punpcklwd %xmm0,%xmm3
paddd  %xmm2,%xmm3
movdqa %xmm3,%xmm2
psrld  $0x1,%xmm2
paddd  %xmm3,%xmm2
psrld  $0x2,%xmm2
pand   %xmm1,%xmm2
packuswb %xmm2,%xmm2
packuswb %xmm2,%xmm2
movd   %xmm2,0x18(%rdi)
movdqu %xmm3,0x60(%rcx)
movd   0x1c(%rsi),%xmm2
punpcklbw %xmm0,%xmm2
punpcklwd %xmm0,%xmm2
movd   0x1c(%rdx),%xmm3
punpcklbw %xmm0,%xmm3
punpcklwd %xmm0,%xmm3
paddd  %xmm2,%xmm3
movdqa %xmm3,%xmm2
psrld  $0x1,%xmm2
paddd  %xmm3,%xmm2
psrld  $0x2,%xmm2
pand   %xmm1,%xmm2
packuswb %xmm2,%xmm2
packuswb %xmm2,%xmm2
movd   %xmm2,0x1c(%rdi)
movdqu %xmm3,0x70(%rcx)
movd   0x20(%rsi),%xmm2
punpcklbw %xmm0,%xmm2
punpcklwd %xmm0,%xmm2
movd   0x20(%rdx),%xmm3
punpcklbw %xmm0,%xmm3
punpcklwd %xmm0,%xmm3
paddd  %xmm2,%xmm3
movdqa %xmm3,%xmm2
psrld  $0x1,%xmm2
paddd  %xmm3,%xmm2
psrld  $0x2,%xmm2
pand   %xmm1,%xmm2
packuswb %xmm2,%xmm2
packuswb %xmm2,%xmm2
movd   %xmm2,0x20(%rdi)
movdqu %xmm3,0x80(%rcx)
movd   0x24(%rsi),%xmm2
punpcklbw %xmm0,%xmm2
punpcklwd %xmm0,%xmm2
movd   0x24(%rdx),%xmm3
punpcklbw %xmm0,%xmm3
punpcklwd %xmm0,%xmm3
paddd  %xmm2,%xmm3
movdqa %xmm3,%xmm2
psrld  $0x1,%xmm2
paddd  %xmm3,%xmm2
psrld  $0x2,%xmm2
pand   %xmm1,%xmm2
packuswb %xmm2,%xmm2
packuswb %xmm2,%xmm2
movd   %xmm2,0x24(%rdi)
movdqu %xmm3,0x90(%rcx)
movd   0x28(%rsi),%xmm2
punpcklbw %xmm0,%xmm2
punpcklwd %xmm0,%xmm2
movd   0x28(%rdx),%xmm3
punpcklbw %xmm0,%xmm3
punpcklwd %xmm0,%xmm3
paddd  %xmm2,%xmm3
movdqa %xmm3,%xmm2
psrld  $0x1,%xmm2
paddd  %xmm3,%xmm2
psrld  $0x2,%xmm2
pand   %xmm1,%xmm2
packuswb %xmm2,%xmm2
packuswb %xmm2,%xmm2
movd   %xmm2,0x28(%rdi)
movdqu %xmm3,0xa0(%rcx)
movd   0x2c(%rsi),%xmm2
punpcklbw %xmm0,%xmm2
punpcklwd %xmm0,%xmm2
movd   0x2c(%rdx),%xmm3
punpcklbw %xmm0,%xmm3
punpcklwd %xmm0,%xmm3
paddd  %xmm2,%xmm3
movdqa %xmm3,%xmm0
psrld  $0x1,%xmm0
paddd  %xmm3,%xmm0
psrld  $0x2,%xmm0
pand   %xmm1,%xmm0
packuswb %xmm0,%xmm0
packuswb %xmm0,%xmm0
movd   %xmm0,0x2c(%rdi)
movdqu %xmm3,0xb0(%rcx)
movzbl 0x30(%rsi),%r8d
movzbl 0x30(%rdx),%r9d
add    %r8d,%r9d
mov    %r9d,%eax
shr    %eax
add    %r9d,%eax
shr    $0x2,%eax
mov    %al,0x30(%rdi)
mov    %r9d,0xc0(%rcx)
movzbl 0x31(%rsi),%eax
movzbl 0x31(%rdx),%edx
add    %eax,%edx
mov    %edx,%eax
shr    %eax
add    %edx,%eax
shr    $0x2,%eax
mov    %al,0x31(%rdi)
mov    %edx,0xc4(%rcx)
ret

LLVM IR (-O0):
define void @f(i8* noalias %0, i8* noalias %1, i8* noalias %2, i32* noalias %3) {
%5 = alloca i8*
%6 = alloca i8*
%7 = alloca i8*
%8 = alloca i32*
%9 = alloca i32
%10 = alloca i32
store i8* %0, i8** %5
store i8* %1, i8** %6
store i8* %2, i8** %7
store i32* %3, i32** %8
store i32 0, i32* %9
br label %11
11: ; preds = %43, %4
%12 = load i32, i32* %9
%13 = icmp slt i32 %12, 50
br i1 %13, label %14, label %46
14: ; preds = %11
%15 = load i8*, i8** %6
%16 = load i32, i32* %9
%17 = sext i32 %16 to i64
%18 = getelementptr inbounds i8, i8* %15, i64 %17
%19 = load i8, i8* %18
%20 = zext i8 %19 to i32
%21 = load i8*, i8** %7
%22 = load i32, i32* %9
%23 = sext i32 %22 to i64
%24 = getelementptr inbounds i8, i8* %21, i64 %23
%25 = load i8, i8* %24
%26 = zext i8 %25 to i32
%27 = add nsw i32 %20, %26
store i32 %27, i32* %10
%28 = load i32, i32* %10
%29 = load i32, i32* %10
%30 = ashr i32 %29, 1
%31 = add nsw i32 %28, %30
%32 = ashr i32 %31, 2
%33 = trunc i32 %32 to i8
%34 = load i8*, i8** %5
%35 = load i32, i32* %9
%36 = sext i32 %35 to i64
%37 = getelementptr inbounds i8, i8* %34, i64 %36
store i8 %33, i8* %37
%38 = load i32, i32* %10
%39 = load i32*, i32** %8
%40 = load i32, i32* %9
%41 = sext i32 %40 to i64
%42 = getelementptr inbounds i32, i32* %39, i64 %41
store i32 %38, i32* %42
br label %43
43: ; preds = %14
%44 = load i32, i32* %9
%45 = add nsw i32 %44, 1
store i32 %45, i32* %9
br label %11
46: ; preds = %11
ret void
}

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