#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ audio_ext_format(int);
int /*<<< orphan*/ audio_format(int);
int /*<<< orphan*/ mpeg_h_3d_audio_level(unsigned char const);
void cta_audio_block(const unsigned char *x, unsigned int length) {
  int i, format, ext_format = 0;
  if (length % 3) {
    (void)("Broken CTA audio block length %d\n", length);
    return;
  }
  for (i = 0; i < length; i += 3) {
    format = (x[i] & 0x78) >> 3;
    ext_format = (x[i + 2] & 0xf8) >> 3;
    if (format != 15)
      (void)("    %s, max channels %d\n", audio_format(format),
             (x[i] & 0x07) + 1);
    else if (ext_format == 11)
      (void)("    %s, MPEG-H 3D Audio Level: %s\n",
             audio_ext_format(ext_format), mpeg_h_3d_audio_level(x[i] & 0x07));
    else if (ext_format == 13)
      (void)("    %s, max channels %d\n", audio_ext_format(ext_format),
             (((x[i + 1] & 0x80) >> 3) | ((x[i] & 0x80) >> 4) | (x[i] & 0x07)) +
                 1);
    else
      (void)("    %s, max channels %d\n", audio_ext_format(ext_format),
             (x[i] & 0x07) + 1);
    (void)("      Supported sample rates (kHz):%s%s%s%s%s%s%s\n",
           (x[i + 1] & 0x40) ? " 192" : "", (x[i + 1] & 0x20) ? " 176.4" : "",
           (x[i + 1] & 0x10) ? " 96" : "", (x[i + 1] & 0x08) ? " 88.2" : "",
           (x[i + 1] & 0x04) ? " 48" : "", (x[i + 1] & 0x02) ? " 44.1" : "",
           (x[i + 1] & 0x01) ? " 32" : "");
    if (format == 1 || ext_format == 13) {
      (void)("      Supported sample sizes (bits):%s%s%s\n",
             (x[i + 2] & 0x04) ? " 24" : "", (x[i + 2] & 0x02) ? " 20" : "",
             (x[i + 2] & 0x01) ? " 16" : "");
    } else if (format <= 8) {
      (void)("      Maximum bit rate: %d kb/s\n", x[i + 2] * 8);
    } else if (format == 14) {
      (void)("      Profile: %d\n", x[i + 2] & 7);
    } else if (ext_format == 11 && (x[i + 2] & 1)) {
      (void)("      Supports MPEG-H 3D Audio Low Complexity Profile\n");
    } else if ((ext_format >= 4 && ext_format <= 6) || ext_format == 8 ||
               ext_format == 10) {
      (void)("      AAC audio frame lengths:%s%s\n",
             (x[i + 2] & 4) ? " 1024_TL" : "", (x[i + 2] & 2) ? " 960_TL" : "");
      if (ext_format >= 8 && (x[i + 2] & 1))
        (void)("      Supports %s signaled MPEG Surround data\n",
               (x[i + 2] & 1) ? "implicitly and explicitly"
                              : "only implicitly");
      if (ext_format == 6 && (x[i + 2] & 1))
        (void)("      Supports 22.2ch System H\n");
    }
  }
}


