#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 */
typedef int uint16_t;
struct in6_addr {
  int *s6_addr;
};

/* Variables and functions */
scalar_t__ memcmp(int *, char *, int);
const char *ipv6_net_to_type(struct in6_addr *net, int prefix) {
  uint16_t word1 = net->s6_addr[0] << 8 | net->s6_addr[1];
  uint16_t word2 = net->s6_addr[2] << 8 | net->s6_addr[3];
  if (prefix == 128 &&
      memcmp(net->s6_addr,
             "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01",
             16) == 0)
    return "Loopback Address";
  if (prefix == 128 &&
      memcmp(net->s6_addr,
             "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
             16) == 0)
    return "Unspecified Address";
  if (prefix >= 96 &&
      memcmp(net->s6_addr, "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff",
             12) == 0)
    return "IPv4-mapped Address";
  if (prefix >= 96 &&
      memcmp(net->s6_addr, "\x00\x64\xff\x9b\x00\x00\x00\x00\x00\x00\x00\x00",
             12) == 0)
    return "IPv4-IPv6 Translat.";
  if (prefix >= 96 &&
      memcmp(net->s6_addr, "\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
             12) == 0)
    return "Discard-Only Address Block";
  if ((word1 & 0xfffe) == 0x2001 && word2 == 0)
    return "IETF Protocol Assignments";
  if ((word1 & 0xe000) == 0x2000) {
    return "Global Unicast";
  }
  if (((net->s6_addr[0] & 0xfe) == 0xfc)) {
    return "Unique Local Unicast";
  }
  if ((word1 & 0xffc0) == 0xfe80) {
    return "Link-Scoped Unicast";
  }
  if ((net->s6_addr[0] & 0xff) == 0xff) {
    return "Multicast";
  }
  if ((word1 & 0xfffe) == 0x2002)
    return "6to4";
  return "Reserved";
}


