void mpeg3video_idctcol(short *blk) {
  int x0, x1, x2, x3, x4, x5, x6, x7, x8;
  if (!((x1 = (blk[8 * 4] << 8)) | (x2 = blk[8 * 6]) | (x3 = blk[8 * 2]) |
        (x4 = blk[8 * 1]) | (x5 = blk[8 * 7]) | (x6 = blk[8 * 5]) |
        (x7 = blk[8 * 3]))) {
    blk[8 * 0] = blk[8 * 1] = blk[8 * 2] = blk[8 * 3] = blk[8 * 4] =
        blk[8 * 5] = blk[8 * 6] = blk[8 * 7] = (blk[8 * 0] + 32) >> 6;
    return;
  }
  x0 = (blk[8 * 0] << 8) + 8192;
  x8 = 565 * (x4 + x5) + 4;
  x4 = (x8 + (2841 - 565) * x4) >> 3;
  x5 = (x8 - (2841 + 565) * x5) >> 3;
  x8 = 2408 * (x6 + x7) + 4;
  x6 = (x8 - (2408 - 1609) * x6) >> 3;
  x7 = (x8 - (2408 + 1609) * x7) >> 3;
  x8 = x0 + x1;
  x0 -= x1;
  x1 = 1108 * (x3 + x2) + 4;
  x2 = (x1 - (2676 + 1108) * x2) >> 3;
  x3 = (x1 + (2676 - 1108) * x3) >> 3;
  x1 = x4 + x6;
  x4 -= x6;
  x6 = x5 + x7;
  x5 -= x7;
  x7 = x8 + x3;
  x8 -= x3;
  x3 = x0 + x2;
  x0 -= x2;
  x2 = (181 * (x4 + x5) + 128) >> 8;
  x4 = (181 * (x4 - x5) + 128) >> 8;
  blk[8 * 0] = (x7 + x1) >> 14;
  blk[8 * 1] = (x3 + x2) >> 14;
  blk[8 * 2] = (x0 + x4) >> 14;
  blk[8 * 3] = (x8 + x6) >> 14;
  blk[8 * 4] = (x8 - x6) >> 14;
  blk[8 * 5] = (x0 - x4) >> 14;
  blk[8 * 6] = (x3 - x2) >> 14;
  blk[8 * 7] = (x7 - x1) >> 14;
}