x86 assembly (clang, -O0):
<cta_audio_block>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
movl   $0x0,-0x18(%rbp)
mov    -0xc(%rbp),%eax
mov    $0x3,%ecx
xor    %edx,%edx
div    %ecx
cmp    $0x0,%edx
je     1160 <cta_audio_block+0x30>
jmp    131c <cta_audio_block+0x1ec>
movl   $0x0,-0x10(%rbp)
mov    -0x10(%rbp),%eax
cmp    -0xc(%rbp),%eax
jae    131c <cta_audio_block+0x1ec>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
and    $0x78,%eax
sar    $0x3,%eax
mov    %eax,-0x14(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%eax
and    $0xf8,%eax
sar    $0x3,%eax
mov    %eax,-0x18(%rbp)
cmpl   $0xf,-0x14(%rbp)
je     11bb <cta_audio_block+0x8b>
mov    -0x14(%rbp),%edi
call   1040 <audio_format@plt>
jmp    1212 <cta_audio_block+0xe2>
cmpl   $0xb,-0x18(%rbp)
jne    11e9 <cta_audio_block+0xb9>
mov    -0x18(%rbp),%edi
call   1050 <audio_ext_format@plt>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
and    $0x7,%eax
movzbl %al,%edi
call   1030 <mpeg_h_3d_audio_level@plt>
jmp    120d <cta_audio_block+0xdd>
cmpl   $0xd,-0x18(%rbp)
jne    1200 <cta_audio_block+0xd0>
mov    -0x18(%rbp),%edi
call   1050 <audio_ext_format@plt>
jmp    1208 <cta_audio_block+0xd8>
mov    -0x18(%rbp),%edi
call   1050 <audio_ext_format@plt>
jmp    120d <cta_audio_block+0xdd>
jmp    1212 <cta_audio_block+0xe2>
cmpl   $0x1,-0x14(%rbp)
je     1226 <cta_audio_block+0xf6>
cmpl   $0xd,-0x18(%rbp)
jne    122b <cta_audio_block+0xfb>
jmp    1309 <cta_audio_block+0x1d9>
cmpl   $0x8,-0x14(%rbp)
jg     123a <cta_audio_block+0x10a>
jmp    1304 <cta_audio_block+0x1d4>
cmpl   $0xe,-0x14(%rbp)
jne    1249 <cta_audio_block+0x119>
jmp    12ff <cta_audio_block+0x1cf>
cmpl   $0xb,-0x18(%rbp)
jne    1275 <cta_audio_block+0x145>
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     1275 <cta_audio_block+0x145>
jmp    12fa <cta_audio_block+0x1ca>
cmpl   $0x4,-0x18(%rbp)
jl     1289 <cta_audio_block+0x159>
cmpl   $0x6,-0x18(%rbp)
jle    129d <cta_audio_block+0x16d>
cmpl   $0x8,-0x18(%rbp)
je     129d <cta_audio_block+0x16d>
cmpl   $0xa,-0x18(%rbp)
jne    12f5 <cta_audio_block+0x1c5>
cmpl   $0x8,-0x18(%rbp)
jl     12c4 <cta_audio_block+0x194>
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     12c4 <cta_audio_block+0x194>
cmpl   $0x6,-0x18(%rbp)
jne    12f0 <cta_audio_block+0x1c0>
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     12f0 <cta_audio_block+0x1c0>
jmp    12f0 <cta_audio_block+0x1c0>
jmp    12f5 <cta_audio_block+0x1c5>
jmp    12fa <cta_audio_block+0x1ca>
jmp    12ff <cta_audio_block+0x1cf>
jmp    1304 <cta_audio_block+0x1d4>
jmp    1309 <cta_audio_block+0x1d9>
jmp    130e <cta_audio_block+0x1de>
mov    -0x10(%rbp),%eax
add    $0x3,%eax
mov    %eax,-0x10(%rbp)
jmp    1167 <cta_audio_block+0x37>
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<cta_audio_block>:
push   %r15
push   %r14
push   %rbx
imul   $0xaaaaaaab,%esi,%eax
cmp    $0x55555555,%eax
ja     11a9 <cta_audio_block+0x79>
test   %esi,%esi
je     11a9 <cta_audio_block+0x79>
mov    %rdi,%r15
mov    %esi,%r14d
xor    %ebx,%ebx
jmp    115e <cta_audio_block+0x2e>
call   1040 <audio_format@plt>
add    $0x3,%rbx
cmp    %r14,%rbx
jae    11a9 <cta_audio_block+0x79>
movzbl (%r15,%rbx,1),%edi
shr    $0x3,%edi
and    $0xf,%edi
cmp    $0xf,%dil
jne    1150 <cta_audio_block+0x20>
movzbl 0x2(%r15,%rbx,1),%edi
shr    $0x3,%edi
cmp    $0xd,%dil
je     119d <cta_audio_block+0x6d>
cmp    $0xb,%dil
jne    11a2 <cta_audio_block+0x72>
mov    $0xb,%edi
call   1050 <audio_ext_format@plt>
movzbl (%r15,%rbx,1),%edi
and    $0x7,%edi
call   1030 <mpeg_h_3d_audio_level@plt>
jmp    1155 <cta_audio_block+0x25>
mov    $0xd,%edi
call   1050 <audio_ext_format@plt>
jmp    1155 <cta_audio_block+0x25>
pop    %rbx
pop    %r14
pop    %r15
ret

LLVM IR (-O0):
@.str = [34 x i8] c"Broken CTA audio block length %d\0A\00"
@.str.1 = [25 x i8] c" %s, max channels %d\0A\00"
@.str.2 = [35 x i8] c" %s, MPEG-H 3D Audio Level: %s\0A\00"
@.str.3 = [51 x i8] c" Supported sample rates (kHz):%s%s%s%s%s%s%s\0A\00"
@.str.4 = [5 x i8] c" 192\00"
@.str.5 = [1 x i8] zeroinitializer
@.str.6 = [7 x i8] c" 176.4\00"
@.str.7 = [4 x i8] c" 96\00"
@.str.8 = [6 x i8] c" 88.2\00"
@.str.9 = [4 x i8] c" 48\00"
@.str.10 = [6 x i8] c" 44.1\00"
@.str.11 = [4 x i8] c" 32\00"
@.str.12 = [44 x i8] c" Supported sample sizes (bits):%s%s%s\0A\00"
@.str.13 = [4 x i8] c" 24\00"
@.str.14 = [4 x i8] c" 20\00"
@.str.15 = [4 x i8] c" 16\00"
@.str.16 = [33 x i8] c" Maximum bit rate: %d kb/s\0A\00"
@.str.17 = [19 x i8] c" Profile: %d\0A\00"
@.str.18 = [55 x i8] c" Supports MPEG-H 3D Audio Low Complexity Profile\0A\00"
@.str.19 = [36 x i8] c" AAC audio frame lengths:%s%s\0A\00"
@.str.20 = [9 x i8] c" 1024_TL\00"
@.str.21 = [8 x i8] c" 960_TL\00"
@.str.22 = [47 x i8] c" Supports %s signaled MPEG Surround data\0A\00"
@.str.23 = [26 x i8] c"implicitly and explicitly\00"
@.str.24 = [16 x i8] c"only implicitly\00"
@.str.25 = [32 x i8] c" Supports 22.2ch System H\0A\00"
define void @cta_audio_block(i8* %0, i32 %1) {
%3 = alloca i8*
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
store i8* %0, i8** %3
store i32 %1, i32* %4
store i32 0, i32* %7
%8 = load i32, i32* %4
%9 = urem i32 %8, 3
%10 = icmp ne i32 %9, 0
br i1 %10, label %11, label %13
11: ; preds = %2
%12 = load i32, i32* %4
br label %347
13: ; preds = %2
store i32 0, i32* %5
br label %14
14: ; preds = %344, %13
%15 = load i32, i32* %5
%16 = load i32, i32* %4
%17 = icmp ult i32 %15, %16
br i1 %17, label %18, label %347
18: ; preds = %14
%19 = load i8*, i8** %3
%20 = load i32, i32* %5
%21 = sext i32 %20 to i64
%22 = getelementptr inbounds i8, i8* %19, i64 %21
%23 = load i8, i8* %22
%24 = zext i8 %23 to i32
%25 = and i32 %24, 120
%26 = ashr i32 %25, 3
store i32 %26, i32* %6
%27 = load i8*, i8** %3
%28 = load i32, i32* %5
%29 = add nsw i32 %28, 2
%30 = sext i32 %29 to i64
%31 = getelementptr inbounds i8, i8* %27, i64 %30
%32 = load i8, i8* %31
%33 = zext i8 %32 to i32
%34 = and i32 %33, 248
%35 = ashr i32 %34, 3
store i32 %35, i32* %7
%36 = load i32, i32* %6
%37 = icmp ne i32 %36, 15
br i1 %37, label %38, label %49
38: ; preds = %18
%39 = load i32, i32* %6
%40 = call i32 @audio_format(i32 %39)
%41 = load i8*, i8** %3
%42 = load i32, i32* %5
%43 = sext i32 %42 to i64
%44 = getelementptr inbounds i8, i8* %41, i64 %43
%45 = load i8, i8* %44
%46 = zext i8 %45 to i32
%47 = and i32 %46, 7
%48 = add nsw i32 %47, 1
br label %110
49: ; preds = %18
%50 = load i32, i32* %7
%51 = icmp eq i32 %50, 11
br i1 %51, label %52, label %64
52: ; preds = %49
%53 = load i32, i32* %7
%54 = call i32 @audio_ext_format(i32 %53)
%55 = load i8*, i8** %3
%56 = load i32, i32* %5
%57 = sext i32 %56 to i64
%58 = getelementptr inbounds i8, i8* %55, i64 %57
%59 = load i8, i8* %58
%60 = zext i8 %59 to i32
%61 = and i32 %60, 7
%62 = trunc i32 %61 to i8
%63 = call i32 @mpeg_h_3d_audio_level(i8 zeroext %62)
br label %109
64: ; preds = %49
%65 = load i32, i32* %7
%66 = icmp eq i32 %65, 13
br i1 %66, label %67, label %97
67: ; preds = %64
%68 = load i32, i32* %7
%69 = call i32 @audio_ext_format(i32 %68)
%70 = load i8*, i8** %3
%71 = load i32, i32* %5
%72 = add nsw i32 %71, 1
%73 = sext i32 %72 to i64
%74 = getelementptr inbounds i8, i8* %70, i64 %73
%75 = load i8, i8* %74
%76 = zext i8 %75 to i32
%77 = and i32 %76, 128
%78 = ashr i32 %77, 3
%79 = load i8*, i8** %3
%80 = load i32, i32* %5
%81 = sext i32 %80 to i64
%82 = getelementptr inbounds i8, i8* %79, i64 %81
%83 = load i8, i8* %82
%84 = zext i8 %83 to i32
%85 = and i32 %84, 128
%86 = ashr i32 %85, 4
%87 = or i32 %78, %86
%88 = load i8*, i8** %3
%89 = load i32, i32* %5
%90 = sext i32 %89 to i64
%91 = getelementptr inbounds i8, i8* %88, i64 %90
%92 = load i8, i8* %91
%93 = zext i8 %92 to i32
%94 = and i32 %93, 7
%95 = or i32 %87, %94
%96 = add nsw i32 %95, 1
br label %108
97: ; preds = %64
%98 = load i32, i32* %7
%99 = call i32 @audio_ext_format(i32 %98)
%100 = load i8*, i8** %3
%101 = load i32, i32* %5
%102 = sext i32 %101 to i64
%103 = getelementptr inbounds i8, i8* %100, i64 %102
%104 = load i8, i8* %103
%105 = zext i8 %104 to i32
%106 = and i32 %105, 7
%107 = add nsw i32 %106, 1
br label %108
108: ; preds = %97, %67
br label %109
109: ; preds = %108, %52
br label %110
110: ; preds = %109, %38
%111 = load i8*, i8** %3
%112 = load i32, i32* %5
%113 = add nsw i32 %112, 1
%114 = sext i32 %113 to i64
%115 = getelementptr inbounds i8, i8* %111, i64 %114
%116 = load i8, i8* %115
%117 = zext i8 %116 to i32
%118 = and i32 %117, 64
%119 = icmp ne i32 %118, 0
%120 = zext i1 %119 to i64
%121 = select i1 %119, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.5, i64 0, i64 0)
%122 = load i8*, i8** %3
%123 = load i32, i32* %5
%124 = add nsw i32 %123, 1
%125 = sext i32 %124 to i64
%126 = getelementptr inbounds i8, i8* %122, i64 %125
%127 = load i8, i8* %126
%128 = zext i8 %127 to i32
%129 = and i32 %128, 32
%130 = icmp ne i32 %129, 0
%131 = zext i1 %130 to i64
%132 = select i1 %130, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.6, i64 0, i64 0), i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.5, i64 0, i64 0)
%133 = load i8*, i8** %3
%134 = load i32, i32* %5
%135 = add nsw i32 %134, 1
%136 = sext i32 %135 to i64
%137 = getelementptr inbounds i8, i8* %133, i64 %136
%138 = load i8, i8* %137
%139 = zext i8 %138 to i32
%140 = and i32 %139, 16
%141 = icmp ne i32 %140, 0
%142 = zext i1 %141 to i64
%143 = select i1 %141, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.7, i64 0, i64 0), i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.5, i64 0, i64 0)
%144 = load i8*, i8** %3
%145 = load i32, i32* %5
%146 = add nsw i32 %145, 1
%147 = sext i32 %146 to i64
%148 = getelementptr inbounds i8, i8* %144, i64 %147
%149 = load i8, i8* %148
%150 = zext i8 %149 to i32
%151 = and i32 %150, 8
%152 = icmp ne i32 %151, 0
%153 = zext i1 %152 to i64
%154 = select i1 %152, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.8, i64 0, i64 0), i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.5, i64 0, i64 0)
%155 = load i8*, i8** %3
%156 = load i32, i32* %5
%157 = add nsw i32 %156, 1
%158 = sext i32 %157 to i64
%159 = getelementptr inbounds i8, i8* %155, i64 %158
%160 = load i8, i8* %159
%161 = zext i8 %160 to i32
%162 = and i32 %161, 4
%163 = icmp ne i32 %162, 0
%164 = zext i1 %163 to i64
%165 = select i1 %163, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.9, i64 0, i64 0), i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.5, i64 0, i64 0)
%166 = load i8*, i8** %3
%167 = load i32, i32* %5
%168 = add nsw i32 %167, 1
%169 = sext i32 %168 to i64
%170 = getelementptr inbounds i8, i8* %166, i64 %169
%171 = load i8, i8* %170
%172 = zext i8 %171 to i32
%173 = and i32 %172, 2
%174 = icmp ne i32 %173, 0
%175 = zext i1 %174 to i64
%176 = select i1 %174, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.10, i64 0, i64 0), i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.5, i64 0, i64 0)
%177 = load i8*, i8** %3
%178 = load i32, i32* %5
%179 = add nsw i32 %178, 1
%180 = sext i32 %179 to i64
%181 = getelementptr inbounds i8, i8* %177, i64 %180
%182 = load i8, i8* %181
%183 = zext i8 %182 to i32
%184 = and i32 %183, 1
%185 = icmp ne i32 %184, 0
%186 = zext i1 %185 to i64
%187 = select i1 %185, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.11, i64 0, i64 0), i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.5, i64 0, i64 0)
%188 = load i32, i32* %6
%189 = icmp eq i32 %188, 1
br i1 %189, label %193, label %190
190: ; preds = %110
%191 = load i32, i32* %7
%192 = icmp eq i32 %191, 13
br i1 %192, label %193, label %227
193: ; preds = %190, %110
%194 = load i8*, i8** %3
%195 = load i32, i32* %5
%196 = add nsw i32 %195, 2
%197 = sext i32 %196 to i64
%198 = getelementptr inbounds i8, i8* %194, i64 %197
%199 = load i8, i8* %198
%200 = zext i8 %199 to i32
%201 = and i32 %200, 4
%202 = icmp ne i32 %201, 0
%203 = zext i1 %202 to i64
%204 = select i1 %202, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.13, i64 0, i64 0), i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.5, i64 0, i64 0)
%205 = load i8*, i8** %3
%206 = load i32, i32* %5
%207 = add nsw i32 %206, 2
%208 = sext i32 %207 to i64
%209 = getelementptr inbounds i8, i8* %205, i64 %208
%210 = load i8, i8* %209
%211 = zext i8 %210 to i32
%212 = and i32 %211, 2
%213 = icmp ne i32 %212, 0
%214 = zext i1 %213 to i64
%215 = select i1 %213, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.14, i64 0, i64 0), i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.5, i64 0, i64 0)
%216 = load i8*, i8** %3
%217 = load i32, i32* %5
%218 = add nsw i32 %217, 2
%219 = sext i32 %218 to i64
%220 = getelementptr inbounds i8, i8* %216, i64 %219
%221 = load i8, i8* %220
%222 = zext i8 %221 to i32
%223 = and i32 %222, 1
%224 = icmp ne i32 %223, 0
%225 = zext i1 %224 to i64
%226 = select i1 %224, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.15, i64 0, i64 0), i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.5, i64 0, i64 0)
br label %343
227: ; preds = %190
%228 = load i32, i32* %6
%229 = icmp sle i32 %228, 8
br i1 %229, label %230, label %239
230: ; preds = %227
%231 = load i8*, i8** %3
%232 = load i32, i32* %5
%233 = add nsw i32 %232, 2
%234 = sext i32 %233 to i64
%235 = getelementptr inbounds i8, i8* %231, i64 %234
%236 = load i8, i8* %235
%237 = zext i8 %236 to i32
%238 = mul nsw i32 %237, 8
br label %342
239: ; preds = %227
%240 = load i32, i32* %6
%241 = icmp eq i32 %240, 14
br i1 %241, label %242, label %251
242: ; preds = %239
%243 = load i8*, i8** %3
%244 = load i32, i32* %5
%245 = add nsw i32 %244, 2
%246 = sext i32 %245 to i64
%247 = getelementptr inbounds i8, i8* %243, i64 %246
%248 = load i8, i8* %247
%249 = zext i8 %248 to i32
%250 = and i32 %249, 7
br label %341
251: ; preds = %239
%252 = load i32, i32* %7
%253 = icmp eq i32 %252, 11
br i1 %253, label %254, label %265
254: ; preds = %251
%255 = load i8*, i8** %3
%256 = load i32, i32* %5
%257 = add nsw i32 %256, 2
%258 = sext i32 %257 to i64
%259 = getelementptr inbounds i8, i8* %255, i64 %258
%260 = load i8, i8* %259
%261 = zext i8 %260 to i32
%262 = and i32 %261, 1
%263 = icmp ne i32 %262, 0
br i1 %263, label %264, label %265
264: ; preds = %254
br label %340
265: ; preds = %254, %251
%266 = load i32, i32* %7
%267 = icmp sge i32 %266, 4
br i1 %267, label %268, label %271
268: ; preds = %265
%269 = load i32, i32* %7
%270 = icmp sle i32 %269, 6
br i1 %270, label %277, label %271
271: ; preds = %268, %265
%272 = load i32, i32* %7
%273 = icmp eq i32 %272, 8
br i1 %273, label %277, label %274
274: ; preds = %271
%275 = load i32, i32* %7
%276 = icmp eq i32 %275, 10
br i1 %276, label %277, label %339
277: ; preds = %274, %271, %268
%278 = load i8*, i8** %3
%279 = load i32, i32* %5
%280 = add nsw i32 %279, 2
%281 = sext i32 %280 to i64
%282 = getelementptr inbounds i8, i8* %278, i64 %281
%283 = load i8, i8* %282
%284 = zext i8 %283 to i32
%285 = and i32 %284, 4
%286 = icmp ne i32 %285, 0
%287 = zext i1 %286 to i64
%288 = select i1 %286, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.20, i64 0, i64 0), i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.5, i64 0, i64 0)
%289 = load i8*, i8** %3
%290 = load i32, i32* %5
%291 = add nsw i32 %290, 2
%292 = sext i32 %291 to i64
%293 = getelementptr inbounds i8, i8* %289, i64 %292
%294 = load i8, i8* %293
%295 = zext i8 %294 to i32
%296 = and i32 %295, 2
%297 = icmp ne i32 %296, 0
%298 = zext i1 %297 to i64
%299 = select i1 %297, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.21, i64 0, i64 0), i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.5, i64 0, i64 0)
%300 = load i32, i32* %7
%301 = icmp sge i32 %300, 8
br i1 %301, label %302, label %324
302: ; preds = %277
%303 = load i8*, i8** %3
%304 = load i32, i32* %5
%305 = add nsw i32 %304, 2
%306 = sext i32 %305 to i64
%307 = getelementptr inbounds i8, i8* %303, i64 %306
%308 = load i8, i8* %307
%309 = zext i8 %308 to i32
%310 = and i32 %309, 1
%311 = icmp ne i32 %310, 0
br i1 %311, label %312, label %324
312: ; preds = %302
%313 = load i8*, i8** %3
%314 = load i32, i32* %5
%315 = add nsw i32 %314, 2
%316 = sext i32 %315 to i64
%317 = getelementptr inbounds i8, i8* %313, i64 %316
%318 = load i8, i8* %317
%319 = zext i8 %318 to i32
%320 = and i32 %319, 1
%321 = icmp ne i32 %320, 0
%322 = zext i1 %321 to i64
%323 = select i1 %321, i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.23, i64 0, i64 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.24, i64 0, i64 0)
br label %324
324: ; preds = %312, %302, %277
%325 = load i32, i32* %7
%326 = icmp eq i32 %325, 6
br i1 %326, label %327, label %338
327: ; preds = %324
%328 = load i8*, i8** %3
%329 = load i32, i32* %5
%330 = add nsw i32 %329, 2
%331 = sext i32 %330 to i64
%332 = getelementptr inbounds i8, i8* %328, i64 %331
%333 = load i8, i8* %332
%334 = zext i8 %333 to i32
%335 = and i32 %334, 1
%336 = icmp ne i32 %335, 0
br i1 %336, label %337, label %338
337: ; preds = %327
br label %338
338: ; preds = %337, %327, %324
br label %339
339: ; preds = %338, %274
br label %340
340: ; preds = %339, %264
br label %341
341: ; preds = %340, %242
br label %342
342: ; preds = %341, %230
br label %343
343: ; preds = %342, %193
br label %344
344: ; preds = %343
%345 = load i32, i32* %5
%346 = add nsw i32 %345, 3
store i32 %346, i32* %5
br label %14
347: ; preds = %11, %14
ret void
}

