unsigned char decode_base64_pair2(const char ch2, const char ch3) {
  unsigned char octet;
  if ('A' <= ch2 && ch2 <= 'P')
    octet = 16 * (ch2 - 'A');
  else if ('Q' <= ch2 && ch2 <= 'Z')
    octet = 16 * (ch2 - 'Q');
  else if ('a' <= ch2 && ch2 <= 'f')
    octet = 16 * (ch2 - 'a' + 10);
  else if ('g' <= ch2 && ch2 <= 'v')
    octet = 16 * (ch2 - 'g');
  else if ('w' <= ch2 && ch2 <= 'z')
    octet = 16 * (ch2 - 'w');
  else if ('0' <= ch2 && ch2 <= '9')
    octet = 16 * (ch2 - '0' + 4);
  else if (ch2 == '+')
    octet = 224;
  else if (ch2 == '/')
    octet = 240;
  else
    octet = 0;
  if ('A' <= ch3 && ch3 <= 'D')
    ;
  else if ('E' <= ch3 && ch3 <= 'H')
    octet += 1;
  else if ('I' <= ch3 && ch3 <= 'L')
    octet += 2;
  else if ('M' <= ch3 && ch3 <= 'P')
    octet += 3;
  else if ('Q' <= ch3 && ch3 <= 'T')
    octet += 4;
  else if ('U' <= ch3 && ch3 <= 'X')
    octet += 5;
  else if ('Y' <= ch3 && ch3 <= 'Z')
    octet += 6;
  else if ('a' <= ch3 && ch3 <= 'b')
    octet += 6;
  else if ('c' <= ch3 && ch3 <= 'f')
    octet += 7;
  else if ('g' <= ch3 && ch3 <= 'j')
    octet += 8;
  else if ('k' <= ch3 && ch3 <= 'n')
    octet += 9;
  else if ('o' <= ch3 && ch3 <= 'r')
    octet += 10;
  else if ('s' <= ch3 && ch3 <= 'v')
    octet += 11;
  else if ('w' <= ch3 && ch3 <= 'z')
    octet += 12;
  else if ('0' <= ch3 && ch3 <= '3')
    octet += 13;
  else if ('4' <= ch3 && ch3 <= '7')
    octet += 14;
  else if ('8' <= ch3 && ch3 <= '9')
    octet += 15;
  else if (ch3 == '+')
    octet += 15;
  else if (ch3 == '/')
    octet += 15;
  else
    ;
  return octet;
}