x86 assembly (clang, -O0):
<mpeg3video_idctcol>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    -0x8(%rbp),%rax
movswl 0x40(%rax),%eax
shl    $0x8,%eax
mov    %eax,-0x10(%rbp)
mov    -0x8(%rbp),%rcx
movswl 0x60(%rcx),%ecx
mov    %ecx,-0x14(%rbp)
or     %ecx,%eax
mov    -0x8(%rbp),%rcx
movswl 0x20(%rcx),%ecx
mov    %ecx,-0x18(%rbp)
or     %ecx,%eax
mov    -0x8(%rbp),%rcx
movswl 0x10(%rcx),%ecx
mov    %ecx,-0x1c(%rbp)
or     %ecx,%eax
mov    -0x8(%rbp),%rcx
movswl 0x70(%rcx),%ecx
mov    %ecx,-0x20(%rbp)
or     %ecx,%eax
mov    -0x8(%rbp),%rcx
movswl 0x50(%rcx),%ecx
mov    %ecx,-0x24(%rbp)
or     %ecx,%eax
mov    -0x8(%rbp),%rcx
movswl 0x30(%rcx),%ecx
mov    %ecx,-0x28(%rbp)
or     %ecx,%eax
cmp    $0x0,%eax
jne    11c5 <mpeg3video_idctcol+0xc5>
mov    -0x8(%rbp),%rax
movswl (%rax),%eax
add    $0x20,%eax
sar    $0x6,%eax
mov    %ax,%cx
mov    %cx,-0x2e(%rbp)
mov    -0x8(%rbp),%rax
mov    %cx,0x70(%rax)
mov    -0x8(%rbp),%rax
mov    %cx,0x60(%rax)
mov    -0x8(%rbp),%rax
mov    %cx,0x50(%rax)
mov    -0x8(%rbp),%rax
mov    %cx,0x40(%rax)
mov    -0x8(%rbp),%rax
mov    %cx,0x30(%rax)
mov    -0x8(%rbp),%rax
mov    %cx,0x20(%rax)
mov    -0x8(%rbp),%rax
mov    %cx,0x10(%rax)
mov    -0x8(%rbp),%rax
mov    %cx,(%rax)
jmp    13aa <mpeg3video_idctcol+0x2aa>
mov    -0x8(%rbp),%rax
movswl (%rax),%eax
shl    $0x8,%eax
add    $0x2000,%eax
mov    %eax,-0xc(%rbp)
mov    -0x1c(%rbp),%eax
add    -0x20(%rbp),%eax
imul   $0x235,%eax,%eax
add    $0x4,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
imul   $0x8e4,-0x1c(%rbp),%ecx
add    %ecx,%eax
sar    $0x3,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x2c(%rbp),%eax
imul   $0xd4e,-0x20(%rbp),%ecx
sub    %ecx,%eax
sar    $0x3,%eax
mov    %eax,-0x20(%rbp)
mov    -0x24(%rbp),%eax
add    -0x28(%rbp),%eax
imul   $0x968,%eax,%eax
add    $0x4,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
imul   $0x31f,-0x24(%rbp),%ecx
sub    %ecx,%eax
sar    $0x3,%eax
mov    %eax,-0x24(%rbp)
mov    -0x2c(%rbp),%eax
imul   $0xfb1,-0x28(%rbp),%ecx
sub    %ecx,%eax
sar    $0x3,%eax
mov    %eax,-0x28(%rbp)
mov    -0xc(%rbp),%eax
add    -0x10(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x10(%rbp),%ecx
mov    -0xc(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0xc(%rbp)
mov    -0x18(%rbp),%eax
add    -0x14(%rbp),%eax
imul   $0x454,%eax,%eax
add    $0x4,%eax
mov    %eax,-0x10(%rbp)
mov    -0x10(%rbp),%eax
imul   $0xec8,-0x14(%rbp),%ecx
sub    %ecx,%eax
sar    $0x3,%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%eax
imul   $0x620,-0x18(%rbp),%ecx
add    %ecx,%eax
sar    $0x3,%eax
mov    %eax,-0x18(%rbp)
mov    -0x1c(%rbp),%eax
add    -0x24(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    -0x24(%rbp),%ecx
mov    -0x1c(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x20(%rbp),%eax
add    -0x28(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%ecx
mov    -0x20(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x20(%rbp)
mov    -0x2c(%rbp),%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x18(%rbp),%ecx
mov    -0x2c(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x2c(%rbp)
mov    -0xc(%rbp),%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0xc(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0xc(%rbp)
mov    -0x1c(%rbp),%eax
add    -0x20(%rbp),%eax
imul   $0xb5,%eax,%eax
add    $0x80,%eax
sar    $0x8,%eax
mov    %eax,-0x14(%rbp)
mov    -0x1c(%rbp),%eax
sub    -0x20(%rbp),%eax
imul   $0xb5,%eax,%eax
add    $0x80,%eax
sar    $0x8,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x28(%rbp),%eax
add    -0x10(%rbp),%eax
sar    $0xe,%eax
mov    %ax,%cx
mov    -0x8(%rbp),%rax
mov    %cx,(%rax)
mov    -0x18(%rbp),%eax
add    -0x14(%rbp),%eax
sar    $0xe,%eax
mov    %ax,%cx
mov    -0x8(%rbp),%rax
mov    %cx,0x10(%rax)
mov    -0xc(%rbp),%eax
add    -0x1c(%rbp),%eax
sar    $0xe,%eax
mov    %ax,%cx
mov    -0x8(%rbp),%rax
mov    %cx,0x20(%rax)
mov    -0x2c(%rbp),%eax
add    -0x24(%rbp),%eax
sar    $0xe,%eax
mov    %ax,%cx
mov    -0x8(%rbp),%rax
mov    %cx,0x30(%rax)
mov    -0x2c(%rbp),%eax
sub    -0x24(%rbp),%eax
sar    $0xe,%eax
mov    %ax,%cx
mov    -0x8(%rbp),%rax
mov    %cx,0x40(%rax)
mov    -0xc(%rbp),%eax
sub    -0x1c(%rbp),%eax
sar    $0xe,%eax
mov    %ax,%cx
mov    -0x8(%rbp),%rax
mov    %cx,0x50(%rax)
mov    -0x18(%rbp),%eax
sub    -0x14(%rbp),%eax
sar    $0xe,%eax
mov    %ax,%cx
mov    -0x8(%rbp),%rax
mov    %cx,0x60(%rax)
mov    -0x28(%rbp),%eax
sub    -0x10(%rbp),%eax
sar    $0xe,%eax
mov    %ax,%cx
mov    -0x8(%rbp),%rax
mov    %cx,0x70(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<mpeg3video_idctcol>:
push   %r15
push   %r14
push   %r12
push   %rbx
movswl 0x40(%rdi),%eax
shl    $0x8,%eax
movswl 0x60(%rdi),%r9d
movswl 0x20(%rdi),%r8d
mov    %r9d,%ecx
or     %r8d,%ecx
or     %eax,%ecx
movswl 0x10(%rdi),%edx
movswl 0x70(%rdi),%esi
mov    %edx,%ebx
or     %esi,%ebx
movswl 0x50(%rdi),%r15d
or     %r15d,%ebx
or     %ecx,%ebx
movswl 0x30(%rdi),%r11d
or     %r11d,%ebx
movswl (%rdi),%ecx
je     126e <mpeg3video_idctcol+0x16e>
shl    $0x8,%ecx
lea    0x2000(%rcx),%r10d
lea    (%rsi,%rdx,1),%ebx
imul   $0x235,%ebx,%ebx
imul   $0x8e4,%edx,%edx
add    %ebx,%edx
add    $0x4,%edx
sar    $0x3,%edx
imul   $0xfffff2b2,%esi,%esi
lea    (%rbx,%rsi,1),%r14d
add    $0x4,%r14d
sar    $0x3,%r14d
lea    (%r11,%r15,1),%esi
imul   $0x968,%esi,%esi
imul   $0xfffffce1,%r15d,%ebx
lea    (%rsi,%rbx,1),%r15d
add    $0x4,%r15d
sar    $0x3,%r15d
imul   $0xfffff04f,%r11d,%ebx
lea    (%rsi,%rbx,1),%r12d
add    $0x4,%r12d
sar    $0x3,%r12d
add    %eax,%ecx
add    $0x2000,%ecx
sub    %eax,%r10d
lea    (%r8,%r9,1),%eax
imul   $0x454,%eax,%eax
imul   $0xfffff138,%r9d,%ebx
add    %eax,%ebx
add    $0x4,%ebx
sar    $0x3,%ebx
imul   $0x620,%r8d,%esi
add    %esi,%eax
add    $0x4,%eax
sar    $0x3,%eax
lea    (%r15,%rdx,1),%r8d
sub    %r15d,%edx
lea    (%r12,%r14,1),%r11d
sub    %r12d,%r14d
lea    (%rcx,%rax,1),%r9d
sub    %eax,%ecx
lea    (%r10,%rbx,1),%eax
sub    %ebx,%r10d
lea    (%rdx,%r14,1),%esi
imul   $0xb5,%esi,%ebx
sub    $0xffffff80,%ebx
sar    $0x8,%ebx
sub    %r14d,%edx
imul   $0xb5,%edx,%edx
sub    $0xffffff80,%edx
sar    $0x8,%edx
lea    (%r9,%r8,1),%esi
shr    $0xe,%esi
mov    %si,(%rdi)
lea    (%rax,%rbx,1),%esi
shr    $0xe,%esi
mov    %si,0x10(%rdi)
lea    (%r10,%rdx,1),%esi
shr    $0xe,%esi
mov    %si,0x20(%rdi)
lea    (%rcx,%r11,1),%esi
shr    $0xe,%esi
mov    %si,0x30(%rdi)
sub    %r11d,%ecx
shr    $0xe,%ecx
mov    %cx,0x40(%rdi)
sub    %edx,%r10d
shr    $0xe,%r10d
mov    %r10w,0x50(%rdi)
sub    %ebx,%eax
shr    $0xe,%eax
mov    %ax,0x60(%rdi)
sub    %r8d,%r9d
shr    $0xe,%r9d
mov    %r9w,0x70(%rdi)
jmp    1293 <mpeg3video_idctcol+0x193>
add    $0x20,%ecx
shr    $0x6,%ecx
mov    %cx,0x70(%rdi)
mov    %cx,0x60(%rdi)
mov    %cx,0x50(%rdi)
mov    %cx,0x40(%rdi)
mov    %cx,0x30(%rdi)
mov    %cx,0x20(%rdi)
mov    %cx,0x10(%rdi)
mov    %cx,(%rdi)
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
ret

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

LLVM IR (-O2):
define void @mpeg3video_idctcol(i16* nocapture %0) {
%2 = getelementptr inbounds i16, i16* %0, i64 32
%3 = load i16, i16* %2
%4 = sext i16 %3 to i32
%5 = shl nsw i32 %4, 8
%6 = getelementptr inbounds i16, i16* %0, i64 48
%7 = load i16, i16* %6
%8 = sext i16 %7 to i32
%9 = or i32 %5, %8
%10 = getelementptr inbounds i16, i16* %0, i64 16
%11 = load i16, i16* %10
%12 = sext i16 %11 to i32
%13 = or i32 %9, %12
%14 = getelementptr inbounds i16, i16* %0, i64 8
%15 = load i16, i16* %14
%16 = sext i16 %15 to i32
%17 = or i32 %13, %16
%18 = getelementptr inbounds i16, i16* %0, i64 56
%19 = load i16, i16* %18
%20 = sext i16 %19 to i32
%21 = or i32 %17, %20
%22 = getelementptr inbounds i16, i16* %0, i64 40
%23 = load i16, i16* %22
%24 = sext i16 %23 to i32
%25 = or i32 %21, %24
%26 = getelementptr inbounds i16, i16* %0, i64 24
%27 = load i16, i16* %26
%28 = sext i16 %27 to i32
%29 = or i32 %25, %28
%30 = icmp eq i32 %29, 0
%31 = load i16, i16* %0
%32 = sext i16 %31 to i32
br i1 %30, label %33, label %37
33: ; preds = %1
%34 = add nsw i32 %32, 32
%35 = ashr i32 %34, 6
%36 = trunc i32 %35 to i16
store i16 %36, i16* %18
store i16 %36, i16* %6
store i16 %36, i16* %22
store i16 %36, i16* %2
store i16 %36, i16* %26
store i16 %36, i16* %10
store i16 %36, i16* %14
store i16 %36, i16* %0
br label %109
37: ; preds = %1
%38 = shl nsw i32 %32, 8
%39 = add nsw i32 %38, 8192
%40 = add nsw i32 %20, %16
%41 = mul nsw i32 %40, 565
%42 = add nsw i32 %41, 4
%43 = mul nsw i32 %16, 2276
%44 = add nsw i32 %42, %43
%45 = ashr i32 %44, 3
%46 = mul nsw i32 %20, -3406
%47 = add nsw i32 %42, %46
%48 = ashr i32 %47, 3
%49 = add nsw i32 %28, %24
%50 = mul nsw i32 %49, 2408
%51 = or i32 %50, 4
%52 = mul nsw i32 %24, -799
%53 = add nsw i32 %51, %52
%54 = ashr i32 %53, 3
%55 = mul nsw i32 %28, -4017
%56 = add nsw i32 %51, %55
%57 = ashr i32 %56, 3
%58 = add nsw i32 %39, %5
%59 = sub nsw i32 %39, %5
%60 = add nsw i32 %12, %8
%61 = mul nsw i32 %60, 1108
%62 = add nsw i32 %61, 4
%63 = mul nsw i32 %8, -3784
%64 = add nsw i32 %62, %63
%65 = ashr i32 %64, 3
%66 = mul nsw i32 %12, 1568
%67 = add nsw i32 %62, %66
%68 = ashr i32 %67, 3
%69 = add nsw i32 %54, %45
%70 = sub nsw i32 %45, %54
%71 = add nsw i32 %57, %48
%72 = sub nsw i32 %48, %57
%73 = add nsw i32 %58, %68
%74 = sub nsw i32 %58, %68
%75 = add nsw i32 %59, %65
%76 = sub nsw i32 %59, %65
%77 = add nsw i32 %70, %72
%78 = mul nsw i32 %77, 181
%79 = add nsw i32 %78, 128
%80 = ashr i32 %79, 8
%81 = sub nsw i32 %70, %72
%82 = mul nsw i32 %81, 181
%83 = add nsw i32 %82, 128
%84 = ashr i32 %83, 8
%85 = add nsw i32 %73, %69
%86 = lshr i32 %85, 14
%87 = trunc i32 %86 to i16
store i16 %87, i16* %0
%88 = add nsw i32 %75, %80
%89 = lshr i32 %88, 14
%90 = trunc i32 %89 to i16
store i16 %90, i16* %14
%91 = add nsw i32 %76, %84
%92 = lshr i32 %91, 14
%93 = trunc i32 %92 to i16
store i16 %93, i16* %10
%94 = add nsw i32 %74, %71
%95 = lshr i32 %94, 14
%96 = trunc i32 %95 to i16
store i16 %96, i16* %26
%97 = sub nsw i32 %74, %71
%98 = lshr i32 %97, 14
%99 = trunc i32 %98 to i16
store i16 %99, i16* %2
%100 = sub nsw i32 %76, %84
%101 = lshr i32 %100, 14
%102 = trunc i32 %101 to i16
store i16 %102, i16* %22
%103 = sub nsw i32 %75, %80
%104 = lshr i32 %103, 14
%105 = trunc i32 %104 to i16
store i16 %105, i16* %6
%106 = sub nsw i32 %73, %69
%107 = lshr i32 %106, 14
%108 = trunc i32 %107 to i16
store i16 %108, i16* %18
br label %109
109: ; preds = %37, %33
ret void
}