#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*/ sprintf(char *, char *, int);
int /*<<< orphan*/ strcat(char *, char *);
int /*<<< orphan*/ strcpy(char *, char *);
char *frame_desc(int frame) {
  static char str[25];
  if (frame == -1)
    return "TIMEOUT";
  if (frame == -2)
    return "Invalid Header";
  if (frame == -3)
    return "Aborted";
  if (frame >= 0 && (frame & 0x80)) {
    strcpy(str, "BAD ");
    switch (frame & ~0x80) {
    case 0x00:
      strcat(str, "ZRQINIT");
      break;
    case 0x01:
      strcat(str, "ZRINIT");
      break;
    case 0x02:
      strcat(str, "ZSINIT");
      break;
    case 0x03:
      strcat(str, "ZACK");
      break;
    case 0x04:
      strcat(str, "ZFILE");
      break;
    case 0x05:
      strcat(str, "ZSKIP");
      break;
    case 0x06:
      strcat(str, "ZNAK");
      break;
    case 0x07:
      strcat(str, "ZABORT");
      break;
    case 0x08:
      strcat(str, "ZFIN");
      break;
    case 0x09:
      strcat(str, "ZRPOS");
      break;
    case 0x0a:
      strcat(str, "ZDATA");
      break;
    case 0x0b:
      strcat(str, "ZEOF");
      break;
    case 0x0c:
      strcat(str, "ZFERR");
      break;
    case 0x0d:
      strcat(str, "ZCRC");
      break;
    case 0x0e:
      strcat(str, "ZCHALLENGE");
      break;
    case 0x0f:
      strcat(str, "ZCOMPL");
      break;
    case 0x10:
      strcat(str, "ZCAN");
      break;
    case 0x11:
      strcat(str, "ZFREECNT");
      break;
    case 0x12:
      strcat(str, "ZCOMMAND");
      break;
    case 0x13:
      strcat(str, "ZSTDERR");
      break;
    default:
      sprintf(str, "Unknown (%08X)", frame);
      break;
    }
  } else
    sprintf(str, "%d", frame);
  return (str);
}