LLVM IR (-O2):
define void @cta_audio_block(i8* nocapture %0, i32 %1) {
%3 = urem i32 %1, 3
%4 = icmp eq i32 %3, 0
%5 = icmp ne i32 %1, 0
%6 = and i1 %4, %5
br i1 %6, label %7, label %37
7: ; preds = %2
%8 = zext i32 %1 to i64
br label %9
9: ; preds = %7, %34
%10 = phi i64 [ 0, %7 ], [ %35, %34 ]
%11 = getelementptr inbounds i8, i8* %0, i64 %10
%12 = load i8, i8* %11
%13 = lshr i8 %12, 3
%14 = and i8 %13, 15
%15 = add nuw nsw i64 %10, 2
%16 = getelementptr inbounds i8, i8* %0, i64 %15
%17 = load i8, i8* %16
%18 = lshr i8 %17, 3
%19 = zext i8 %18 to i32
%20 = icmp eq i8 %14, 15
br i1 %20, label %24, label %21
21: ; preds = %9
%22 = zext i8 %14 to i32
%23 = tail call i32 @audio_format(i32 %22)
br label %34
24: ; preds = %9
switch i8 %18, label %32 [
i8 11, label %25
i8 13, label %30
]
25: ; preds = %24
%26 = tail call i32 @audio_ext_format(i32 11)
%27 = load i8, i8* %11
%28 = and i8 %27, 7
%29 = tail call i32 @mpeg_h_3d_audio_level(i8 zeroext %28)
br label %34
30: ; preds = %24
%31 = tail call i32 @audio_ext_format(i32 13)
br label %34
32: ; preds = %24
%33 = tail call i32 @audio_ext_format(i32 %19)
br label %34
34: ; preds = %25, %32, %30, %21
%35 = add nuw nsw i64 %10, 3
%36 = icmp ult i64 %35, %8
br i1 %36, label %9, label %37
37: ; preds = %34, %2
ret void
}