x86 assembly (clang, -O0):
<ipv6_net_to_type>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
mov    (%rax),%eax
shl    $0x8,%eax
mov    -0x10(%rbp),%rcx
mov    (%rcx),%rcx
or     0x4(%rcx),%eax
mov    %eax,-0x18(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
mov    0x8(%rax),%eax
shl    $0x8,%eax
mov    -0x10(%rbp),%rcx
mov    (%rcx),%rcx
or     0xc(%rcx),%eax
mov    %eax,-0x1c(%rbp)
cmpl   $0x80,-0x14(%rbp)
jne    1191 <ipv6_net_to_type+0x81>
mov    -0x10(%rbp),%rax
mov    (%rax),%rdi
lea    0xe93(%rip),%rsi
mov    $0x10,%edx
call   1030 <memcmp@plt>
cmp    $0x0,%rax
jne    1191 <ipv6_net_to_type+0x81>
lea    0xec1(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1377 <ipv6_net_to_type+0x267>
cmpl   $0x80,-0x14(%rbp)
jne    11d0 <ipv6_net_to_type+0xc0>
mov    -0x10(%rbp),%rax
mov    (%rax),%rdi
lea    0xe65(%rip),%rsi
mov    $0x10,%edx
call   1030 <memcmp@plt>
cmp    $0x0,%rax
jne    11d0 <ipv6_net_to_type+0xc0>
lea    0xe93(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1377 <ipv6_net_to_type+0x267>
cmpl   $0x60,-0x14(%rbp)
jl     120c <ipv6_net_to_type+0xfc>
mov    -0x10(%rbp),%rax
mov    (%rax),%rdi
lea    0xe3a(%rip),%rsi
mov    $0xc,%edx
call   1030 <memcmp@plt>
cmp    $0x0,%rax
jne    120c <ipv6_net_to_type+0xfc>
lea    0xe6b(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1377 <ipv6_net_to_type+0x267>
cmpl   $0x60,-0x14(%rbp)
jl     1248 <ipv6_net_to_type+0x138>
mov    -0x10(%rbp),%rax
mov    (%rax),%rdi
lea    0xe0b(%rip),%rsi
mov    $0xc,%edx
call   1030 <memcmp@plt>
cmp    $0x0,%rax
jne    1248 <ipv6_net_to_type+0x138>
lea    0xe43(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1377 <ipv6_net_to_type+0x267>
cmpl   $0x60,-0x14(%rbp)
jl     1284 <ipv6_net_to_type+0x174>
mov    -0x10(%rbp),%rax
mov    (%rax),%rdi
lea    0xddc(%rip),%rsi
mov    $0xc,%edx
call   1030 <memcmp@plt>
cmp    $0x0,%rax
jne    1284 <ipv6_net_to_type+0x174>
lea    0xe1b(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1377 <ipv6_net_to_type+0x267>
mov    -0x18(%rbp),%eax
and    $0xfffe,%eax
cmp    $0x2001,%eax
jne    12b1 <ipv6_net_to_type+0x1a1>
cmpl   $0x0,-0x1c(%rbp)
jne    12b1 <ipv6_net_to_type+0x1a1>
lea    0xe09(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1377 <ipv6_net_to_type+0x267>
mov    -0x18(%rbp),%eax
and    $0xe000,%eax
cmp    $0x2000,%eax
jne    12d4 <ipv6_net_to_type+0x1c4>
lea    0xe00(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1377 <ipv6_net_to_type+0x267>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
mov    (%rax),%eax
and    $0xfe,%eax
cmp    $0xfc,%eax
jne    12fd <ipv6_net_to_type+0x1ed>
lea    0xde6(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1377 <ipv6_net_to_type+0x267>
mov    -0x18(%rbp),%eax
and    $0xffc0,%eax
cmp    $0xfe80,%eax
jne    1320 <ipv6_net_to_type+0x210>
lea    0xdd8(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1377 <ipv6_net_to_type+0x267>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
mov    (%rax),%eax
and    $0xff,%eax
cmp    $0xff,%eax
jne    1349 <ipv6_net_to_type+0x239>
lea    0xdc3(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1377 <ipv6_net_to_type+0x267>
mov    -0x18(%rbp),%eax
and    $0xfffe,%eax
cmp    $0x2002,%eax
jne    136c <ipv6_net_to_type+0x25c>
lea    0xdaa(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1377 <ipv6_net_to_type+0x267>
lea    0xd9f(%rip),%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<ipv6_net_to_type>:
push   %rbp
push   %rbx
push   %rax
mov    %rdi,%rbx
mov    (%rdi),%rdi
mov    (%rdi),%ebp
shl    $0x8,%ebp
or     0x4(%rdi),%ebp
cmp    $0x80,%esi
jne    1165 <ipv6_net_to_type+0x55>
lea    0xed0(%rip),%rsi
mov    $0x10,%edx
call   1030 <memcmp@plt>
test   %rax,%rax
je     11cc <ipv6_net_to_type+0xbc>
mov    (%rbx),%rdi
lea    0xec4(%rip),%rsi
mov    $0x10,%edx
call   1030 <memcmp@plt>
test   %rax,%rax
je     11ff <ipv6_net_to_type+0xef>
mov    (%rbx),%rdi
jmp    116a <ipv6_net_to_type+0x5a>
cmp    $0x60,%esi
jl     11b2 <ipv6_net_to_type+0xa2>
lea    0xeb1(%rip),%rsi
mov    $0xc,%edx
call   1030 <memcmp@plt>
test   %rax,%rax
je     11f6 <ipv6_net_to_type+0xe6>
mov    (%rbx),%rdi
lea    0xea5(%rip),%rsi
mov    $0xc,%edx
call   1030 <memcmp@plt>
test   %rax,%rax
je     1208 <ipv6_net_to_type+0xf8>
mov    (%rbx),%rdi
lea    0xe99(%rip),%rsi
mov    $0xc,%edx
call   1030 <memcmp@plt>
test   %rax,%rax
je     122a <ipv6_net_to_type+0x11a>
mov    %ebp,%eax
and    $0xe000,%eax
cmp    $0x2000,%eax
jne    11d8 <ipv6_net_to_type+0xc8>
lea    0xeea(%rip),%rax
jmp    1264 <ipv6_net_to_type+0x154>
lea    0xe76(%rip),%rax
jmp    1264 <ipv6_net_to_type+0x154>
mov    (%rbx),%rax
mov    (%rax),%eax
mov    %eax,%ecx
and    $0xfe,%ecx
cmp    $0xfc,%ecx
jne    1211 <ipv6_net_to_type+0x101>
lea    0xecc(%rip),%rax
jmp    1264 <ipv6_net_to_type+0x154>
lea    0xe71(%rip),%rax
jmp    1264 <ipv6_net_to_type+0x154>
lea    0xe54(%rip),%rax
jmp    1264 <ipv6_net_to_type+0x154>
lea    0xe73(%rip),%rax
jmp    1264 <ipv6_net_to_type+0x154>
mov    %ebp,%ecx
and    $0xffc0,%ecx
cmp    $0xfe80,%ecx
jne    1233 <ipv6_net_to_type+0x123>
lea    0xead(%rip),%rax
jmp    1264 <ipv6_net_to_type+0x154>
lea    0xe65(%rip),%rax
jmp    1264 <ipv6_net_to_type+0x154>
movzbl %al,%eax
cmp    $0xff,%eax
jne    1246 <ipv6_net_to_type+0x136>
lea    0xea5(%rip),%rax
jmp    1264 <ipv6_net_to_type+0x154>
and    $0xfffe,%ebp
cmp    $0x2002,%ebp
lea    0xe9a(%rip),%rcx
lea    0xe98(%rip),%rax
cmove  %rcx,%rax
add    $0x8,%rsp
pop    %rbx
pop    %rbp
ret

LLVM IR (-O0):
%struct.in6_addr = type { i32* }
@.str = [17 x i8] c"\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\01\00"
@.str.1 = [17 x i8] c"Loopback Address\00"
@.str.2 = [17 x i8] zeroinitializer
@.str.3 = [20 x i8] c"Unspecified Address\00"
@.str.4 = [13 x i8] c"\00\00\00\00\00\00\00\00\00\00\FF\FF\00"
@.str.5 = [20 x i8] c"IPv4-mapped Address\00"
@.str.6 = [13 x i8] c"\00d\FF\9B\00\00\00\00\00\00\00\00\00"
@.str.7 = [20 x i8] c"IPv4-IPv6 Translat.\00"
@.str.8 = [13 x i8] c"\10\00\00\00\00\00\00\00\00\00\00\00\00"
@.str.9 = [27 x i8] c"Discard-Only Address Block\00"
@.str.10 = [26 x i8] c"IETF Protocol Assignments\00"
@.str.11 = [15 x i8] c"Global Unicast\00"
@.str.12 = [21 x i8] c"Unique Local Unicast\00"
@.str.13 = [20 x i8] c"Link-Scoped Unicast\00"
@.str.14 = [10 x i8] c"Multicast\00"
@.str.15 = [5 x i8] c"6to4\00"
@.str.16 = [9 x i8] c"Reserved\00"
define i8* @ipv6_net_to_type(%struct.in6_addr* %0, i32 %1) {
%3 = alloca i8*
%4 = alloca %struct.in6_addr*
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
store %struct.in6_addr* %0, %struct.in6_addr** %4
store i32 %1, i32* %5
%8 = load %struct.in6_addr*, %struct.in6_addr** %4
%9 = getelementptr inbounds %struct.in6_addr, %struct.in6_addr* %8, i32 0, i32 0
%10 = load i32*, i32** %9
%11 = getelementptr inbounds i32, i32* %10, i64 0
%12 = load i32, i32* %11
%13 = shl i32 %12, 8
%14 = load %struct.in6_addr*, %struct.in6_addr** %4
%15 = getelementptr inbounds %struct.in6_addr, %struct.in6_addr* %14, i32 0, i32 0
%16 = load i32*, i32** %15
%17 = getelementptr inbounds i32, i32* %16, i64 1
%18 = load i32, i32* %17
%19 = or i32 %13, %18
store i32 %19, i32* %6
%20 = load %struct.in6_addr*, %struct.in6_addr** %4
%21 = getelementptr inbounds %struct.in6_addr, %struct.in6_addr* %20, i32 0, i32 0
%22 = load i32*, i32** %21
%23 = getelementptr inbounds i32, i32* %22, i64 2
%24 = load i32, i32* %23
%25 = shl i32 %24, 8
%26 = load %struct.in6_addr*, %struct.in6_addr** %4
%27 = getelementptr inbounds %struct.in6_addr, %struct.in6_addr* %26, i32 0, i32 0
%28 = load i32*, i32** %27
%29 = getelementptr inbounds i32, i32* %28, i64 3
%30 = load i32, i32* %29
%31 = or i32 %25, %30
store i32 %31, i32* %7
%32 = load i32, i32* %5
%33 = icmp eq i32 %32, 128
br i1 %33, label %34, label %41
34: ; preds = %2
%35 = load %struct.in6_addr*, %struct.in6_addr** %4
%36 = getelementptr inbounds %struct.in6_addr, %struct.in6_addr* %35, i32 0, i32 0
%37 = load i32*, i32** %36
%38 = call i64 @memcmp(i32* %37, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 0), i32 16)
%39 = icmp eq i64 %38, 0
br i1 %39, label %40, label %41
40: ; preds = %34
store i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.1, i64 0, i64 0), i8** %3
br label %123
41: ; preds = %34, %2
%42 = load i32, i32* %5
%43 = icmp eq i32 %42, 128
br i1 %43, label %44, label %51
44: ; preds = %41
%45 = load %struct.in6_addr*, %struct.in6_addr** %4
%46 = getelementptr inbounds %struct.in6_addr, %struct.in6_addr* %45, i32 0, i32 0
%47 = load i32*, i32** %46
%48 = call i64 @memcmp(i32* %47, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.2, i64 0, i64 0), i32 16)
%49 = icmp eq i64 %48, 0
br i1 %49, label %50, label %51
50: ; preds = %44
store i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.3, i64 0, i64 0), i8** %3
br label %123
51: ; preds = %44, %41
%52 = load i32, i32* %5
%53 = icmp sge i32 %52, 96
br i1 %53, label %54, label %61
54: ; preds = %51
%55 = load %struct.in6_addr*, %struct.in6_addr** %4
%56 = getelementptr inbounds %struct.in6_addr, %struct.in6_addr* %55, i32 0, i32 0
%57 = load i32*, i32** %56
%58 = call i64 @memcmp(i32* %57, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.4, i64 0, i64 0), i32 12)
%59 = icmp eq i64 %58, 0
br i1 %59, label %60, label %61
60: ; preds = %54
store i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.5, i64 0, i64 0), i8** %3
br label %123
61: ; preds = %54, %51
%62 = load i32, i32* %5
%63 = icmp sge i32 %62, 96
br i1 %63, label %64, label %71
64: ; preds = %61
%65 = load %struct.in6_addr*, %struct.in6_addr** %4
%66 = getelementptr inbounds %struct.in6_addr, %struct.in6_addr* %65, i32 0, i32 0
%67 = load i32*, i32** %66
%68 = call i64 @memcmp(i32* %67, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.6, i64 0, i64 0), i32 12)
%69 = icmp eq i64 %68, 0
br i1 %69, label %70, label %71
70: ; preds = %64
store i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.7, i64 0, i64 0), i8** %3
br label %123
71: ; preds = %64, %61
%72 = load i32, i32* %5
%73 = icmp sge i32 %72, 96
br i1 %73, label %74, label %81
74: ; preds = %71
%75 = load %struct.in6_addr*, %struct.in6_addr** %4
%76 = getelementptr inbounds %struct.in6_addr, %struct.in6_addr* %75, i32 0, i32 0
%77 = load i32*, i32** %76
%78 = call i64 @memcmp(i32* %77, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.8, i64 0, i64 0), i32 12)
%79 = icmp eq i64 %78, 0
br i1 %79, label %80, label %81
80: ; preds = %74
store i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.9, i64 0, i64 0), i8** %3
br label %123
81: ; preds = %74, %71
%82 = load i32, i32* %6
%83 = and i32 %82, 65534
%84 = icmp eq i32 %83, 8193
br i1 %84, label %85, label %89
85: ; preds = %81
%86 = load i32, i32* %7
%87 = icmp eq i32 %86, 0
br i1 %87, label %88, label %89
88: ; preds = %85
store i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.10, i64 0, i64 0), i8** %3
br label %123
89: ; preds = %85, %81
%90 = load i32, i32* %6
%91 = and i32 %90, 57344
%92 = icmp eq i32 %91, 8192
br i1 %92, label %93, label %94
93: ; preds = %89
store i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.11, i64 0, i64 0), i8** %3
br label %123
94: ; preds = %89
%95 = load %struct.in6_addr*, %struct.in6_addr** %4
%96 = getelementptr inbounds %struct.in6_addr, %struct.in6_addr* %95, i32 0, i32 0
%97 = load i32*, i32** %96
%98 = getelementptr inbounds i32, i32* %97, i64 0
%99 = load i32, i32* %98
%100 = and i32 %99, 254
%101 = icmp eq i32 %100, 252
br i1 %101, label %102, label %103
102: ; preds = %94
store i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.12, i64 0, i64 0), i8** %3
br label %123
103: ; preds = %94
%104 = load i32, i32* %6
%105 = and i32 %104, 65472
%106 = icmp eq i32 %105, 65152
br i1 %106, label %107, label %108
107: ; preds = %103
store i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.13, i64 0, i64 0), i8** %3
br label %123
108: ; preds = %103
%109 = load %struct.in6_addr*, %struct.in6_addr** %4
%110 = getelementptr inbounds %struct.in6_addr, %struct.in6_addr* %109, i32 0, i32 0
%111 = load i32*, i32** %110
%112 = getelementptr inbounds i32, i32* %111, i64 0
%113 = load i32, i32* %112
%114 = and i32 %113, 255
%115 = icmp eq i32 %114, 255
br i1 %115, label %116, label %117
116: ; preds = %108
store i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.14, i64 0, i64 0), i8** %3
br label %123
117: ; preds = %108
%118 = load i32, i32* %6
%119 = and i32 %118, 65534
%120 = icmp eq i32 %119, 8194
br i1 %120, label %121, label %122
121: ; preds = %117
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.15, i64 0, i64 0), i8** %3
br label %123
122: ; preds = %117
store i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.16, i64 0, i64 0), i8** %3
br label %123
123: ; preds = %122, %121, %116, %107, %102, %93, %88, %80, %70, %60, %50, %40
%124 = load i8*, i8** %3
ret i8* %124
}