x86 assembly (clang, -O0):
<frame_desc>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %edi,-0xc(%rbp)
cmpl   $0xffffffff,-0xc(%rbp)
jne    1155 <frame_desc+0x25>
lea    0xf04(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    13fc <frame_desc+0x2cc>
cmpl   $0xfffffffe,-0xc(%rbp)
jne    116f <frame_desc+0x3f>
lea    0xef2(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    13fc <frame_desc+0x2cc>
cmpl   $0xfffffffd,-0xc(%rbp)
jne    1189 <frame_desc+0x59>
lea    0xee7(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    13fc <frame_desc+0x2cc>
cmpl   $0x0,-0xc(%rbp)
jl     13db <frame_desc+0x2ab>
mov    -0xc(%rbp),%eax
and    $0x80,%eax
cmp    $0x0,%eax
je     13db <frame_desc+0x2ab>
lea    0x2ea5(%rip),%rdi
lea    0xebd(%rip),%rsi
call   1030 <strcpy@plt>
mov    -0xc(%rbp),%eax
and    $0xffffff7f,%eax
mov    %rax,-0x18(%rbp)
sub    $0x13,%eax
ja     13c0 <frame_desc+0x290>
mov    -0x18(%rbp),%rax
lea    0xe29(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
lea    0x2e69(%rip),%rdi
lea    0xe86(%rip),%rsi
call   1040 <strcat@plt>
jmp    13d6 <frame_desc+0x2a6>
lea    0x2e51(%rip),%rdi
lea    0xe76(%rip),%rsi
call   1040 <strcat@plt>
jmp    13d6 <frame_desc+0x2a6>
lea    0x2e39(%rip),%rdi
lea    0xe65(%rip),%rsi
call   1040 <strcat@plt>
jmp    13d6 <frame_desc+0x2a6>
lea    0x2e21(%rip),%rdi
lea    0xe54(%rip),%rsi
call   1040 <strcat@plt>
jmp    13d6 <frame_desc+0x2a6>
lea    0x2e09(%rip),%rdi
lea    0xe41(%rip),%rsi
call   1040 <strcat@plt>
jmp    13d6 <frame_desc+0x2a6>
lea    0x2df1(%rip),%rdi
lea    0xe2f(%rip),%rsi
call   1040 <strcat@plt>
jmp    13d6 <frame_desc+0x2a6>
lea    0x2dd9(%rip),%rdi
lea    0xe1d(%rip),%rsi
call   1040 <strcat@plt>
jmp    13d6 <frame_desc+0x2a6>
lea    0x2dc1(%rip),%rdi
lea    0xe0a(%rip),%rsi
call   1040 <strcat@plt>
jmp    13d6 <frame_desc+0x2a6>
lea    0x2da9(%rip),%rdi
lea    0xdf9(%rip),%rsi
call   1040 <strcat@plt>
jmp    13d6 <frame_desc+0x2a6>
lea    0x2d91(%rip),%rdi
lea    0xde6(%rip),%rsi
call   1040 <strcat@plt>
jmp    13d6 <frame_desc+0x2a6>
lea    0x2d79(%rip),%rdi
lea    0xdd4(%rip),%rsi
call   1040 <strcat@plt>
jmp    13d6 <frame_desc+0x2a6>
lea    0x2d61(%rip),%rdi
lea    0xdc2(%rip),%rsi
call   1040 <strcat@plt>
jmp    13d6 <frame_desc+0x2a6>
lea    0x2d49(%rip),%rdi
lea    0xdaf(%rip),%rsi
call   1040 <strcat@plt>
jmp    13d6 <frame_desc+0x2a6>
lea    0x2d31(%rip),%rdi
lea    0xd9d(%rip),%rsi
call   1040 <strcat@plt>
jmp    13d6 <frame_desc+0x2a6>
lea    0x2d19(%rip),%rdi
lea    0xd8a(%rip),%rsi
call   1040 <strcat@plt>
jmp    13d6 <frame_desc+0x2a6>
lea    0x2d01(%rip),%rdi
lea    0xd7d(%rip),%rsi
call   1040 <strcat@plt>
jmp    13d6 <frame_desc+0x2a6>
lea    0x2ce9(%rip),%rdi
lea    0xd6c(%rip),%rsi
call   1040 <strcat@plt>
jmp    13d6 <frame_desc+0x2a6>
lea    0x2cd1(%rip),%rdi
lea    0xd59(%rip),%rsi
call   1040 <strcat@plt>
jmp    13d6 <frame_desc+0x2a6>
lea    0x2cb9(%rip),%rdi
lea    0xd4a(%rip),%rsi
call   1040 <strcat@plt>
jmp    13d6 <frame_desc+0x2a6>
lea    0x2ca1(%rip),%rdi
lea    0xd3b(%rip),%rsi
call   1040 <strcat@plt>
jmp    13d6 <frame_desc+0x2a6>
mov    -0xc(%rbp),%edx
lea    0x2c86(%rip),%rdi
lea    0xd28(%rip),%rsi
call   1050 <sprintf@plt>
jmp    13f1 <frame_desc+0x2c1>
mov    -0xc(%rbp),%edx
lea    0x2c6b(%rip),%rdi
lea    0xd1c(%rip),%rsi
call   1050 <sprintf@plt>
lea    0x2c58(%rip),%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<frame_desc>:
push   %rbp
push   %rbx
push   %rax
mov    %edi,%ebp
cmp    $0xfffffffc,%edi
jbe    1153 <frame_desc+0x23>
add    $0x3,%ebp
movslq %ebp,%rax
lea    0xf09(%rip),%rcx
movslq (%rcx,%rax,4),%rbx
add    %rcx,%rbx
jmp    1319 <frame_desc+0x1e9>
mov    %ebp,%eax
and    $0x80000080,%eax
lea    0x2eef(%rip),%rbx
cmp    $0x80,%eax
jne    11a6 <frame_desc+0x76>
lea    0xf0c(%rip),%rsi
mov    %rbx,%rdi
call   1030 <strcpy@plt>
mov    %ebp,%eax
and    $0xffffff7f,%eax
cmp    $0x13,%eax
ja     11bc <frame_desc+0x8c>
lea    0xe76(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
lea    0x2eb6(%rip),%rbx
lea    0xedf(%rip),%rsi
jmp    1311 <frame_desc+0x1e1>
lea    0xf67(%rip),%rsi
mov    %rbx,%rdi
mov    %ebp,%edx
call   1050 <sprintf@plt>
jmp    1319 <frame_desc+0x1e9>
lea    0x2e8d(%rip),%rbx
lea    0xf3b(%rip),%rsi
jmp    11ad <frame_desc+0x7d>
lea    0x2e7d(%rip),%rbx
lea    0xeae(%rip),%rsi
jmp    1311 <frame_desc+0x1e1>
lea    0x2e6a(%rip),%rbx
lea    0xea2(%rip),%rsi
jmp    1311 <frame_desc+0x1e1>
lea    0x2e57(%rip),%rbx
lea    0xe96(%rip),%rsi
jmp    1311 <frame_desc+0x1e1>
lea    0x2e44(%rip),%rbx
lea    0xe88(%rip),%rsi
jmp    1311 <frame_desc+0x1e1>
lea    0x2e31(%rip),%rbx
lea    0xe7b(%rip),%rsi
jmp    1311 <frame_desc+0x1e1>
lea    0x2e1e(%rip),%rbx
lea    0xe6e(%rip),%rsi
jmp    1311 <frame_desc+0x1e1>
lea    0x2e0b(%rip),%rbx
lea    0xe60(%rip),%rsi
jmp    1311 <frame_desc+0x1e1>
lea    0x2df8(%rip),%rbx
lea    0xe54(%rip),%rsi
jmp    1311 <frame_desc+0x1e1>
lea    0x2de5(%rip),%rbx
lea    0xe46(%rip),%rsi
jmp    1311 <frame_desc+0x1e1>
lea    0x2dd2(%rip),%rbx
lea    0xe39(%rip),%rsi
jmp    1311 <frame_desc+0x1e1>
lea    0x2dbf(%rip),%rbx
lea    0xe2c(%rip),%rsi
jmp    1311 <frame_desc+0x1e1>
lea    0x2daf(%rip),%rbx
lea    0xe21(%rip),%rsi
jmp    1311 <frame_desc+0x1e1>
lea    0x2d9f(%rip),%rbx
lea    0xe17(%rip),%rsi
jmp    1311 <frame_desc+0x1e1>
lea    0x2d8f(%rip),%rbx
lea    0xe0c(%rip),%rsi
jmp    1311 <frame_desc+0x1e1>
lea    0x2d7f(%rip),%rbx
lea    0xe07(%rip),%rsi
jmp    1311 <frame_desc+0x1e1>
lea    0x2d6f(%rip),%rbx
lea    0xdfe(%rip),%rsi
jmp    1311 <frame_desc+0x1e1>
lea    0x2d5f(%rip),%rbx
lea    0xdf3(%rip),%rsi
jmp    1311 <frame_desc+0x1e1>
lea    0x2d4f(%rip),%rbx
lea    0xdec(%rip),%rsi
jmp    1311 <frame_desc+0x1e1>
lea    0xdec(%rip),%rsi
mov    %rbx,%rdi
call   1040 <strcat@plt>
mov    %rbx,%rax
add    $0x8,%rsp
pop    %rbx
pop    %rbp
ret

LLVM IR (-O0):
@frame_desc.str = internal global [25 x i8] zeroinitializer
@.str = [8 x i8] c"TIMEOUT\00"
@.str.1 = [15 x i8] c"Invalid Header\00"
@.str.2 = [8 x i8] c"Aborted\00"
@.str.3 = [5 x i8] c"BAD \00"
@.str.4 = [8 x i8] c"ZRQINIT\00"
@.str.5 = [7 x i8] c"ZRINIT\00"
@.str.6 = [7 x i8] c"ZSINIT\00"
@.str.7 = [5 x i8] c"ZACK\00"
@.str.8 = [6 x i8] c"ZFILE\00"
@.str.9 = [6 x i8] c"ZSKIP\00"
@.str.10 = [5 x i8] c"ZNAK\00"
@.str.11 = [7 x i8] c"ZABORT\00"
@.str.12 = [5 x i8] c"ZFIN\00"
@.str.13 = [6 x i8] c"ZRPOS\00"
@.str.14 = [6 x i8] c"ZDATA\00"
@.str.15 = [5 x i8] c"ZEOF\00"
@.str.16 = [6 x i8] c"ZFERR\00"
@.str.17 = [5 x i8] c"ZCRC\00"
@.str.18 = [11 x i8] c"ZCHALLENGE\00"
@.str.19 = [7 x i8] c"ZCOMPL\00"
@.str.20 = [5 x i8] c"ZCAN\00"
@.str.21 = [9 x i8] c"ZFREECNT\00"
@.str.22 = [9 x i8] c"ZCOMMAND\00"
@.str.23 = [8 x i8] c"ZSTDERR\00"
@.str.24 = [15 x i8] c"Unknown (%08X)\00"
@.str.25 = [3 x i8] c"%d\00"
define i8* @frame_desc(i32 %0) {
%2 = alloca i8*
%3 = alloca i32
store i32 %0, i32* %3
%4 = load i32, i32* %3
%5 = icmp eq i32 %4, -1
br i1 %5, label %6, label %7
6: ; preds = %1
store i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i64 0, i64 0), i8** %2
br label %74
7: ; preds = %1
%8 = load i32, i32* %3
%9 = icmp eq i32 %8, -2
br i1 %9, label %10, label %11
10: ; preds = %7
store i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.1, i64 0, i64 0), i8** %2
br label %74
11: ; preds = %7
%12 = load i32, i32* %3
%13 = icmp eq i32 %12, -3
br i1 %13, label %14, label %15
14: ; preds = %11
store i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.2, i64 0, i64 0), i8** %2
br label %74
15: ; preds = %11
%16 = load i32, i32* %3
%17 = icmp sge i32 %16, 0
br i1 %17, label %18, label %70
18: ; preds = %15
%19 = load i32, i32* %3
%20 = and i32 %19, 128
%21 = icmp ne i32 %20, 0
br i1 %21, label %22, label %70
22: ; preds = %18
%23 = call i32 @strcpy(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%24 = load i32, i32* %3
%25 = and i32 %24, -129
switch i32 %25, label %66 [
i32 0, label %26
i32 1, label %28
i32 2, label %30
i32 3, label %32
i32 4, label %34
i32 5, label %36
i32 6, label %38
i32 7, label %40
i32 8, label %42
i32 9, label %44
i32 10, label %46
i32 11, label %48
i32 12, label %50
i32 13, label %52
i32 14, label %54
i32 15, label %56
i32 16, label %58
i32 17, label %60
i32 18, label %62
i32 19, label %64
]
26: ; preds = %22
%27 = call i32 @strcat(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.4, i64 0, i64 0))
br label %69
28: ; preds = %22
%29 = call i32 @strcat(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.5, i64 0, i64 0))
br label %69
30: ; preds = %22
%31 = call i32 @strcat(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.6, i64 0, i64 0))
br label %69
32: ; preds = %22
%33 = call i32 @strcat(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.7, i64 0, i64 0))
br label %69
34: ; preds = %22
%35 = call i32 @strcat(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.8, i64 0, i64 0))
br label %69
36: ; preds = %22
%37 = call i32 @strcat(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.9, i64 0, i64 0))
br label %69
38: ; preds = %22
%39 = call i32 @strcat(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.10, i64 0, i64 0))
br label %69
40: ; preds = %22
%41 = call i32 @strcat(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.11, i64 0, i64 0))
br label %69
42: ; preds = %22
%43 = call i32 @strcat(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.12, i64 0, i64 0))
br label %69
44: ; preds = %22
%45 = call i32 @strcat(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.13, i64 0, i64 0))
br label %69
46: ; preds = %22
%47 = call i32 @strcat(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.14, i64 0, i64 0))
br label %69
48: ; preds = %22
%49 = call i32 @strcat(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.15, i64 0, i64 0))
br label %69
50: ; preds = %22
%51 = call i32 @strcat(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.16, i64 0, i64 0))
br label %69
52: ; preds = %22
%53 = call i32 @strcat(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.17, i64 0, i64 0))
br label %69
54: ; preds = %22
%55 = call i32 @strcat(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.18, i64 0, i64 0))
br label %69
56: ; preds = %22
%57 = call i32 @strcat(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.19, i64 0, i64 0))
br label %69
58: ; preds = %22
%59 = call i32 @strcat(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.20, i64 0, i64 0))
br label %69
60: ; preds = %22
%61 = call i32 @strcat(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.21, i64 0, i64 0))
br label %69
62: ; preds = %22
%63 = call i32 @strcat(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.22, i64 0, i64 0))
br label %69
64: ; preds = %22
%65 = call i32 @strcat(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.23, i64 0, i64 0))
br label %69
66: ; preds = %22
%67 = load i32, i32* %3
%68 = call i32 @sprintf(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.24, i64 0, i64 0), i32 %67)
br label %69
69: ; preds = %66, %64, %62, %60, %58, %56, %54, %52, %50, %48, %46, %44, %42, %40, %38, %36, %34, %32, %30, %28, %26
br label %73
70: ; preds = %18, %15
%71 = load i32, i32* %3
%72 = call i32 @sprintf(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.25, i64 0, i64 0), i32 %71)
br label %73
73: ; preds = %70, %69
store i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8** %2
br label %74
74: ; preds = %73, %14, %10, %6
%75 = load i8*, i8** %2
ret i8* %75
}