x86 assembly (clang, -O0):
<decode_base64_pair2>:
push   %rbp
mov    %rsp,%rbp
mov    %sil,%al
mov    %dil,%cl
mov    %cl,-0x1(%rbp)
mov    %al,-0x2(%rbp)
movsbl -0x1(%rbp),%ecx
mov    $0x41,%eax
cmp    %ecx,%eax
jg     1140 <decode_base64_pair2+0x40>
movsbl -0x1(%rbp),%eax
cmp    $0x50,%eax
jg     1140 <decode_base64_pair2+0x40>
movsbl -0x1(%rbp),%eax
sub    $0x41,%eax
shl    $0x4,%eax
mov    %al,-0x3(%rbp)
jmp    1289 <decode_base64_pair2+0x189>
movsbl -0x1(%rbp),%ecx
mov    $0x51,%eax
cmp    %ecx,%eax
jg     1170 <decode_base64_pair2+0x70>
movsbl -0x1(%rbp),%eax
cmp    $0x5a,%eax
jg     1170 <decode_base64_pair2+0x70>
movsbl -0x1(%rbp),%eax
sub    $0x51,%eax
shl    $0x4,%eax
mov    %al,-0x3(%rbp)
jmp    1284 <decode_base64_pair2+0x184>
movsbl -0x1(%rbp),%ecx
mov    $0x61,%eax
cmp    %ecx,%eax
jg     11a3 <decode_base64_pair2+0xa3>
movsbl -0x1(%rbp),%eax
cmp    $0x66,%eax
jg     11a3 <decode_base64_pair2+0xa3>
movsbl -0x1(%rbp),%eax
sub    $0x61,%eax
add    $0xa,%eax
shl    $0x4,%eax
mov    %al,-0x3(%rbp)
jmp    127f <decode_base64_pair2+0x17f>
movsbl -0x1(%rbp),%ecx
mov    $0x67,%eax
cmp    %ecx,%eax
jg     11d3 <decode_base64_pair2+0xd3>
movsbl -0x1(%rbp),%eax
cmp    $0x76,%eax
jg     11d3 <decode_base64_pair2+0xd3>
movsbl -0x1(%rbp),%eax
sub    $0x67,%eax
shl    $0x4,%eax
mov    %al,-0x3(%rbp)
jmp    127a <decode_base64_pair2+0x17a>
movsbl -0x1(%rbp),%ecx
mov    $0x77,%eax
cmp    %ecx,%eax
jg     1203 <decode_base64_pair2+0x103>
movsbl -0x1(%rbp),%eax
cmp    $0x7a,%eax
jg     1203 <decode_base64_pair2+0x103>
movsbl -0x1(%rbp),%eax
sub    $0x77,%eax
shl    $0x4,%eax
mov    %al,-0x3(%rbp)
jmp    1275 <decode_base64_pair2+0x175>
movsbl -0x1(%rbp),%ecx
mov    $0x30,%eax
cmp    %ecx,%eax
jg     1236 <decode_base64_pair2+0x136>
movsbl -0x1(%rbp),%eax
cmp    $0x39,%eax
jg     1236 <decode_base64_pair2+0x136>
movsbl -0x1(%rbp),%eax
sub    $0x30,%eax
add    $0x4,%eax
shl    $0x4,%eax
mov    %al,-0x3(%rbp)
jmp    1270 <decode_base64_pair2+0x170>
movsbl -0x1(%rbp),%eax
cmp    $0x2b,%eax
jne    124c <decode_base64_pair2+0x14c>
movb   $0xe0,-0x3(%rbp)
jmp    126b <decode_base64_pair2+0x16b>
movsbl -0x1(%rbp),%eax
cmp    $0x2f,%eax
jne    1262 <decode_base64_pair2+0x162>
movb   $0xf0,-0x3(%rbp)
jmp    1266 <decode_base64_pair2+0x166>
movb   $0x0,-0x3(%rbp)
jmp    126b <decode_base64_pair2+0x16b>
jmp    1270 <decode_base64_pair2+0x170>
jmp    1275 <decode_base64_pair2+0x175>
jmp    127a <decode_base64_pair2+0x17a>
jmp    127f <decode_base64_pair2+0x17f>
jmp    1284 <decode_base64_pair2+0x184>
jmp    1289 <decode_base64_pair2+0x189>
movsbl -0x2(%rbp),%ecx
mov    $0x41,%eax
cmp    %ecx,%eax
jg     12ac <decode_base64_pair2+0x1ac>
movsbl -0x2(%rbp),%eax
cmp    $0x44,%eax
jg     12ac <decode_base64_pair2+0x1ac>
jmp    1613 <decode_base64_pair2+0x513>
movsbl -0x2(%rbp),%ecx
mov    $0x45,%eax
cmp    %ecx,%eax
jg     12d9 <decode_base64_pair2+0x1d9>
movsbl -0x2(%rbp),%eax
cmp    $0x48,%eax
jg     12d9 <decode_base64_pair2+0x1d9>
movzbl -0x3(%rbp),%eax
add    $0x1,%eax
mov    %al,-0x3(%rbp)
jmp    160e <decode_base64_pair2+0x50e>
movsbl -0x2(%rbp),%ecx
mov    $0x49,%eax
cmp    %ecx,%eax
jg     1306 <decode_base64_pair2+0x206>
movsbl -0x2(%rbp),%eax
cmp    $0x4c,%eax
jg     1306 <decode_base64_pair2+0x206>
movzbl -0x3(%rbp),%eax
add    $0x2,%eax
mov    %al,-0x3(%rbp)
jmp    1609 <decode_base64_pair2+0x509>
movsbl -0x2(%rbp),%ecx
mov    $0x4d,%eax
cmp    %ecx,%eax
jg     1333 <decode_base64_pair2+0x233>
movsbl -0x2(%rbp),%eax
cmp    $0x50,%eax
jg     1333 <decode_base64_pair2+0x233>
movzbl -0x3(%rbp),%eax
add    $0x3,%eax
mov    %al,-0x3(%rbp)
jmp    1604 <decode_base64_pair2+0x504>
movsbl -0x2(%rbp),%ecx
mov    $0x51,%eax
cmp    %ecx,%eax
jg     1360 <decode_base64_pair2+0x260>
movsbl -0x2(%rbp),%eax
cmp    $0x54,%eax
jg     1360 <decode_base64_pair2+0x260>
movzbl -0x3(%rbp),%eax
add    $0x4,%eax
mov    %al,-0x3(%rbp)
jmp    15ff <decode_base64_pair2+0x4ff>
movsbl -0x2(%rbp),%ecx
mov    $0x55,%eax
cmp    %ecx,%eax
jg     138d <decode_base64_pair2+0x28d>
movsbl -0x2(%rbp),%eax
cmp    $0x58,%eax
jg     138d <decode_base64_pair2+0x28d>
movzbl -0x3(%rbp),%eax
add    $0x5,%eax
mov    %al,-0x3(%rbp)
jmp    15fa <decode_base64_pair2+0x4fa>
movsbl -0x2(%rbp),%ecx
mov    $0x59,%eax
cmp    %ecx,%eax
jg     13ba <decode_base64_pair2+0x2ba>
movsbl -0x2(%rbp),%eax
cmp    $0x5a,%eax
jg     13ba <decode_base64_pair2+0x2ba>
movzbl -0x3(%rbp),%eax
add    $0x6,%eax
mov    %al,-0x3(%rbp)
jmp    15f5 <decode_base64_pair2+0x4f5>
movsbl -0x2(%rbp),%ecx
mov    $0x61,%eax
cmp    %ecx,%eax
jg     13e7 <decode_base64_pair2+0x2e7>
movsbl -0x2(%rbp),%eax
cmp    $0x62,%eax
jg     13e7 <decode_base64_pair2+0x2e7>
movzbl -0x3(%rbp),%eax
add    $0x6,%eax
mov    %al,-0x3(%rbp)
jmp    15f0 <decode_base64_pair2+0x4f0>
movsbl -0x2(%rbp),%ecx
mov    $0x63,%eax
cmp    %ecx,%eax
jg     1414 <decode_base64_pair2+0x314>
movsbl -0x2(%rbp),%eax
cmp    $0x66,%eax
jg     1414 <decode_base64_pair2+0x314>
movzbl -0x3(%rbp),%eax
add    $0x7,%eax
mov    %al,-0x3(%rbp)
jmp    15eb <decode_base64_pair2+0x4eb>
movsbl -0x2(%rbp),%ecx
mov    $0x67,%eax
cmp    %ecx,%eax
jg     1441 <decode_base64_pair2+0x341>
movsbl -0x2(%rbp),%eax
cmp    $0x6a,%eax
jg     1441 <decode_base64_pair2+0x341>
movzbl -0x3(%rbp),%eax
add    $0x8,%eax
mov    %al,-0x3(%rbp)
jmp    15e6 <decode_base64_pair2+0x4e6>
movsbl -0x2(%rbp),%ecx
mov    $0x6b,%eax
cmp    %ecx,%eax
jg     146e <decode_base64_pair2+0x36e>
movsbl -0x2(%rbp),%eax
cmp    $0x6e,%eax
jg     146e <decode_base64_pair2+0x36e>
movzbl -0x3(%rbp),%eax
add    $0x9,%eax
mov    %al,-0x3(%rbp)
jmp    15e1 <decode_base64_pair2+0x4e1>
movsbl -0x2(%rbp),%ecx
mov    $0x6f,%eax
cmp    %ecx,%eax
jg     149b <decode_base64_pair2+0x39b>
movsbl -0x2(%rbp),%eax
cmp    $0x72,%eax
jg     149b <decode_base64_pair2+0x39b>
movzbl -0x3(%rbp),%eax
add    $0xa,%eax
mov    %al,-0x3(%rbp)
jmp    15dc <decode_base64_pair2+0x4dc>
movsbl -0x2(%rbp),%ecx
mov    $0x73,%eax
cmp    %ecx,%eax
jg     14c8 <decode_base64_pair2+0x3c8>
movsbl -0x2(%rbp),%eax
cmp    $0x76,%eax
jg     14c8 <decode_base64_pair2+0x3c8>
movzbl -0x3(%rbp),%eax
add    $0xb,%eax
mov    %al,-0x3(%rbp)
jmp    15d7 <decode_base64_pair2+0x4d7>
movsbl -0x2(%rbp),%ecx
mov    $0x77,%eax
cmp    %ecx,%eax
jg     14f5 <decode_base64_pair2+0x3f5>
movsbl -0x2(%rbp),%eax
cmp    $0x7a,%eax
jg     14f5 <decode_base64_pair2+0x3f5>
movzbl -0x3(%rbp),%eax
add    $0xc,%eax
mov    %al,-0x3(%rbp)
jmp    15d2 <decode_base64_pair2+0x4d2>
movsbl -0x2(%rbp),%ecx
mov    $0x30,%eax
cmp    %ecx,%eax
jg     1522 <decode_base64_pair2+0x422>
movsbl -0x2(%rbp),%eax
cmp    $0x33,%eax
jg     1522 <decode_base64_pair2+0x422>
movzbl -0x3(%rbp),%eax
add    $0xd,%eax
mov    %al,-0x3(%rbp)
jmp    15cd <decode_base64_pair2+0x4cd>
movsbl -0x2(%rbp),%ecx
mov    $0x34,%eax
cmp    %ecx,%eax
jg     154f <decode_base64_pair2+0x44f>
movsbl -0x2(%rbp),%eax
cmp    $0x37,%eax
jg     154f <decode_base64_pair2+0x44f>
movzbl -0x3(%rbp),%eax
add    $0xe,%eax
mov    %al,-0x3(%rbp)
jmp    15c8 <decode_base64_pair2+0x4c8>
movsbl -0x2(%rbp),%ecx
mov    $0x38,%eax
cmp    %ecx,%eax
jg     157c <decode_base64_pair2+0x47c>
movsbl -0x2(%rbp),%eax
cmp    $0x39,%eax
jg     157c <decode_base64_pair2+0x47c>
movzbl -0x3(%rbp),%eax
add    $0xf,%eax
mov    %al,-0x3(%rbp)
jmp    15c3 <decode_base64_pair2+0x4c3>
movsbl -0x2(%rbp),%eax
cmp    $0x2b,%eax
jne    1598 <decode_base64_pair2+0x498>
movzbl -0x3(%rbp),%eax
add    $0xf,%eax
mov    %al,-0x3(%rbp)
jmp    15be <decode_base64_pair2+0x4be>
movsbl -0x2(%rbp),%eax
cmp    $0x2f,%eax
jne    15b4 <decode_base64_pair2+0x4b4>
movzbl -0x3(%rbp),%eax
add    $0xf,%eax
mov    %al,-0x3(%rbp)
jmp    15b9 <decode_base64_pair2+0x4b9>
jmp    15b9 <decode_base64_pair2+0x4b9>
jmp    15be <decode_base64_pair2+0x4be>
jmp    15c3 <decode_base64_pair2+0x4c3>
jmp    15c8 <decode_base64_pair2+0x4c8>
jmp    15cd <decode_base64_pair2+0x4cd>
jmp    15d2 <decode_base64_pair2+0x4d2>
jmp    15d7 <decode_base64_pair2+0x4d7>
jmp    15dc <decode_base64_pair2+0x4dc>
jmp    15e1 <decode_base64_pair2+0x4e1>
jmp    15e6 <decode_base64_pair2+0x4e6>
jmp    15eb <decode_base64_pair2+0x4eb>
jmp    15f0 <decode_base64_pair2+0x4f0>
jmp    15f5 <decode_base64_pair2+0x4f5>
jmp    15fa <decode_base64_pair2+0x4fa>
jmp    15ff <decode_base64_pair2+0x4ff>
jmp    1604 <decode_base64_pair2+0x504>
jmp    1609 <decode_base64_pair2+0x509>
jmp    160e <decode_base64_pair2+0x50e>
jmp    1613 <decode_base64_pair2+0x513>
movzbl -0x3(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<decode_base64_pair2>:
mov    %edi,%eax
lea    -0x41(%rax),%ecx
cmp    $0xf,%cl
jbe    1112 <decode_base64_pair2+0x12>
lea    -0x51(%rax),%ecx
cmp    $0x9,%cl
ja     1119 <decode_base64_pair2+0x19>
shl    $0x4,%al
add    $0xf0,%al
jmp    1136 <decode_base64_pair2+0x36>
lea    -0x61(%rax),%ecx
cmp    $0x5,%cl
jbe    1131 <decode_base64_pair2+0x31>
lea    -0x67(%rax),%ecx
cmp    $0xf,%cl
jbe    1131 <decode_base64_pair2+0x31>
lea    -0x77(%rax),%ecx
cmp    $0x3,%cl
ja     116b <decode_base64_pair2+0x6b>
shl    $0x4,%al
add    $0x90,%al
lea    -0x41(%rsi),%ecx
cmp    $0x4,%cl
jae    113f <decode_base64_pair2+0x3f>
ret
lea    -0x45(%rsi),%ecx
cmp    $0x3,%cl
ja     114a <decode_base64_pair2+0x4a>
add    $0x1,%al
ret
lea    -0x49(%rsi),%ecx
cmp    $0x3,%cl
ja     1155 <decode_base64_pair2+0x55>
add    $0x2,%al
ret
lea    -0x4d(%rsi),%ecx
cmp    $0x3,%cl
ja     1160 <decode_base64_pair2+0x60>
add    $0x3,%al
ret
lea    -0x51(%rsi),%ecx
cmp    $0x3,%cl
ja     117a <decode_base64_pair2+0x7a>
add    $0x4,%al
ret
lea    -0x30(%rax),%ecx
cmp    $0x9,%cl
ja     1185 <decode_base64_pair2+0x85>
shl    $0x4,%al
add    $0x40,%al
jmp    1136 <decode_base64_pair2+0x36>
lea    -0x55(%rsi),%ecx
cmp    $0x3,%cl
ja     119f <decode_base64_pair2+0x9f>
add    $0x5,%al
ret
cmp    $0x2f,%al
setne  %cl
shl    $0x4,%cl
add    $0xf0,%cl
cmp    $0x2b,%al
movzbl %cl,%ecx
mov    $0xe0,%eax
cmovne %ecx,%eax
jmp    1136 <decode_base64_pair2+0x36>
lea    -0x59(%rsi),%ecx
cmp    $0x1,%cl
jbe    11af <decode_base64_pair2+0xaf>
lea    -0x61(%rsi),%ecx
cmp    $0x1,%cl
ja     11b2 <decode_base64_pair2+0xb2>
add    $0x6,%al
ret
lea    -0x63(%rsi),%ecx
cmp    $0x3,%cl
ja     11bd <decode_base64_pair2+0xbd>
add    $0x7,%al
ret
lea    -0x67(%rsi),%ecx
cmp    $0x3,%cl
ja     11c8 <decode_base64_pair2+0xc8>
add    $0x8,%al
ret
lea    -0x6b(%rsi),%ecx
cmp    $0x3,%cl
ja     11d3 <decode_base64_pair2+0xd3>
add    $0x9,%al
ret
lea    -0x6f(%rsi),%ecx
cmp    $0x3,%cl
ja     11de <decode_base64_pair2+0xde>
add    $0xa,%al
ret
lea    -0x73(%rsi),%ecx
cmp    $0x3,%cl
ja     11e9 <decode_base64_pair2+0xe9>
add    $0xb,%al
ret
lea    -0x77(%rsi),%ecx
cmp    $0x3,%cl
ja     11f4 <decode_base64_pair2+0xf4>
add    $0xc,%al
ret
mov    %esi,%ecx
and    $0xfc,%cl
cmp    $0x34,%cl
je     1206 <decode_base64_pair2+0x106>
cmp    $0x30,%cl
jne    1209 <decode_base64_pair2+0x109>
add    $0xd,%al
ret
add    $0xe,%al
ret
mov    %esi,%ecx
and    $0xfe,%cl
cmp    $0x38,%cl
je     1223 <decode_base64_pair2+0x123>
cmp    $0x2f,%sil
je     1223 <decode_base64_pair2+0x123>
cmp    $0x2b,%sil
jne    113e <decode_base64_pair2+0x3e>
add    $0xf,%al
ret

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

LLVM IR (-O2):
define zeroext i8 @decode_base64_pair2(i8 signext %0, i8 signext %1) {
%3 = add i8 %0, -65
%4 = icmp ult i8 %3, 16
br i1 %4, label %5, label %8
5: ; preds = %2
%6 = shl i8 %0, 4
%7 = add i8 %6, -16
br label %43
8: ; preds = %2
%9 = add i8 %0, -81
%10 = icmp ult i8 %9, 10
br i1 %10, label %11, label %14
11: ; preds = %8
%12 = shl i8 %0, 4
%13 = add i8 %12, -16
br label %43
14: ; preds = %8
%15 = add i8 %0, -97
%16 = icmp ult i8 %15, 6
br i1 %16, label %17, label %20
17: ; preds = %14
%18 = shl i8 %0, 4
%19 = add nuw nsw i8 %18, -112
br label %43
20: ; preds = %14
%21 = add i8 %0, -103
%22 = icmp ult i8 %21, 16
br i1 %22, label %23, label %26
23: ; preds = %20
%24 = shl i8 %0, 4
%25 = add i8 %24, -112
br label %43
26: ; preds = %20
%27 = add i8 %0, -119
%28 = icmp ult i8 %27, 4
br i1 %28, label %29, label %32
29: ; preds = %26
%30 = shl i8 %0, 4
%31 = add i8 %30, -112
br label %43
32: ; preds = %26
%33 = add i8 %0, -48
%34 = icmp ult i8 %33, 10
br i1 %34, label %35, label %38
35: ; preds = %32
%36 = shl i8 %0, 4
%37 = add nuw i8 %36, 64
br label %43
38: ; preds = %32
%39 = icmp eq i8 %0, 47
%40 = select i1 %39, i8 -16, i8 0
%41 = icmp eq i8 %0, 43
%42 = select i1 %41, i8 -32, i8 %40
br label %43
43: ; preds = %38, %11, %23, %35, %29, %17, %5
%44 = phi i8 [ %7, %5 ], [ %13, %11 ], [ %19, %17 ], [ %25, %23 ], [ %31, %29 ], [ %37, %35 ], [ %42, %38 ]
%45 = add i8 %1, -65
%46 = icmp ult i8 %45, 4
br i1 %46, label %128, label %47
47: ; preds = %43
%48 = add i8 %1, -69
%49 = icmp ult i8 %48, 4
br i1 %49, label %50, label %52
50: ; preds = %47
%51 = add i8 %44, 1
br label %128
52: ; preds = %47
%53 = add i8 %1, -73
%54 = icmp ult i8 %53, 4
br i1 %54, label %55, label %57
55: ; preds = %52
%56 = add i8 %44, 2
br label %128
57: ; preds = %52
%58 = add i8 %1, -77
%59 = icmp ult i8 %58, 4
br i1 %59, label %60, label %62
60: ; preds = %57
%61 = add i8 %44, 3
br label %128
62: ; preds = %57
%63 = add i8 %1, -81
%64 = icmp ult i8 %63, 4
br i1 %64, label %65, label %67
65: ; preds = %62
%66 = add i8 %44, 4
br label %128
67: ; preds = %62
%68 = add i8 %1, -85
%69 = icmp ult i8 %68, 4
br i1 %69, label %70, label %72
70: ; preds = %67
%71 = add i8 %44, 5
br label %128
72: ; preds = %67
%73 = add i8 %1, -89
%74 = icmp ult i8 %73, 2
br i1 %74, label %75, label %77
75: ; preds = %72
%76 = add i8 %44, 6
br label %128
77: ; preds = %72
%78 = add i8 %1, -97
%79 = icmp ult i8 %78, 2
br i1 %79, label %80, label %82
80: ; preds = %77
%81 = add i8 %44, 6
br label %128
82: ; preds = %77
%83 = add i8 %1, -99
%84 = icmp ult i8 %83, 4
br i1 %84, label %85, label %87
85: ; preds = %82
%86 = add i8 %44, 7
br label %128
87: ; preds = %82
%88 = add i8 %1, -103
%89 = icmp ult i8 %88, 4
br i1 %89, label %90, label %92
90: ; preds = %87
%91 = add i8 %44, 8
br label %128
92: ; preds = %87
%93 = add i8 %1, -107
%94 = icmp ult i8 %93, 4
br i1 %94, label %95, label %97
95: ; preds = %92
%96 = add i8 %44, 9
br label %128
97: ; preds = %92
%98 = add i8 %1, -111
%99 = icmp ult i8 %98, 4
br i1 %99, label %100, label %102
100: ; preds = %97
%101 = add i8 %44, 10
br label %128
102: ; preds = %97
%103 = add i8 %1, -115
%104 = icmp ult i8 %103, 4
br i1 %104, label %105, label %107
105: ; preds = %102
%106 = add i8 %44, 11
br label %128
107: ; preds = %102
%108 = add i8 %1, -119
%109 = icmp ult i8 %108, 4
br i1 %109, label %110, label %112
110: ; preds = %107
%111 = add i8 %44, 12
br label %128
112: ; preds = %107
%113 = and i8 %1, -4
switch i8 %113, label %118 [
i8 48, label %114
i8 52, label %116
]
114: ; preds = %112
%115 = add i8 %44, 13
br label %128
116: ; preds = %112
%117 = add i8 %44, 14
br label %128
118: ; preds = %112
%119 = and i8 %1, -2
%120 = icmp eq i8 %119, 56
br i1 %120, label %121, label %123
121: ; preds = %118
%122 = add i8 %44, 15
br label %128
123: ; preds = %118
switch i8 %1, label %128 [
i8 43, label %124
i8 47, label %126
]
124: ; preds = %123
%125 = add i8 %44, 15
br label %128
126: ; preds = %123
%127 = add i8 %44, 15
br label %128
128: ; preds = %123, %50, %60, %70, %80, %90, %100, %110, %116, %124, %126, %121, %114, %105, %95, %85, %75, %65, %55, %43
%129 = phi i8 [ %44, %43 ], [ %51, %50 ], [ %56, %55 ], [ %61, %60 ], [ %66, %65 ], [ %71, %70 ], [ %76, %75 ], [ %81, %80 ], [ %86, %85 ], [ %91, %90 ], [ %96, %95 ], [ %101, %100 ], [ %106, %105 ], [ %111, %110 ], [ %115, %114 ], [ %117, %116 ], [ %122, %121 ], [ %125, %124 ], [ %127, %126 ], [ %44, %123 ]
ret i8 %129
}