LLVM IR (-O2):
%struct.in6_addr = type { i32* }
@.str = [17 x i8] c"\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\01\00"
@.str.1 = [17 x i8] c"Loopback Address\00"
@.str.2 = [17 x i8] zeroinitializer
@.str.3 = [20 x i8] c"Unspecified Address\00"
@.str.4 = [13 x i8] c"\00\00\00\00\00\00\00\00\00\00\FF\FF\00"
@.str.5 = [20 x i8] c"IPv4-mapped Address\00"
@.str.6 = [13 x i8] c"\00d\FF\9B\00\00\00\00\00\00\00\00\00"
@.str.7 = [20 x i8] c"IPv4-IPv6 Translat.\00"
@.str.8 = [13 x i8] c"\10\00\00\00\00\00\00\00\00\00\00\00\00"
@.str.9 = [27 x i8] c"Discard-Only Address Block\00"
@.str.11 = [15 x i8] c"Global Unicast\00"
@.str.12 = [21 x i8] c"Unique Local Unicast\00"
@.str.13 = [20 x i8] c"Link-Scoped Unicast\00"
@.str.14 = [10 x i8] c"Multicast\00"
@.str.15 = [5 x i8] c"6to4\00"
@.str.16 = [9 x i8] c"Reserved\00"
define i8* @ipv6_net_to_type(%struct.in6_addr* nocapture %0, i32 %1) {
%3 = getelementptr inbounds %struct.in6_addr, %struct.in6_addr* %0, i64 0, i32 0
%4 = load i32*, i32** %3
%5 = load i32, i32* %4
%6 = shl i32 %5, 8
%7 = getelementptr inbounds i32, i32* %4, i64 1
%8 = load i32, i32* %7
%9 = or i32 %6, %8
%10 = icmp eq i32 %1, 128
br i1 %10, label %11, label %20
11: ; preds = %2
%12 = tail call i64 @memcmp(i32* %4, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 0), i32 16)
%13 = icmp eq i64 %12, 0
br i1 %13, label %52, label %14
14: ; preds = %11
%15 = load i32*, i32** %3
%16 = tail call i64 @memcmp(i32* %15, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.2, i64 0, i64 0), i32 16)
%17 = icmp eq i64 %16, 0
br i1 %17, label %52, label %18
18: ; preds = %14
%19 = load i32*, i32** %3
br label %22
20: ; preds = %2
%21 = icmp sgt i32 %1, 95
br i1 %21, label %22, label %34
22: ; preds = %18, %20
%23 = phi i32* [ %19, %18 ], [ %4, %20 ]
%24 = tail call i64 @memcmp(i32* %23, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.4, i64 0, i64 0), i32 12)
%25 = icmp eq i64 %24, 0
br i1 %25, label %52, label %26
26: ; preds = %22
%27 = load i32*, i32** %3
%28 = tail call i64 @memcmp(i32* %27, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.6, i64 0, i64 0), i32 12)
%29 = icmp eq i64 %28, 0
br i1 %29, label %52, label %30
30: ; preds = %26
%31 = load i32*, i32** %3
%32 = tail call i64 @memcmp(i32* %31, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.8, i64 0, i64 0), i32 12)
%33 = icmp eq i64 %32, 0
br i1 %33, label %52, label %34
34: ; preds = %20, %30
%35 = and i32 %9, 65534
%36 = and i32 %9, 57344
%37 = icmp eq i32 %36, 8192
br i1 %37, label %52, label %38
38: ; preds = %34
%39 = load i32*, i32** %3
%40 = load i32, i32* %39
%41 = and i32 %40, 254
%42 = icmp eq i32 %41, 252
br i1 %42, label %52, label %43
43: ; preds = %38
%44 = and i32 %9, 65472
%45 = icmp eq i32 %44, 65152
br i1 %45, label %52, label %46
46: ; preds = %43
%47 = and i32 %40, 255
%48 = icmp eq i32 %47, 255
br i1 %48, label %52, label %49
49: ; preds = %46
%50 = icmp eq i32 %35, 8194
%51 = select i1 %50, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.15, i64 0, i64 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.16, i64 0, i64 0)
br label %52
52: ; preds = %49, %46, %43, %38, %34, %30, %26, %22, %14, %11
%53 = phi i8* [ getelementptr inbounds ([17 x i8], [17 x i8]* @.str.1, i64 0, i64 0), %11 ], [ getelementptr inbounds ([20 x i8], [20 x i8]* @.str.3, i64 0, i64 0), %14 ], [ getelementptr inbounds ([20 x i8], [20 x i8]* @.str.5, i64 0, i64 0), %22 ], [ getelementptr inbounds ([20 x i8], [20 x i8]* @.str.7, i64 0, i64 0), %26 ], [ getelementptr inbounds ([27 x i8], [27 x i8]* @.str.9, i64 0, i64 0), %30 ], [ getelementptr inbounds ([15 x i8], [15 x i8]* @.str.11, i64 0, i64 0), %34 ], [ getelementptr inbounds ([21 x i8], [21 x i8]* @.str.12, i64 0, i64 0), %38 ], [ getelementptr inbounds ([20 x i8], [20 x i8]* @.str.13, i64 0, i64 0), %43 ], [ getelementptr inbounds ([10 x i8], [10 x i8]* @.str.14, i64 0, i64 0), %46 ], [ %51, %49 ]
ret i8* %53
}