#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*/ strcmp(char *, char *);
char *BGBDT_EntObj_SigCommonSupertype(char *sa, char *sb) {
  if (!sa)
    return (sb);
  if (!sb)
    return (sa);
  if (!strcmp(sa, sb))
    return (sa);
  if ((*sa == 'i') || (*sa == 'b') || (*sa == 'a') || (*sa == 'c') ||
      (*sa == 's') || (*sa == 't') || (*sa == 'h')) {
    if ((*sa == 'a') || (*sa == 'b') || (*sa == 'c') || (*sa == 'h')) {
      if (*sa != 'h') {
        if (*sb == 'a')
          return ("c");
        if (*sb == 'b')
          return ("c");
        if (*sb == 'c')
          return ("c");
      }
      if (*sb == 's')
        return ("s");
      if (*sb == 't')
        return ("t");
    }
    if (*sb == 'i')
      return ("i");
    if (*sb == 'x')
      return ("x");
    if (*sb == 'f')
      return ("f");
    if (*sb == 'd')
      return ("d");
    return ("i");
  }
  if (*sa == 'x') {
    if (*sb == 'i')
      return ("x");
    if (*sb == 'x')
      return ("x");
    if (*sb == 'f')
      return ("d");
    if (*sb == 'd')
      return ("d");
    return ("x");
  }
  if (*sa == 'f') {
    if (*sb == 'i')
      return ("f");
    if (*sb == 'x')
      return ("d");
    if (*sb == 'f')
      return ("f");
    if (*sb == 'd')
      return ("d");
    return ("f");
  }
  if (*sa == 'd') {
    if (*sb == 'i')
      return ("d");
    if (*sb == 'x')
      return ("d");
    if (*sb == 'f')
      return ("d");
    if (*sb == 'd')
      return ("d");
    return ("d");
  }
  return (sb);
}