LLVM IR (-O2):
@frame_desc.str = internal global [25 x i8] zeroinitializer
@.str = [8 x i8] c"TIMEOUT\00"
@.str.1 = [15 x i8] c"Invalid Header\00"
@.str.2 = [8 x i8] c"Aborted\00"
@.str.3 = [5 x i8] c"BAD \00"
@.str.4 = [8 x i8] c"ZRQINIT\00"
@.str.5 = [7 x i8] c"ZRINIT\00"
@.str.6 = [7 x i8] c"ZSINIT\00"
@.str.7 = [5 x i8] c"ZACK\00"
@.str.8 = [6 x i8] c"ZFILE\00"
@.str.9 = [6 x i8] c"ZSKIP\00"
@.str.10 = [5 x i8] c"ZNAK\00"
@.str.11 = [7 x i8] c"ZABORT\00"
@.str.12 = [5 x i8] c"ZFIN\00"
@.str.13 = [6 x i8] c"ZRPOS\00"
@.str.14 = [6 x i8] c"ZDATA\00"
@.str.15 = [5 x i8] c"ZEOF\00"
@.str.16 = [6 x i8] c"ZFERR\00"
@.str.17 = [5 x i8] c"ZCRC\00"
@.str.18 = [11 x i8] c"ZCHALLENGE\00"
@.str.19 = [7 x i8] c"ZCOMPL\00"
@.str.20 = [5 x i8] c"ZCAN\00"
@.str.21 = [9 x i8] c"ZFREECNT\00"
@.str.22 = [9 x i8] c"ZCOMMAND\00"
@.str.23 = [8 x i8] c"ZSTDERR\00"
@.str.24 = [15 x i8] c"Unknown (%08X)\00"
@.str.25 = [3 x i8] c"%d\00"
@reltable.frame_desc = [3 x i32] [i32 trunc (i64 sub (i64 ptrtoint ([8 x i8]* @.str.2 to i64), i64 ptrtoint ([3 x i32]* @reltable.frame_desc to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([15 x i8]* @.str.1 to i64), i64 ptrtoint ([3 x i32]* @reltable.frame_desc to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([8 x i8]* @.str to i64), i64 ptrtoint ([3 x i32]* @reltable.frame_desc to i64)) to i32)]
define i8* @frame_desc(i32 %0) {
%2 = icmp ugt i32 %0, -4
br i1 %2, label %53, label %3
3: ; preds = %1
%4 = and i32 %0, -2147483520
%5 = icmp eq i32 %4, 128
br i1 %5, label %6, label %51
6: ; preds = %3
%7 = tail call i32 @strcpy(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%8 = and i32 %0, -129
switch i32 %8, label %49 [
i32 0, label %9
i32 1, label %11
i32 2, label %13
i32 3, label %15
i32 4, label %17
i32 5, label %19
i32 6, label %21
i32 7, label %23
i32 8, label %25
i32 9, label %27
i32 10, label %29
i32 11, label %31
i32 12, label %33
i32 13, label %35
i32 14, label %37
i32 15, label %39
i32 16, label %41
i32 17, label %43
i32 18, label %45
i32 19, label %47
]
9: ; preds = %6
%10 = tail call i32 @strcat(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.4, i64 0, i64 0))
br label %58
11: ; preds = %6
%12 = tail call i32 @strcat(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.5, i64 0, i64 0))
br label %58
13: ; preds = %6
%14 = tail call i32 @strcat(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.6, i64 0, i64 0))
br label %58
15: ; preds = %6
%16 = tail call i32 @strcat(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.7, i64 0, i64 0))
br label %58
17: ; preds = %6
%18 = tail call i32 @strcat(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.8, i64 0, i64 0))
br label %58
19: ; preds = %6
%20 = tail call i32 @strcat(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.9, i64 0, i64 0))
br label %58
21: ; preds = %6
%22 = tail call i32 @strcat(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.10, i64 0, i64 0))
br label %58
23: ; preds = %6
%24 = tail call i32 @strcat(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.11, i64 0, i64 0))
br label %58
25: ; preds = %6
%26 = tail call i32 @strcat(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.12, i64 0, i64 0))
br label %58
27: ; preds = %6
%28 = tail call i32 @strcat(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.13, i64 0, i64 0))
br label %58
29: ; preds = %6
%30 = tail call i32 @strcat(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.14, i64 0, i64 0))
br label %58
31: ; preds = %6
%32 = tail call i32 @strcat(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.15, i64 0, i64 0))
br label %58
33: ; preds = %6
%34 = tail call i32 @strcat(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.16, i64 0, i64 0))
br label %58
35: ; preds = %6
%36 = tail call i32 @strcat(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.17, i64 0, i64 0))
br label %58
37: ; preds = %6
%38 = tail call i32 @strcat(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.18, i64 0, i64 0))
br label %58
39: ; preds = %6
%40 = tail call i32 @strcat(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.19, i64 0, i64 0))
br label %58
41: ; preds = %6
%42 = tail call i32 @strcat(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.20, i64 0, i64 0))
br label %58
43: ; preds = %6
%44 = tail call i32 @strcat(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.21, i64 0, i64 0))
br label %58
45: ; preds = %6
%46 = tail call i32 @strcat(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.22, i64 0, i64 0))
br label %58
47: ; preds = %6
%48 = tail call i32 @strcat(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.23, i64 0, i64 0))
br label %58
49: ; preds = %6
%50 = tail call i32 @sprintf(i8* dereferenceable(1) getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* dereferenceable(1) getelementptr inbounds ([15 x i8], [15 x i8]* @.str.24, i64 0, i64 0), i32 %0)
br label %58
51: ; preds = %3
%52 = tail call i32 @sprintf(i8* dereferenceable(1) getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.25, i64 0, i64 0), i32 %0)
br label %58
53: ; preds = %1
%54 = add i32 %0, 3
%55 = sext i32 %54 to i64
%56 = shl i64 %55, 2
%57 = call i8* @llvm.load.relative.i64(i8* bitcast ([3 x i32]* @reltable.frame_desc to i8*), i64 %56)
br label %58
58: ; preds = %53, %51, %49, %47, %45, %43, %41, %39, %37, %35, %33, %31, %29, %27, %25, %23, %21, %19, %17, %15, %13, %11, %9
%59 = phi i8* [ getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), %9 ], [ getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), %11 ], [ getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), %13 ], [ getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), %15 ], [ getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), %17 ], [ getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), %19 ], [ getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), %21 ], [ getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), %23 ], [ getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), %25 ], [ getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), %27 ], [ getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), %29 ], [ getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), %31 ], [ getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), %33 ], [ getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), %35 ], [ getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), %37 ], [ getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), %39 ], [ getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), %41 ], [ getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), %43 ], [ getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), %45 ], [ getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), %47 ], [ getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), %49 ], [ getelementptr inbounds ([25 x i8], [25 x i8]* @frame_desc.str, i64 0, i64 0), %51 ], [ %57, %53 ]
ret i8* %59
}