void taa_h264_inverse_hadamard_and_dequant_4x4(short *block, int qp) {
  int tmp0, tmp1, tmp2, tmp3;
  static const int dequant_coef_dc[52] = {
      10 << 0, 11 << 0, 13 << 0, 14 << 0, 16 << 0, 18 << 0, 10 << 1, 11 << 1,
      13 << 1, 14 << 1, 16 << 1, 18 << 1, 10 << 2, 11 << 2, 13 << 2, 14 << 2,
      16 << 2, 18 << 2, 10 << 3, 11 << 3, 13 << 3, 14 << 3, 16 << 3, 18 << 3,
      10 << 4, 11 << 4, 13 << 4, 14 << 4, 16 << 4, 18 << 4, 10 << 5, 11 << 5,
      13 << 5, 14 << 5, 16 << 5, 18 << 5, 10 << 6, 11 << 6, 13 << 6, 14 << 6,
      16 << 6, 18 << 6, 10 << 7, 11 << 7, 13 << 7, 14 << 7, 16 << 7, 18 << 7,
      10 << 8, 11 << 8, 13 << 8, 14 << 8};
  int dqc = dequant_coef_dc[qp];
  for (int i = 0; i < 4; i++) {
    tmp0 = block[i * 4 + 0] + block[i * 4 + 2];
    tmp1 = block[i * 4 + 0] - block[i * 4 + 2];
    tmp2 = block[i * 4 + 1] - block[i * 4 + 3];
    tmp3 = block[i * 4 + 1] + block[i * 4 + 3];
    block[i * 4 + 0] = (short)(tmp0 + tmp3);
    block[i * 4 + 1] = (short)(tmp1 + tmp2);
    block[i * 4 + 2] = (short)(tmp1 - tmp2);
    block[i * 4 + 3] = (short)(tmp0 - tmp3);
  }
  for (int i = 0; i < 4; i++) {
    tmp0 = block[0 * 4 + i] + block[2 * 4 + i];
    tmp1 = block[0 * 4 + i] - block[2 * 4 + i];
    tmp2 = block[1 * 4 + i] - block[3 * 4 + i];
    tmp3 = block[1 * 4 + i] + block[3 * 4 + i];
    block[0 * 4 + i] = (short)(((tmp0 + tmp3) * dqc + 2) >> 2);
    block[1 * 4 + i] = (short)(((tmp1 + tmp2) * dqc + 2) >> 2);
    block[2 * 4 + i] = (short)(((tmp1 - tmp2) * dqc + 2) >> 2);
    block[3 * 4 + i] = (short)(((tmp0 - tmp3) * dqc + 2) >> 2);
  }
}