x86 assembly (clang, -O0):
<BGBDT_EntObj_SigCommonSupertype>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
cmpq   $0x0,-0x10(%rbp)
jne    1138 <BGBDT_EntObj_SigCommonSupertype+0x28>
mov    -0x18(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    1555 <BGBDT_EntObj_SigCommonSupertype+0x445>
cmpq   $0x0,-0x18(%rbp)
jne    1150 <BGBDT_EntObj_SigCommonSupertype+0x40>
mov    -0x10(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    1555 <BGBDT_EntObj_SigCommonSupertype+0x445>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
call   1030 <strcmp@plt>
cmp    $0x0,%eax
jne    1173 <BGBDT_EntObj_SigCommonSupertype+0x63>
mov    -0x10(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    1555 <BGBDT_EntObj_SigCommonSupertype+0x445>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x69,%eax
je     11e3 <BGBDT_EntObj_SigCommonSupertype+0xd3>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x62,%eax
je     11e3 <BGBDT_EntObj_SigCommonSupertype+0xd3>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x61,%eax
je     11e3 <BGBDT_EntObj_SigCommonSupertype+0xd3>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x63,%eax
je     11e3 <BGBDT_EntObj_SigCommonSupertype+0xd3>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x73,%eax
je     11e3 <BGBDT_EntObj_SigCommonSupertype+0xd3>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x74,%eax
je     11e3 <BGBDT_EntObj_SigCommonSupertype+0xd3>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x68,%eax
jne    136d <BGBDT_EntObj_SigCommonSupertype+0x25d>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x61,%eax
je     1223 <BGBDT_EntObj_SigCommonSupertype+0x113>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x62,%eax
je     1223 <BGBDT_EntObj_SigCommonSupertype+0x113>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x63,%eax
je     1223 <BGBDT_EntObj_SigCommonSupertype+0x113>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x68,%eax
jne    12dd <BGBDT_EntObj_SigCommonSupertype+0x1cd>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x68,%eax
je     1298 <BGBDT_EntObj_SigCommonSupertype+0x188>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x61,%eax
jne    1253 <BGBDT_EntObj_SigCommonSupertype+0x143>
lea    0xdb6(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1555 <BGBDT_EntObj_SigCommonSupertype+0x445>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x62,%eax
jne    1273 <BGBDT_EntObj_SigCommonSupertype+0x163>
lea    0xd96(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1555 <BGBDT_EntObj_SigCommonSupertype+0x445>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x63,%eax
jne    1293 <BGBDT_EntObj_SigCommonSupertype+0x183>
lea    0xd76(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1555 <BGBDT_EntObj_SigCommonSupertype+0x445>
jmp    1298 <BGBDT_EntObj_SigCommonSupertype+0x188>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x73,%eax
jne    12b8 <BGBDT_EntObj_SigCommonSupertype+0x1a8>
lea    0xd53(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1555 <BGBDT_EntObj_SigCommonSupertype+0x445>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x74,%eax
jne    12d8 <BGBDT_EntObj_SigCommonSupertype+0x1c8>
lea    0xd35(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1555 <BGBDT_EntObj_SigCommonSupertype+0x445>
jmp    12dd <BGBDT_EntObj_SigCommonSupertype+0x1cd>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x69,%eax
jne    12fd <BGBDT_EntObj_SigCommonSupertype+0x1ed>
lea    0xd12(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1555 <BGBDT_EntObj_SigCommonSupertype+0x445>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x78,%eax
jne    131d <BGBDT_EntObj_SigCommonSupertype+0x20d>
lea    0xcf4(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1555 <BGBDT_EntObj_SigCommonSupertype+0x445>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x66,%eax
jne    133d <BGBDT_EntObj_SigCommonSupertype+0x22d>
lea    0xcd6(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1555 <BGBDT_EntObj_SigCommonSupertype+0x445>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x64,%eax
jne    135d <BGBDT_EntObj_SigCommonSupertype+0x24d>
lea    0xcb8(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1555 <BGBDT_EntObj_SigCommonSupertype+0x445>
lea    0xca2(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1555 <BGBDT_EntObj_SigCommonSupertype+0x445>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x78,%eax
jne    140d <BGBDT_EntObj_SigCommonSupertype+0x2fd>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x69,%eax
jne    139d <BGBDT_EntObj_SigCommonSupertype+0x28d>
lea    0xc74(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1555 <BGBDT_EntObj_SigCommonSupertype+0x445>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x78,%eax
jne    13bd <BGBDT_EntObj_SigCommonSupertype+0x2ad>
lea    0xc54(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1555 <BGBDT_EntObj_SigCommonSupertype+0x445>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x66,%eax
jne    13dd <BGBDT_EntObj_SigCommonSupertype+0x2cd>
lea    0xc38(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1555 <BGBDT_EntObj_SigCommonSupertype+0x445>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x64,%eax
jne    13fd <BGBDT_EntObj_SigCommonSupertype+0x2ed>
lea    0xc18(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1555 <BGBDT_EntObj_SigCommonSupertype+0x445>
lea    0xc04(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1555 <BGBDT_EntObj_SigCommonSupertype+0x445>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x66,%eax
jne    14ad <BGBDT_EntObj_SigCommonSupertype+0x39d>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x69,%eax
jne    143d <BGBDT_EntObj_SigCommonSupertype+0x32d>
lea    0xbd6(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1555 <BGBDT_EntObj_SigCommonSupertype+0x445>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x78,%eax
jne    145d <BGBDT_EntObj_SigCommonSupertype+0x34d>
lea    0xbb8(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1555 <BGBDT_EntObj_SigCommonSupertype+0x445>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x66,%eax
jne    147d <BGBDT_EntObj_SigCommonSupertype+0x36d>
lea    0xb96(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1555 <BGBDT_EntObj_SigCommonSupertype+0x445>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x64,%eax
jne    149d <BGBDT_EntObj_SigCommonSupertype+0x38d>
lea    0xb78(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1555 <BGBDT_EntObj_SigCommonSupertype+0x445>
lea    0xb66(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1555 <BGBDT_EntObj_SigCommonSupertype+0x445>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x64,%eax
jne    154d <BGBDT_EntObj_SigCommonSupertype+0x43d>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x69,%eax
jne    14dd <BGBDT_EntObj_SigCommonSupertype+0x3cd>
lea    0xb38(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1555 <BGBDT_EntObj_SigCommonSupertype+0x445>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x78,%eax
jne    14fd <BGBDT_EntObj_SigCommonSupertype+0x3ed>
lea    0xb18(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1555 <BGBDT_EntObj_SigCommonSupertype+0x445>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x66,%eax
jne    151d <BGBDT_EntObj_SigCommonSupertype+0x40d>
lea    0xaf8(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1555 <BGBDT_EntObj_SigCommonSupertype+0x445>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x64,%eax
jne    153d <BGBDT_EntObj_SigCommonSupertype+0x42d>
lea    0xad8(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1555 <BGBDT_EntObj_SigCommonSupertype+0x445>
lea    0xac8(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1555 <BGBDT_EntObj_SigCommonSupertype+0x445>
mov    -0x18(%rbp),%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<BGBDT_EntObj_SigCommonSupertype>:
push   %r14
push   %rbx
push   %rax
mov    %rsi,%r14
test   %rdi,%rdi
je     1165 <BGBDT_EntObj_SigCommonSupertype+0x55>
mov    %rdi,%rbx
test   %r14,%r14
je     1162 <BGBDT_EntObj_SigCommonSupertype+0x52>
mov    %rbx,%rdi
mov    %r14,%rsi
call   1030 <strcmp@plt>
test   %eax,%eax
je     1162 <BGBDT_EntObj_SigCommonSupertype+0x52>
mov    (%rbx),%al
add    $0x9f,%al
cmp    $0x17,%al
ja     1165 <BGBDT_EntObj_SigCommonSupertype+0x55>
movzbl %al,%eax
lea    0xebb(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    (%r14),%al
lea    -0x61(%rax),%ecx
cmp    $0x3,%cl
jae    1192 <BGBDT_EntObj_SigCommonSupertype+0x82>
lea    0xf00(%rip),%r14
jmp    1165 <BGBDT_EntObj_SigCommonSupertype+0x55>
mov    %rbx,%r14
mov    %r14,%rax
add    $0x8,%rsp
pop    %rbx
pop    %r14
ret
mov    (%r14),%al
cmp    $0x78,%al
lea    0xef0(%rip),%rcx
lea    0xee7(%rip),%r14
cmove  %rcx,%r14
cmp    $0x64,%al
cmove  %rcx,%r14
jmp    1165 <BGBDT_EntObj_SigCommonSupertype+0x55>
mov    (%r14),%al
cmp    $0x73,%al
je     11f7 <BGBDT_EntObj_SigCommonSupertype+0xe7>
cmp    $0x74,%al
jne    11a3 <BGBDT_EntObj_SigCommonSupertype+0x93>
lea    0xec3(%rip),%r14
jmp    1165 <BGBDT_EntObj_SigCommonSupertype+0x55>
mov    (%r14),%al
cmp    $0x64,%al
je     11bb <BGBDT_EntObj_SigCommonSupertype+0xab>
cmp    $0x66,%al
je     11df <BGBDT_EntObj_SigCommonSupertype+0xcf>
cmp    $0x78,%al
jne    11eb <BGBDT_EntObj_SigCommonSupertype+0xdb>
lea    0xeaf(%rip),%r14
jmp    1165 <BGBDT_EntObj_SigCommonSupertype+0x55>
lea    0xeaa(%rip),%r14
jmp    1165 <BGBDT_EntObj_SigCommonSupertype+0x55>
mov    (%r14),%al
and    $0xfd,%al
cmp    $0x64,%al
lea    0xe9a(%rip),%rax
lea    0xe8f(%rip),%r14
cmove  %rax,%r14
jmp    1165 <BGBDT_EntObj_SigCommonSupertype+0x55>
lea    0xe84(%rip),%r14
jmp    1165 <BGBDT_EntObj_SigCommonSupertype+0x55>
lea    0xe74(%rip),%r14
jmp    1165 <BGBDT_EntObj_SigCommonSupertype+0x55>
lea    0xe64(%rip),%r14
jmp    1165 <BGBDT_EntObj_SigCommonSupertype+0x55>

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

LLVM IR (-O2):
@.str = [2 x i8] c"c\00"
@.str.1 = [2 x i8] c"s\00"
@.str.2 = [2 x i8] c"t\00"
@.str.3 = [2 x i8] c"i\00"
@.str.4 = [2 x i8] c"x\00"
@.str.5 = [2 x i8] c"f\00"
@.str.6 = [2 x i8] c"d\00"
define i8* @BGBDT_EntObj_SigCommonSupertype(i8* %0, i8* %1) {
%3 = icmp eq i8* %0, null
br i1 %3, label %37, label %4
4: ; preds = %2
%5 = icmp eq i8* %1, null
br i1 %5, label %37, label %6
6: ; preds = %4
%7 = tail call i32 @strcmp(i8* %0, i8* %1)
%8 = icmp eq i32 %7, 0
br i1 %8, label %37, label %9
9: ; preds = %6
%10 = load i8, i8* %0
switch i8 %10, label %37 [
i8 100, label %36
i8 102, label %30
i8 120, label %25
i8 116, label %20
i8 115, label %20
i8 105, label %20
i8 104, label %15
i8 97, label %11
i8 98, label %11
i8 99, label %11
]
11: ; preds = %9, %9, %9
%12 = load i8, i8* %1
%13 = add i8 %12, -97
%14 = icmp ult i8 %13, 3
br i1 %14, label %37, label %17
15: ; preds = %9
%16 = load i8, i8* %1
br label %17
17: ; preds = %15, %11
%18 = phi i8 [ %16, %15 ], [ %12, %11 ]
switch i8 %18, label %20 [
i8 115, label %37
i8 116, label %19
]
19: ; preds = %17
br label %37
20: ; preds = %9, %9, %9, %17
%21 = load i8, i8* %1
switch i8 %21, label %37 [
i8 100, label %24
i8 120, label %22
i8 102, label %23
]
22: ; preds = %20
br label %37
23: ; preds = %20
br label %37
24: ; preds = %20
br label %37
25: ; preds = %9
%26 = load i8, i8* %1
%27 = and i8 %26, -3
%28 = icmp eq i8 %27, 100
%29 = select i1 %28, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.6, i64 0, i64 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.4, i64 0, i64 0)
br label %37
30: ; preds = %9
%31 = load i8, i8* %1
%32 = icmp eq i8 %31, 100
%33 = icmp eq i8 %31, 120
%34 = or i1 %32, %33
%35 = select i1 %34, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.6, i64 0, i64 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.5, i64 0, i64 0)
br label %37
36: ; preds = %9
br label %37
37: ; preds = %9, %36, %30, %25, %11, %20, %17, %6, %4, %2, %24, %23, %22, %19
%38 = phi i8* [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.2, i64 0, i64 0), %19 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.4, i64 0, i64 0), %22 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.5, i64 0, i64 0), %23 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.6, i64 0, i64 0), %24 ], [ %1, %2 ], [ %0, %4 ], [ %0, %6 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0), %11 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), %17 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0), %20 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.6, i64 0, i64 0), %36 ], [ %1, %9 ], [ %29, %25 ], [ %35, %30 ]
ret i8* %38
}