int BTAC1C2_EncodeQuantUni3(int uni, int step, int pred, int tgt, int tgt2,
                            int lsbit) {
  int uni1, uni2;
  int diff, p0, p1, p2, p3, d0, d1, d2, d3;
  uni1 = uni + 1;
  uni2 = uni - 1;
  if ((uni ^ uni1) & (~7))
    uni1 = uni;
  if ((uni ^ uni2) & (~7))
    uni2 = uni;
  if (lsbit) {
    if (lsbit == 4) {
      uni &= ~1;
      uni1 &= ~1;
      uni2 &= ~1;
      uni |= (uni >> 1) & (uni >> 2) & 1;
      uni1 |= (uni1 >> 1) & (uni1 >> 2) & 1;
      uni2 |= (uni2 >> 1) & (uni2 >> 2) & 1;
    } else if (lsbit & 1) {
      uni |= 1;
      uni1 |= 1;
      uni2 |= 1;
    } else {
      uni &= ~1;
      uni1 &= ~1;
      uni2 &= ~1;
    }
  }
  diff = ((2 * (uni & 7) + 1) * step) / 8;
  if (uni & 8)
    diff = -diff;
  p0 = pred + diff;
  d0 = tgt - p0;
  d0 = d0 ^ (d0 >> 31);
  diff = ((2 * (uni1 & 7) + 1) * step) / 8;
  if (uni1 & 8)
    diff = -diff;
  p1 = pred + diff;
  d1 = tgt - p1;
  d1 = d1 ^ (d1 >> 31);
  diff = ((2 * (uni2 & 7) + 1) * step) / 8;
  if (uni2 & 8)
    diff = -diff;
  p2 = pred + diff;
  d2 = tgt - p2;
  d2 = d2 ^ (d2 >> 31);
  d3 = tgt2 - p0;
  d3 = d3 ^ (d3 >> 31);
  d0 += d3 >> 5;
  d3 = tgt2 - p1;
  d3 = d3 ^ (d3 >> 31);
  d1 += d3 >> 5;
  d3 = tgt2 - p2;
  d3 = d3 ^ (d3 >> 31);
  d2 += d3 >> 5;
  if (d1 < d0)
    uni = uni1;
  if (d2 < d0)
    uni = uni2;
  return (uni);
}