x86 assembly (clang, -O0):
<taa_h264_inverse_hadamard_and_dequant_4x4>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
movslq -0xc(%rbp),%rcx
lea    0xeea(%rip),%rax
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x20(%rbp)
movl   $0x0,-0x24(%rbp)
cmpl   $0x4,-0x24(%rbp)
jge    1263 <taa_h264_inverse_hadamard_and_dequant_4x4+0x163>
mov    -0x8(%rbp),%rax
mov    -0x24(%rbp),%ecx
shl    $0x2,%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
movswl (%rax,%rcx,2),%eax
mov    -0x8(%rbp),%rcx
mov    -0x24(%rbp),%edx
shl    $0x2,%edx
add    $0x2,%edx
movslq %edx,%rdx
movswl (%rcx,%rdx,2),%ecx
add    %ecx,%eax
mov    %eax,-0x10(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x24(%rbp),%ecx
shl    $0x2,%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
movswl (%rax,%rcx,2),%eax
mov    -0x8(%rbp),%rcx
mov    -0x24(%rbp),%edx
shl    $0x2,%edx
add    $0x2,%edx
movslq %edx,%rdx
movswl (%rcx,%rdx,2),%ecx
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x24(%rbp),%ecx
shl    $0x2,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movswl (%rax,%rcx,2),%eax
mov    -0x8(%rbp),%rcx
mov    -0x24(%rbp),%edx
shl    $0x2,%edx
add    $0x3,%edx
movslq %edx,%rdx
movswl (%rcx,%rdx,2),%ecx
sub    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x24(%rbp),%ecx
shl    $0x2,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movswl (%rax,%rcx,2),%eax
mov    -0x8(%rbp),%rcx
mov    -0x24(%rbp),%edx
shl    $0x2,%edx
add    $0x3,%edx
movslq %edx,%rdx
movswl (%rcx,%rdx,2),%ecx
add    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x10(%rbp),%eax
add    -0x1c(%rbp),%eax
mov    %ax,%dx
mov    -0x8(%rbp),%rax
mov    -0x24(%rbp),%ecx
shl    $0x2,%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
mov    %dx,(%rax,%rcx,2)
mov    -0x14(%rbp),%eax
add    -0x18(%rbp),%eax
mov    %ax,%dx
mov    -0x8(%rbp),%rax
mov    -0x24(%rbp),%ecx
shl    $0x2,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    %dx,(%rax,%rcx,2)
mov    -0x14(%rbp),%eax
sub    -0x18(%rbp),%eax
mov    %ax,%dx
mov    -0x8(%rbp),%rax
mov    -0x24(%rbp),%ecx
shl    $0x2,%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
mov    %dx,(%rax,%rcx,2)
mov    -0x10(%rbp),%eax
sub    -0x1c(%rbp),%eax
mov    %ax,%dx
mov    -0x8(%rbp),%rax
mov    -0x24(%rbp),%ecx
shl    $0x2,%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
mov    %dx,(%rax,%rcx,2)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    1123 <taa_h264_inverse_hadamard_and_dequant_4x4+0x23>
movl   $0x0,-0x28(%rbp)
cmpl   $0x4,-0x28(%rbp)
jge    13ae <taa_h264_inverse_hadamard_and_dequant_4x4+0x2ae>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
movswl (%rax,%rcx,2),%eax
mov    -0x8(%rbp),%rcx
mov    -0x28(%rbp),%edx
add    $0x8,%edx
movslq %edx,%rdx
movswl (%rcx,%rdx,2),%ecx
add    %ecx,%eax
mov    %eax,-0x10(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
movswl (%rax,%rcx,2),%eax
mov    -0x8(%rbp),%rcx
mov    -0x28(%rbp),%edx
add    $0x8,%edx
movslq %edx,%rdx
movswl (%rcx,%rdx,2),%ecx
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
movswl (%rax,%rcx,2),%eax
mov    -0x8(%rbp),%rcx
mov    -0x28(%rbp),%edx
add    $0xc,%edx
movslq %edx,%rdx
movswl (%rcx,%rdx,2),%ecx
sub    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
movswl (%rax,%rcx,2),%eax
mov    -0x8(%rbp),%rcx
mov    -0x28(%rbp),%edx
add    $0xc,%edx
movslq %edx,%rdx
movswl (%rcx,%rdx,2),%ecx
add    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x10(%rbp),%eax
add    -0x1c(%rbp),%eax
imul   -0x20(%rbp),%eax
add    $0x2,%eax
sar    $0x2,%eax
mov    %ax,%dx
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
mov    %dx,(%rax,%rcx,2)
mov    -0x14(%rbp),%eax
add    -0x18(%rbp),%eax
imul   -0x20(%rbp),%eax
add    $0x2,%eax
sar    $0x2,%eax
mov    %ax,%dx
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
mov    %dx,(%rax,%rcx,2)
mov    -0x14(%rbp),%eax
sub    -0x18(%rbp),%eax
imul   -0x20(%rbp),%eax
add    $0x2,%eax
sar    $0x2,%eax
mov    %ax,%dx
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0x8,%ecx
movslq %ecx,%rcx
mov    %dx,(%rax,%rcx,2)
mov    -0x10(%rbp),%eax
sub    -0x1c(%rbp),%eax
imul   -0x20(%rbp),%eax
add    $0x2,%eax
sar    $0x2,%eax
mov    %ax,%dx
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0xc,%ecx
movslq %ecx,%rcx
mov    %dx,(%rax,%rcx,2)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    126a <taa_h264_inverse_hadamard_and_dequant_4x4+0x16a>
pop    %rbp
ret

x86 assembly (clang, -O2):
<taa_h264_inverse_hadamard_and_dequant_4x4>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
movslq %esi,%rax
lea    0xeec(%rip),%rcx
mov    (%rcx,%rax,4),%eax
movzwl (%rdi),%ecx
movzwl 0x4(%rdi),%edx
lea    (%rdx,%rcx,1),%esi
sub    %edx,%ecx
movzwl 0x2(%rdi),%edx
movzwl 0x6(%rdi),%ebp
mov    %edx,%ebx
sub    %ebp,%ebx
add    %edx,%ebp
lea    (%rsi,%rbp,1),%r9d
lea    (%rbx,%rcx,1),%edx
mov    %dx,0x2(%rdi)
sub    %ebx,%ecx
mov    %cx,0x4(%rdi)
sub    %ebp,%esi
mov    %si,0x6(%rdi)
movzwl 0x8(%rdi),%ecx
movzwl 0xc(%rdi),%edx
lea    (%rdx,%rcx,1),%esi
sub    %edx,%ecx
movzwl 0xa(%rdi),%edx
movzwl 0xe(%rdi),%ebp
mov    %edx,%ebx
sub    %ebp,%ebx
add    %edx,%ebp
lea    (%rsi,%rbp,1),%r11d
lea    (%rbx,%rcx,1),%r8d
mov    %r8w,0xa(%rdi)
sub    %ebx,%ecx
mov    %cx,0xc(%rdi)
sub    %ebp,%esi
mov    %si,0xe(%rdi)
movzwl 0x10(%rdi),%edx
movzwl 0x14(%rdi),%ecx
lea    (%rcx,%rdx,1),%esi
sub    %ecx,%edx
movzwl 0x12(%rdi),%ecx
movzwl 0x16(%rdi),%ebp
mov    %ecx,%ebx
sub    %ebp,%ebx
add    %ecx,%ebp
lea    (%rsi,%rbp,1),%r12d
lea    (%rbx,%rdx,1),%r10d
sub    %ebx,%edx
mov    %dx,0x14(%rdi)
sub    %ebp,%esi
mov    %si,0x16(%rdi)
movzwl 0x18(%rdi),%esi
movzwl 0x1c(%rdi),%ebx
lea    (%rbx,%rsi,1),%r15d
sub    %ebx,%esi
movzwl 0x1a(%rdi),%ebx
movzwl 0x1e(%rdi),%ebp
mov    %ebx,%ecx
sub    %ebp,%ecx
add    %ebx,%ebp
lea    (%r15,%rbp,1),%r13d
lea    (%rcx,%rsi,1),%r14d
sub    %ecx,%esi
sub    %ebp,%r15d
mov    %r15w,0x1e(%rdi)
movswl %r9w,%ebp
movswl %r12w,%ecx
lea    (%rcx,%rbp,1),%ebx
sub    %ecx,%ebp
movswl %r11w,%ecx
movswl %r13w,%r9d
mov    %ecx,%r11d
sub    %r9d,%r11d
add    %ecx,%r9d
lea    (%r9,%rbx,1),%ecx
imul   %eax,%ecx
add    $0x2,%ecx
shr    $0x2,%ecx
mov    %cx,(%rdi)
lea    (%r11,%rbp,1),%ecx
imul   %eax,%ecx
add    $0x2,%ecx
shr    $0x2,%ecx
mov    %cx,0x8(%rdi)
sub    %r11d,%ebp
imul   %eax,%ebp
add    $0x2,%ebp
shr    $0x2,%ebp
mov    %bp,0x10(%rdi)
sub    %r9d,%ebx
imul   %eax,%ebx
add    $0x2,%ebx
shr    $0x2,%ebx
mov    %bx,0x18(%rdi)
movswl 0x2(%rdi),%ebp
movswl %r10w,%ecx
lea    (%rcx,%rbp,1),%ebx
sub    %ecx,%ebp
movswl %r8w,%ecx
movswl %r14w,%r8d
mov    %ecx,%r9d
sub    %r8d,%r9d
add    %ecx,%r8d
lea    (%r8,%rbx,1),%ecx
imul   %eax,%ecx
add    $0x2,%ecx
shr    $0x2,%ecx
mov    %cx,0x2(%rdi)
lea    (%r9,%rbp,1),%ecx
imul   %eax,%ecx
add    $0x2,%ecx
shr    $0x2,%ecx
mov    %cx,0xa(%rdi)
sub    %r9d,%ebp
imul   %eax,%ebp
add    $0x2,%ebp
shr    $0x2,%ebp
mov    %bp,0x12(%rdi)
sub    %r8d,%ebx
imul   %eax,%ebx
add    $0x2,%ebx
shr    $0x2,%ebx
mov    %bx,0x1a(%rdi)
movswl 0x4(%rdi),%ebp
movswl %dx,%ecx
lea    (%rcx,%rbp,1),%edx
sub    %ecx,%ebp
movswl 0xc(%rdi),%ebx
movswl %si,%ecx
mov    %ebx,%esi
sub    %ecx,%esi
add    %ebx,%ecx
lea    (%rcx,%rdx,1),%ebx
imul   %eax,%ebx
add    $0x2,%ebx
shr    $0x2,%ebx
mov    %bx,0x4(%rdi)
lea    (%rsi,%rbp,1),%ebx
imul   %eax,%ebx
add    $0x2,%ebx
shr    $0x2,%ebx
mov    %bx,0xc(%rdi)
sub    %esi,%ebp
imul   %eax,%ebp
add    $0x2,%ebp
shr    $0x2,%ebp
mov    %bp,0x14(%rdi)
sub    %ecx,%edx
imul   %eax,%edx
add    $0x2,%edx
shr    $0x2,%edx
mov    %dx,0x1c(%rdi)
movswl 0x6(%rdi),%esi
movswl 0x16(%rdi),%ecx
lea    (%rcx,%rsi,1),%edx
sub    %ecx,%esi
movswl 0xe(%rdi),%ebp
movswl %r15w,%ecx
mov    %ebp,%ebx
sub    %ecx,%ebx
add    %ebp,%ecx
lea    (%rcx,%rdx,1),%ebp
imul   %eax,%ebp
add    $0x2,%ebp
shr    $0x2,%ebp
mov    %bp,0x6(%rdi)
lea    (%rbx,%rsi,1),%ebp
imul   %eax,%ebp
add    $0x2,%ebp
shr    $0x2,%ebp
mov    %bp,0xe(%rdi)
sub    %ebx,%esi
imul   %eax,%esi
add    $0x2,%esi
shr    $0x2,%esi
mov    %si,0x16(%rdi)
sub    %ecx,%edx
imul   %eax,%edx
add    $0x2,%edx
shr    $0x2,%edx
mov    %dx,0x1e(%rdi)
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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