void vp8_filter_block2d_bil_first_pass(unsigned char *src_ptr,
                                       unsigned short *output_ptr,
                                       unsigned int src_pixels_per_line,
                                       int pixel_step,
                                       unsigned int output_height,
                                       unsigned int output_width,
                                       const int *vp8_filter) {
  unsigned int i, j;
  for (i = 0; i < output_height; i++) {
    for (j = 0; j < output_width; j++) {
      output_ptr[j] =
          (((int)src_ptr[0] * vp8_filter[0]) +
           ((int)src_ptr[pixel_step] * vp8_filter[1]) + (128 / 2)) >>
          7;
      src_ptr++;
    }
    src_ptr += src_pixels_per_line - output_width;
    output_ptr += output_width;
  }
}


x86 assembly (clang, -O0):
<vp8_filter_block2d_bil_first_pass>:
push   %rbp
mov    %rsp,%rbp
mov    0x10(%rbp),%rax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %ecx,-0x18(%rbp)
mov    %r8d,-0x1c(%rbp)
mov    %r9d,-0x20(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jae    11cb <vp8_filter_block2d_bil_first_pass+0xcb>
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x20(%rbp),%eax
jae    1196 <vp8_filter_block2d_bil_first_pass+0x96>
mov    -0x8(%rbp),%rax
movzbl (%rax),%eax
mov    0x10(%rbp),%rcx
imul   (%rcx),%eax
mov    -0x8(%rbp),%rcx
movslq -0x18(%rbp),%rdx
movzbl (%rcx,%rdx,1),%ecx
mov    0x10(%rbp),%rdx
imul   0x4(%rdx),%ecx
add    %ecx,%eax
add    $0x40,%eax
sar    $0x7,%eax
mov    %ax,%dx
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%ecx
mov    %dx,(%rax,%rcx,2)
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1138 <vp8_filter_block2d_bil_first_pass+0x38>
mov    -0x14(%rbp),%ecx
sub    -0x20(%rbp),%ecx
mov    -0x8(%rbp),%rax
mov    %ecx,%ecx
add    %rcx,%rax
mov    %rax,-0x8(%rbp)
mov    -0x20(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,%ecx
shl    $0x1,%rcx
add    %rcx,%rax
mov    %rax,-0x10(%rbp)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    1125 <vp8_filter_block2d_bil_first_pass+0x25>
pop    %rbp
ret

x86 assembly (clang, -O2):
<vp8_filter_block2d_bil_first_pass>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    %rsi,-0x40(%rsp)
test   %r8d,%r8d
je     162e <vp8_filter_block2d_bil_first_pass+0x52e>
mov    %r9d,%r14d
mov    %r8d,%r10d
mov    0x38(%rsp),%r12
movslq %ecx,%rcx
sub    %r9d,%edx
mov    %r9d,%r8d
lea    (%rcx,%r8,1),%rax
mov    %rax,-0x10(%rsp)
mov    %r8d,%eax
and    $0xfffffff8,%eax
mov    %rax,-0x18(%rsp)
add    $0xfffffffffffffff8,%rax
mov    %rax,-0x20(%rsp)
mov    %rax,%rsi
shr    $0x3,%rsi
add    $0x1,%rsi
mov    %rsi,%rax
mov    %rsi,-0x28(%rsp)
and    $0xfffffffffffffffe,%rsi
mov    %rsi,-0x30(%rsp)
mov    %r8,%rax
neg    %rax
mov    %rax,-0x8(%rsp)
lea    0x8(%rcx),%rax
mov    %rax,-0x38(%rsp)
lea    (%r8,%r8,1),%r13
xor    %r9d,%r9d
pxor   %xmm9,%xmm9
movdqa 0xe72(%rip),%xmm8
mov    -0x40(%rsp),%rsi
mov    %rdx,-0x48(%rsp)
mov    %r14d,-0x54(%rsp)
mov    %r13,-0x50(%rsp)
jmp    11c3 <vp8_filter_block2d_bil_first_pass+0xc3>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    %rdx,%rdi
add    %r13,%rsi
add    $0x1,%r9
cmp    %r10d,%r9d
je     162e <vp8_filter_block2d_bil_first_pass+0x52e>
test   %r14d,%r14d
je     11b0 <vp8_filter_block2d_bil_first_pass+0xb0>
mov    (%r12),%r11d
mov    0x4(%r12),%r15d
cmp    $0x8,%r14d
jae    11f0 <vp8_filter_block2d_bil_first_pass+0xf0>
xor    %ebp,%ebp
test   $0x1,%r8b
je     1576 <vp8_filter_block2d_bil_first_pass+0x476>
jmp    1598 <vp8_filter_block2d_bil_first_pass+0x498>
nopl   0x0(%rax,%rax,1)
mov    %r12,%rax
mov    %r10d,%edx
mov    %r9,%rbp
imul   %r8,%rbp
add    %r8,%rbp
mov    -0x40(%rsp),%rbx
lea    (%rbx,%rbp,2),%rbp
lea    (%rdi,%rcx,1),%r10
mov    -0x10(%rsp),%rbx
add    %rdi,%rbx
lea    (%rdi,%r8,1),%r14
cmp    %rsi,%rbx
seta   %r13b
cmp    %rbp,%r10
setb   %r12b
cmp    %rsi,%r14
seta   %bl
cmp    %rbp,%rdi
setb   %r10b
test   %r12b,%r13b
jne    157b <vp8_filter_block2d_bil_first_pass+0x47b>
and    %r10b,%bl
jne    157b <vp8_filter_block2d_bil_first_pass+0x47b>
movd   %r11d,%xmm1
pshufd $0x0,%xmm1,%xmm4
movd   %r15d,%xmm1
pshufd $0x0,%xmm1,%xmm3
pshufd $0xf5,%xmm4,%xmm5
pshufd $0xf5,%xmm3,%xmm10
cmpq   $0x0,-0x20(%rsp)
mov    %rax,%r12
je     161b <vp8_filter_block2d_bil_first_pass+0x51b>
mov    -0x38(%rsp),%rax
lea    (%rdi,%rax,1),%r13
mov    -0x30(%rsp),%r10
xor    %r14d,%r14d
cs nopw 0x0(%rax,%rax,1)
nop
movq   (%rdi,%r14,1),%xmm6
punpcklbw %xmm9,%xmm6
movdqa %xmm6,%xmm7
punpckhwd %xmm9,%xmm7
punpcklwd %xmm9,%xmm6
movdqa %xmm4,%xmm1
pmuludq %xmm6,%xmm1
pshufd $0xe8,%xmm1,%xmm1
pshufd $0xf5,%xmm6,%xmm6
pmuludq %xmm5,%xmm6
pshufd $0xe8,%xmm6,%xmm6
punpckldq %xmm6,%xmm1
movdqa %xmm4,%xmm6
pmuludq %xmm7,%xmm6
pshufd $0xe8,%xmm6,%xmm6
pshufd $0xf5,%xmm7,%xmm7
pmuludq %xmm5,%xmm7
pshufd $0xe8,%xmm7,%xmm7
punpckldq %xmm7,%xmm6
movq   -0x8(%r13,%r14,1),%xmm0
punpcklbw %xmm9,%xmm0
movdqa %xmm0,%xmm2
punpckhwd %xmm9,%xmm2
punpcklwd %xmm9,%xmm0
movdqa %xmm3,%xmm7
pmuludq %xmm0,%xmm7
pshufd $0xe8,%xmm7,%xmm7
pshufd $0xf5,%xmm0,%xmm0
pmuludq %xmm10,%xmm0
pshufd $0xe8,%xmm0,%xmm0
punpckldq %xmm0,%xmm7
paddd  %xmm1,%xmm7
movdqa %xmm3,%xmm0
pmuludq %xmm2,%xmm0
pshufd $0xe8,%xmm0,%xmm0
pshufd $0xf5,%xmm2,%xmm1
pmuludq %xmm10,%xmm1
pshufd $0xe8,%xmm1,%xmm1
punpckldq %xmm1,%xmm0
paddd  %xmm6,%xmm0
paddd  %xmm8,%xmm7
paddd  %xmm8,%xmm0
pslld  $0x9,%xmm0
psrad  $0x10,%xmm0
pslld  $0x9,%xmm7
psrad  $0x10,%xmm7
packssdw %xmm0,%xmm7
movdqu %xmm7,(%rsi,%r14,2)
movq   0x8(%rdi,%r14,1),%xmm0
punpcklbw %xmm9,%xmm0
movdqa %xmm0,%xmm2
punpckhwd %xmm9,%xmm2
punpcklwd %xmm9,%xmm0
movdqa %xmm4,%xmm1
pmuludq %xmm0,%xmm1
pshufd $0xe8,%xmm1,%xmm1
pshufd $0xf5,%xmm0,%xmm0
pmuludq %xmm5,%xmm0
pshufd $0xe8,%xmm0,%xmm0
punpckldq %xmm0,%xmm1
movdqa %xmm4,%xmm0
pmuludq %xmm2,%xmm0
pshufd $0xe8,%xmm0,%xmm6
pshufd $0xf5,%xmm2,%xmm0
pmuludq %xmm5,%xmm0
pshufd $0xe8,%xmm0,%xmm0
punpckldq %xmm0,%xmm6
movq   0x0(%r13,%r14,1),%xmm0
punpcklbw %xmm9,%xmm0
movdqa %xmm0,%xmm2
punpckhwd %xmm9,%xmm2
punpcklwd %xmm9,%xmm0
movdqa %xmm3,%xmm7
pmuludq %xmm0,%xmm7
pshufd $0xe8,%xmm7,%xmm7
pshufd $0xf5,%xmm0,%xmm0
pmuludq %xmm10,%xmm0
pshufd $0xe8,%xmm0,%xmm0
punpckldq %xmm0,%xmm7
paddd  %xmm1,%xmm7
movdqa %xmm3,%xmm0
pmuludq %xmm2,%xmm0
pshufd $0xe8,%xmm0,%xmm0
pshufd $0xf5,%xmm2,%xmm1
pmuludq %xmm10,%xmm1
pshufd $0xe8,%xmm1,%xmm1
punpckldq %xmm1,%xmm0
paddd  %xmm6,%xmm0
paddd  %xmm8,%xmm7
paddd  %xmm8,%xmm0
pslld  $0x9,%xmm0
psrad  $0x10,%xmm0
pslld  $0x9,%xmm7
psrad  $0x10,%xmm7
packssdw %xmm0,%xmm7
movdqu %xmm7,0x10(%rsi,%r14,2)
add    $0x10,%r14
add    $0xfffffffffffffffe,%r10
jne    1290 <vp8_filter_block2d_bil_first_pass+0x190>
testb  $0x1,-0x28(%rsp)
je     1548 <vp8_filter_block2d_bil_first_pass+0x448>
lea    (%rdi,%r14,1),%rbp
movq   (%rdi,%r14,1),%xmm0
punpcklbw %xmm9,%xmm0
movdqa %xmm0,%xmm1
punpckhwd %xmm9,%xmm1
punpcklwd %xmm9,%xmm0
movdqa %xmm4,%xmm2
pmuludq %xmm0,%xmm2
pshufd $0xe8,%xmm2,%xmm6
pshufd $0xf5,%xmm0,%xmm0
pmuludq %xmm5,%xmm0
pshufd $0xe8,%xmm0,%xmm0
punpckldq %xmm0,%xmm6
pmuludq %xmm1,%xmm4
pshufd $0xe8,%xmm4,%xmm4
pshufd $0xf5,%xmm1,%xmm0
pmuludq %xmm5,%xmm0
pshufd $0xe8,%xmm0,%xmm0
punpckldq %xmm0,%xmm4
movq   (%rcx,%rbp,1),%xmm0
punpcklbw %xmm9,%xmm0
movdqa %xmm0,%xmm1
punpckhwd %xmm9,%xmm1
punpcklwd %xmm9,%xmm0
movdqa %xmm3,%xmm2
pmuludq %xmm0,%xmm2
pshufd $0xe8,%xmm2,%xmm2
pshufd $0xf5,%xmm0,%xmm0
pmuludq %xmm10,%xmm0
pshufd $0xe8,%xmm0,%xmm0
punpckldq %xmm0,%xmm2
pmuludq %xmm1,%xmm3
pshufd $0xe8,%xmm3,%xmm0
pshufd $0xf5,%xmm1,%xmm1
pmuludq %xmm10,%xmm1
pshufd $0xe8,%xmm1,%xmm1
punpckldq %xmm1,%xmm0
paddd  %xmm8,%xmm6
paddd  %xmm2,%xmm6
paddd  %xmm8,%xmm4
paddd  %xmm0,%xmm4
pslld  $0x9,%xmm4
psrad  $0x10,%xmm4
pslld  $0x9,%xmm6
psrad  $0x10,%xmm6
packssdw %xmm4,%xmm6
movdqu %xmm6,(%rsi,%r14,2)
mov    -0x18(%rsp),%rax
add    %rax,%rdi
mov    %rax,%rbp
cmp    %r8,%rax
mov    %edx,%r10d
mov    -0x54(%rsp),%r14d
mov    -0x48(%rsp),%rdx
mov    -0x50(%rsp),%r13
je     11b0 <vp8_filter_block2d_bil_first_pass+0xb0>
xchg   %ax,%ax
test   $0x1,%r8b
jne    1598 <vp8_filter_block2d_bil_first_pass+0x498>
mov    %rbp,%rbx
jmp    15be <vp8_filter_block2d_bil_first_pass+0x4be>
xor    %ebp,%ebp
mov    %edx,%r10d
mov    -0x54(%rsp),%r14d
mov    -0x48(%rsp),%rdx
mov    %rax,%r12
mov    -0x50(%rsp),%r13
test   $0x1,%r8b
je     1576 <vp8_filter_block2d_bil_first_pass+0x476>
movzbl (%rdi),%ebx
imul   %r11d,%ebx
movzbl (%rdi,%rcx,1),%eax
imul   %r15d,%eax
add    %ebx,%eax
add    $0x40,%eax
shr    $0x7,%eax
mov    %ax,(%rsi,%rbp,2)
add    $0x1,%rdi
mov    %rbp,%rbx
or     $0x1,%rbx
not    %rbp
cmp    -0x8(%rsp),%rbp
je     11b0 <vp8_filter_block2d_bil_first_pass+0xb0>
nopl   0x0(%rax)
movzbl (%rdi),%eax
imul   %r11d,%eax
movzbl (%rdi,%rcx,1),%ebp
imul   %r15d,%ebp
add    %ebp,%eax
add    $0x40,%eax
shr    $0x7,%eax
mov    %ax,(%rsi,%rbx,2)
movzbl 0x1(%rdi),%eax
imul   %r11d,%eax
movzbl 0x1(%rdi,%rcx,1),%ebp
imul   %r15d,%ebp
add    %ebp,%eax
add    $0x40,%eax
shr    $0x7,%eax
mov    %ax,0x2(%rsi,%rbx,2)
add    $0x2,%rdi
add    $0x2,%rbx
cmp    %rbx,%r8
jne    15d0 <vp8_filter_block2d_bil_first_pass+0x4d0>
jmp    11b0 <vp8_filter_block2d_bil_first_pass+0xb0>
xor    %r14d,%r14d
testb  $0x1,-0x28(%rsp)
jne    146d <vp8_filter_block2d_bil_first_pass+0x36d>
jmp    1548 <vp8_filter_block2d_bil_first_pass+0x448>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @vp8_filter_block2d_bil_first_pass(i8* %0, i16* %1, i32 %2, i32 %3, i32 %4, i32 %5, i32* %6) {
%8 = alloca i8*
%9 = alloca i16*
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32*
%15 = alloca i32
%16 = alloca i32
store i8* %0, i8** %8
store i16* %1, i16** %9
store i32 %2, i32* %10
store i32 %3, i32* %11
store i32 %4, i32* %12
store i32 %5, i32* %13
store i32* %6, i32** %14
store i32 0, i32* %15
br label %17
17: ; preds = %69, %7
%18 = load i32, i32* %15
%19 = load i32, i32* %12
%20 = icmp ult i32 %18, %19
br i1 %20, label %21, label %72
21: ; preds = %17
store i32 0, i32* %16
br label %22
22: ; preds = %55, %21
%23 = load i32, i32* %16
%24 = load i32, i32* %13
%25 = icmp ult i32 %23, %24
br i1 %25, label %26, label %58
26: ; preds = %22
%27 = load i8*, i8** %8
%28 = getelementptr inbounds i8, i8* %27, i64 0
%29 = load i8, i8* %28
%30 = zext i8 %29 to i32
%31 = load i32*, i32** %14
%32 = getelementptr inbounds i32, i32* %31, i64 0
%33 = load i32, i32* %32
%34 = mul nsw i32 %30, %33
%35 = load i8*, i8** %8
%36 = load i32, i32* %11
%37 = sext i32 %36 to i64
%38 = getelementptr inbounds i8, i8* %35, i64 %37
%39 = load i8, i8* %38
%40 = zext i8 %39 to i32
%41 = load i32*, i32** %14
%42 = getelementptr inbounds i32, i32* %41, i64 1
%43 = load i32, i32* %42
%44 = mul nsw i32 %40, %43
%45 = add nsw i32 %34, %44
%46 = add nsw i32 %45, 64
%47 = ashr i32 %46, 7
%48 = trunc i32 %47 to i16
%49 = load i16*, i16** %9
%50 = load i32, i32* %16
%51 = zext i32 %50 to i64
%52 = getelementptr inbounds i16, i16* %49, i64 %51
store i16 %48, i16* %52
%53 = load i8*, i8** %8
%54 = getelementptr inbounds i8, i8* %53, i32 1
store i8* %54, i8** %8
br label %55
55: ; preds = %26
%56 = load i32, i32* %16
%57 = add i32 %56, 1
store i32 %57, i32* %16
br label %22
58: ; preds = %22
%59 = load i32, i32* %10
%60 = load i32, i32* %13
%61 = sub i32 %59, %60
%62 = load i8*, i8** %8
%63 = zext i32 %61 to i64
%64 = getelementptr inbounds i8, i8* %62, i64 %63
store i8* %64, i8** %8
%65 = load i32, i32* %13
%66 = load i16*, i16** %9
%67 = zext i32 %65 to i64
%68 = getelementptr inbounds i16, i16* %66, i64 %67
store i16* %68, i16** %9
br label %69
69: ; preds = %58
%70 = load i32, i32* %15
%71 = add i32 %70, 1
store i32 %71, i32* %15
br label %17
72: ; preds = %17
ret void
}

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