x86 assembly (clang, -O0):
<BTAC1C2_EncodeQuantUni3>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %edx,-0xc(%rbp)
mov    %ecx,-0x10(%rbp)
mov    %r8d,-0x14(%rbp)
mov    %r9d,-0x18(%rbp)
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x4(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x20(%rbp)
mov    -0x4(%rbp),%eax
xor    -0x1c(%rbp),%eax
and    $0xfffffff8,%eax
cmp    $0x0,%eax
je     1142 <BTAC1C2_EncodeQuantUni3+0x42>
mov    -0x4(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x4(%rbp),%eax
xor    -0x20(%rbp),%eax
and    $0xfffffff8,%eax
cmp    $0x0,%eax
je     115a <BTAC1C2_EncodeQuantUni3+0x5a>
mov    -0x4(%rbp),%eax
mov    %eax,-0x20(%rbp)
cmpl   $0x0,-0x18(%rbp)
je     1227 <BTAC1C2_EncodeQuantUni3+0x127>
cmpl   $0x4,-0x18(%rbp)
jne    11d3 <BTAC1C2_EncodeQuantUni3+0xd3>
mov    -0x4(%rbp),%eax
and    $0xfffffffe,%eax
mov    %eax,-0x4(%rbp)
mov    -0x1c(%rbp),%eax
and    $0xfffffffe,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x20(%rbp),%eax
and    $0xfffffffe,%eax
mov    %eax,-0x20(%rbp)
mov    -0x4(%rbp),%eax
sar    $0x1,%eax
mov    -0x4(%rbp),%ecx
sar    $0x2,%ecx
and    %ecx,%eax
and    $0x1,%eax
or     -0x4(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x1c(%rbp),%eax
sar    $0x1,%eax
mov    -0x1c(%rbp),%ecx
sar    $0x2,%ecx
and    %ecx,%eax
and    $0x1,%eax
or     -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x20(%rbp),%eax
sar    $0x1,%eax
mov    -0x20(%rbp),%ecx
sar    $0x2,%ecx
and    %ecx,%eax
and    $0x1,%eax
or     -0x20(%rbp),%eax
mov    %eax,-0x20(%rbp)
jmp    1222 <BTAC1C2_EncodeQuantUni3+0x122>
mov    -0x18(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     1202 <BTAC1C2_EncodeQuantUni3+0x102>
mov    -0x4(%rbp),%eax
or     $0x1,%eax
mov    %eax,-0x4(%rbp)
mov    -0x1c(%rbp),%eax
or     $0x1,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x20(%rbp),%eax
or     $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    121d <BTAC1C2_EncodeQuantUni3+0x11d>
mov    -0x4(%rbp),%eax
and    $0xfffffffe,%eax
mov    %eax,-0x4(%rbp)
mov    -0x1c(%rbp),%eax
and    $0xfffffffe,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x20(%rbp),%eax
and    $0xfffffffe,%eax
mov    %eax,-0x20(%rbp)
jmp    1222 <BTAC1C2_EncodeQuantUni3+0x122>
jmp    1227 <BTAC1C2_EncodeQuantUni3+0x127>
mov    -0x4(%rbp),%eax
and    $0x7,%eax
shl    $0x1,%eax
add    $0x1,%eax
imul   -0x8(%rbp),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %eax,-0x24(%rbp)
mov    -0x4(%rbp),%eax
and    $0x8,%eax
cmp    $0x0,%eax
je     1259 <BTAC1C2_EncodeQuantUni3+0x159>
xor    %eax,%eax
sub    -0x24(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0xc(%rbp),%eax
add    -0x24(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x10(%rbp),%eax
sub    -0x28(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x38(%rbp),%eax
mov    -0x38(%rbp),%ecx
sar    $0x1f,%ecx
xor    %ecx,%eax
mov    %eax,-0x38(%rbp)
mov    -0x1c(%rbp),%eax
and    $0x7,%eax
shl    $0x1,%eax
add    $0x1,%eax
imul   -0x8(%rbp),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %eax,-0x24(%rbp)
mov    -0x1c(%rbp),%eax
and    $0x8,%eax
cmp    $0x0,%eax
je     12ab <BTAC1C2_EncodeQuantUni3+0x1ab>
xor    %eax,%eax
sub    -0x24(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0xc(%rbp),%eax
add    -0x24(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x10(%rbp),%eax
sub    -0x2c(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
mov    -0x3c(%rbp),%ecx
sar    $0x1f,%ecx
xor    %ecx,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x20(%rbp),%eax
and    $0x7,%eax
shl    $0x1,%eax
add    $0x1,%eax
imul   -0x8(%rbp),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %eax,-0x24(%rbp)
mov    -0x20(%rbp),%eax
and    $0x8,%eax
cmp    $0x0,%eax
je     12fd <BTAC1C2_EncodeQuantUni3+0x1fd>
xor    %eax,%eax
sub    -0x24(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0xc(%rbp),%eax
add    -0x24(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x10(%rbp),%eax
sub    -0x30(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x40(%rbp),%eax
mov    -0x40(%rbp),%ecx
sar    $0x1f,%ecx
xor    %ecx,%eax
mov    %eax,-0x40(%rbp)
mov    -0x14(%rbp),%eax
sub    -0x28(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%eax
mov    -0x44(%rbp),%ecx
sar    $0x1f,%ecx
xor    %ecx,%eax
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%eax
sar    $0x5,%eax
add    -0x38(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x14(%rbp),%eax
sub    -0x2c(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%eax
mov    -0x44(%rbp),%ecx
sar    $0x1f,%ecx
xor    %ecx,%eax
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%eax
sar    $0x5,%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x14(%rbp),%eax
sub    -0x30(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%eax
mov    -0x44(%rbp),%ecx
sar    $0x1f,%ecx
xor    %ecx,%eax
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%eax
sar    $0x5,%eax
add    -0x40(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x38(%rbp),%eax
jge    1398 <BTAC1C2_EncodeQuantUni3+0x298>
mov    -0x1c(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0x38(%rbp),%eax
jge    13aa <BTAC1C2_EncodeQuantUni3+0x2aa>
mov    -0x20(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<BTAC1C2_EncodeQuantUni3>:
push   %rbx
mov    %edi,%eax
movd   %edi,%xmm0
pshufd $0x50,%xmm0,%xmm1
movdqa 0xeec(%rip),%xmm2
paddd  %xmm1,%xmm2
movdqa %xmm2,%xmm3
pxor   %xmm1,%xmm3
pxor   0xee8(%rip),%xmm3
movdqa 0xef0(%rip),%xmm0
pcmpgtd %xmm3,%xmm0
pand   %xmm0,%xmm2
pandn  %xmm1,%xmm0
por    %xmm2,%xmm0
test   %r9d,%r9d
je     11ab <BTAC1C2_EncodeQuantUni3+0xab>
cmp    $0x4,%r9d
jne    118d <BTAC1C2_EncodeQuantUni3+0x8d>
mov    %eax,%r9d
and    $0xfffffffe,%r9d
movdqa 0xed6(%rip),%xmm1
pand   %xmm0,%xmm1
mov    %eax,%edi
shr    %edi
shr    $0x2,%eax
and    %edi,%eax
and    $0x1,%eax
or     %r9d,%eax
movdqa %xmm0,%xmm2
psrld  $0x1,%xmm2
psrld  $0x2,%xmm0
pand   %xmm2,%xmm0
pand   0xeb9(%rip),%xmm0
por    %xmm1,%xmm0
jmp    11ab <BTAC1C2_EncodeQuantUni3+0xab>
test   $0x1,%r9b
jne    11a0 <BTAC1C2_EncodeQuantUni3+0xa0>
and    $0xfffffffe,%eax
pand   0xe92(%rip),%xmm0
jmp    11ab <BTAC1C2_EncodeQuantUni3+0xab>
or     $0x1,%eax
por    0xe95(%rip),%xmm0
pshufd $0x55,%xmm0,%xmm1
movd   %xmm1,%r10d
mov    %r10d,%edi
and    $0x7,%edi
lea    (%rdi,%rdi,1),%ebx
add    $0x1,%ebx
imul   %esi,%ebx
lea    0x7(%rbx),%edi
test   %ebx,%ebx
cmovns %ebx,%edi
sar    $0x3,%edi
mov    %edi,%ebx
neg    %ebx
test   $0x8,%r10b
cmove  %edi,%ebx
add    %edx,%ebx
mov    %ecx,%edi
sub    %ebx,%edi
mov    %edi,%r11d
sar    $0x1f,%r11d
xor    %edi,%r11d
movd   %xmm0,%r9d
movd   %eax,%xmm1
punpcklqdq %xmm0,%xmm1
shufps $0xe2,%xmm0,%xmm1
movaps %xmm1,%xmm0
paddd  %xmm1,%xmm0
pand   0xe46(%rip),%xmm0
por    0xe2e(%rip),%xmm0
movd   %esi,%xmm2
pshufd $0xf5,%xmm0,%xmm3
pmuludq %xmm2,%xmm0
pshufd $0xe8,%xmm0,%xmm0
pmuludq %xmm2,%xmm3
pshufd $0xe8,%xmm3,%xmm2
punpckldq %xmm2,%xmm0
movdqa %xmm0,%xmm2
psrad  $0x1f,%xmm2
psrld  $0x1d,%xmm2
paddd  %xmm0,%xmm2
psrad  $0x3,%xmm2
pand   0xe10(%rip),%xmm1
pxor   %xmm0,%xmm0
pcmpeqd %xmm1,%xmm0
pxor   %xmm0,%xmm2
psubd  %xmm2,%xmm0
movd   %edx,%xmm1
pshufd $0x50,%xmm1,%xmm1
paddd  %xmm0,%xmm1
movd   %ecx,%xmm0
pshufd $0x50,%xmm0,%xmm0
psubd  %xmm1,%xmm0
movdqa %xmm0,%xmm2
psrad  $0x1f,%xmm2
pxor   %xmm0,%xmm2
movd   %r8d,%xmm0
sub    %ebx,%r8d
mov    %r8d,%ecx
sar    $0x1f,%ecx
xor    %r8d,%ecx
sar    $0x5,%ecx
add    %r11d,%ecx
pshufd $0x50,%xmm0,%xmm0
psubd  %xmm1,%xmm0
movdqa %xmm0,%xmm1
psrad  $0x1f,%xmm1
pxor   %xmm0,%xmm1
psrad  $0x5,%xmm1
paddd  %xmm2,%xmm1
pshufd $0x55,%xmm1,%xmm0
movd   %xmm0,%edx
cmp    %edx,%ecx
cmovl  %r10d,%eax
movd   %xmm1,%ecx
cmp    %edx,%ecx
cmovl  %r9d,%eax
pop    %rbx
ret

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

LLVM IR (-O2):
define i32 @BTAC1C2_EncodeQuantUni3(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5) {
%7 = insertelement <2 x i32> poison, i32 %0, i64 0
%8 = shufflevector <2 x i32> %7, <2 x i32> poison, <2 x i32> zeroinitializer
%9 = add nsw <2 x i32> %8, <i32 -1, i32 1>
%10 = xor <2 x i32> %9, %8
%11 = icmp ult <2 x i32> %10, <i32 8, i32 8>
%12 = select <2 x i1> %11, <2 x i32> %9, <2 x i32> %8
switch i32 %5, label %26 [
i32 0, label %35
i32 4, label %13
]
13: ; preds = %6
%14 = and i32 %0, -2
%15 = and <2 x i32> %12, <i32 -2, i32 -2>
%16 = lshr i32 %0, 1
%17 = lshr i32 %0, 2
%18 = and i32 %17, 1
%19 = and i32 %18, %16
%20 = or i32 %19, %14
%21 = lshr <2 x i32> %12, <i32 1, i32 1>
%22 = lshr <2 x i32> %12, <i32 2, i32 2>
%23 = and <2 x i32> %22, <i32 1, i32 1>
%24 = and <2 x i32> %23, %21
%25 = or <2 x i32> %24, %15
br label %35
26: ; preds = %6
%27 = and i32 %5, 1
%28 = icmp eq i32 %27, 0
br i1 %28, label %32, label %29
29: ; preds = %26
%30 = or i32 %0, 1
%31 = or <2 x i32> %12, <i32 1, i32 1>
br label %35
32: ; preds = %26
%33 = and i32 %0, -2
%34 = and <2 x i32> %12, <i32 -2, i32 -2>
br label %35
35: ; preds = %6, %13, %32, %29
%36 = phi i32 [ %20, %13 ], [ %30, %29 ], [ %33, %32 ], [ %0, %6 ]
%37 = phi <2 x i32> [ %25, %13 ], [ %31, %29 ], [ %34, %32 ], [ %12, %6 ]
%38 = extractelement <2 x i32> %37, i64 1
%39 = shl i32 %38, 1
%40 = and i32 %39, 14
%41 = or i32 %40, 1
%42 = mul nsw i32 %41, %1
%43 = sdiv i32 %42, 8
%44 = and i32 %38, 8
%45 = icmp eq i32 %44, 0
%46 = sub nsw i32 0, %43
%47 = select i1 %45, i32 %43, i32 %46
%48 = add nsw i32 %47, %2
%49 = sub nsw i32 %3, %48
%50 = ashr i32 %49, 31
%51 = xor i32 %50, %49
%52 = extractelement <2 x i32> %37, i64 0
%53 = insertelement <2 x i32> %37, i32 %36, i64 1
%54 = shl <2 x i32> %53, <i32 1, i32 1>
%55 = and <2 x i32> %54, <i32 14, i32 14>
%56 = or <2 x i32> %55, <i32 1, i32 1>
%57 = insertelement <2 x i32> poison, i32 %1, i64 0
%58 = shufflevector <2 x i32> %57, <2 x i32> poison, <2 x i32> zeroinitializer
%59 = mul nsw <2 x i32> %56, %58
%60 = sdiv <2 x i32> %59, <i32 8, i32 8>
%61 = and <2 x i32> %53, <i32 8, i32 8>
%62 = icmp eq <2 x i32> %61, zeroinitializer
%63 = sub nsw <2 x i32> zeroinitializer, %60
%64 = select <2 x i1> %62, <2 x i32> %60, <2 x i32> %63
%65 = insertelement <2 x i32> poison, i32 %2, i64 0
%66 = shufflevector <2 x i32> %65, <2 x i32> poison, <2 x i32> zeroinitializer
%67 = add nsw <2 x i32> %64, %66
%68 = insertelement <2 x i32> poison, i32 %3, i64 0
%69 = shufflevector <2 x i32> %68, <2 x i32> poison, <2 x i32> zeroinitializer
%70 = sub nsw <2 x i32> %69, %67
%71 = ashr <2 x i32> %70, <i32 31, i32 31>
%72 = xor <2 x i32> %71, %70
%73 = sub nsw i32 %4, %48
%74 = ashr i32 %73, 31
%75 = xor i32 %74, %73
%76 = ashr i32 %75, 5
%77 = add nsw i32 %76, %51
%78 = insertelement <2 x i32> poison, i32 %4, i64 0
%79 = shufflevector <2 x i32> %78, <2 x i32> poison, <2 x i32> zeroinitializer
%80 = sub nsw <2 x i32> %79, %67
%81 = ashr <2 x i32> %80, <i32 31, i32 31>
%82 = xor <2 x i32> %81, %80
%83 = ashr <2 x i32> %82, <i32 5, i32 5>
%84 = add nsw <2 x i32> %83, %72
%85 = extractelement <2 x i32> %84, i64 1
%86 = icmp slt i32 %77, %85
%87 = select i1 %86, i32 %38, i32 %36
%88 = extractelement <2 x i32> %84, i64 0
%89 = icmp slt i32 %88, %85
%90 = select i1 %89, i32 %52, i32 %87
ret i32 %90
}