#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*/ isdigit(char);
int /*<<< orphan*/ islower(char);
scalar_t__ isspace(char);
int /*<<< orphan*/ isupper(char);
char *get_arg(char **text) {
  char *start;
  char *rewrite;
  char *end;
  int qstate = 0;
  int qval = 0;
  if (!text)
    return NULL;
  start = *text;
  while (*start && isspace(*start))
    start++;
  if (!*start)
    return NULL;
  end = start;
  rewrite = start;
  while (*end) {
    switch (qstate) {
    case 0:
      if (isspace(*end))
        goto out;
      else if (*end == '"')
        qstate = 1;
      else
        *(rewrite++) = *end;
      break;
    case 1:
      if (*end == '"')
        qstate = 0;
      else if (*end == '\\')
        qstate = 2;
      else
        *(rewrite++) = *end;
      break;
    case 2:
      if (*end == '\\')
        *(rewrite++) = '\\';
      else if (*end == 'n')
        *(rewrite++) = '\n';
      else if (*end == 'r')
        *(rewrite++) = '\r';
      else if (*end == 't')
        *(rewrite++) = '\t';
      else if (*end >= '0' && *end <= '3') {
        qstate = 30;
        qval = *end - '0';
      } else if (*end == 'x') {
        qstate = 40;
        qval = 0;
      } else
        *(rewrite++) = *end;
      if (qstate == 2)
        qstate = 1;
      break;
    case 30:
    case 31:
      if (*end >= '0' && *end <= '7')
        qval = (qval << 3) | (*end - '0');
      if (qstate == 31) {
        *(rewrite++) = qval;
        qstate = 1;
      } else {
        qstate++;
      }
      break;
    case 40:
    case 41:
      if (isdigit(*end))
        qval = (qval << 4) | (*end - '0');
      else if (isupper(*end))
        qval = (qval << 4) | (*end - 'A' + 10);
      else if (islower(*end))
        qval = (qval << 4) | (*end - 'a' + 10);
      if (qstate == 41) {
        *(rewrite++) = qval;
        qstate = 1;
      } else {
        qstate++;
      }
      break;
    }
    end++;
  }
out:
  while (*end && isspace(*end))
    end++;
  *rewrite = 0;
  *text = end;
  return start;
}


x86 assembly (clang, -O0):
<get_arg>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %rdi,-0x10(%rbp)
movl   $0x0,-0x2c(%rbp)
movl   $0x0,-0x30(%rbp)
cmpq   $0x0,-0x10(%rbp)
jne    1172 <get_arg+0x32>
movq   $0x0,-0x8(%rbp)
jmp    15d6 <get_arg+0x496>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x31(%rbp)
je     11a8 <get_arg+0x68>
mov    -0x18(%rbp),%rax
movsbl (%rax),%edi
call   1050 <isspace@plt>
cmp    $0x0,%rax
setne  %al
mov    %al,-0x31(%rbp)
mov    -0x31(%rbp),%al
test   $0x1,%al
jne    11b8 <get_arg+0x78>
jmp    11c9 <get_arg+0x89>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    117d <get_arg+0x3d>
mov    -0x18(%rbp),%rax
cmpb   $0x0,(%rax)
jne    11e3 <get_arg+0xa3>
movq   $0x0,-0x8(%rbp)
jmp    15d6 <get_arg+0x496>
mov    -0x18(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%rax
cmpb   $0x0,(%rax)
je     1566 <get_arg+0x426>
mov    -0x2c(%rbp),%eax
mov    %rax,-0x40(%rbp)
sub    $0x29,%rax
ja     1555 <get_arg+0x415>
mov    -0x40(%rbp),%rax
lea    0xde4(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x28(%rbp),%rax
movsbl (%rax),%edi
call   1050 <isspace@plt>
cmp    $0x0,%rax
je     1240 <get_arg+0x100>
jmp    156b <get_arg+0x42b>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x22,%eax
jne    125c <get_arg+0x11c>
movl   $0x1,-0x2c(%rbp)
jmp    1273 <get_arg+0x133>
mov    -0x28(%rbp),%rax
mov    (%rax),%cl
mov    -0x20(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x20(%rbp)
mov    %cl,(%rax)
jmp    1278 <get_arg+0x138>
jmp    1555 <get_arg+0x415>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x22,%eax
jne    1299 <get_arg+0x159>
movl   $0x0,-0x2c(%rbp)
jmp    12d1 <get_arg+0x191>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5c,%eax
jne    12b5 <get_arg+0x175>
movl   $0x2,-0x2c(%rbp)
jmp    12cc <get_arg+0x18c>
mov    -0x28(%rbp),%rax
mov    (%rax),%cl
mov    -0x20(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x20(%rbp)
mov    %cl,(%rax)
jmp    12d1 <get_arg+0x191>
jmp    1555 <get_arg+0x415>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5c,%eax
jne    12fd <get_arg+0x1bd>
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
movb   $0x5c,(%rax)
jmp    13fe <get_arg+0x2be>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x6e,%eax
jne    1324 <get_arg+0x1e4>
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
movb   $0xa,(%rax)
jmp    13f9 <get_arg+0x2b9>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x72,%eax
jne    134b <get_arg+0x20b>
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
movb   $0xd,(%rax)
jmp    13f4 <get_arg+0x2b4>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x74,%eax
jne    1372 <get_arg+0x232>
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
movb   $0x9,(%rax)
jmp    13ef <get_arg+0x2af>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x30,%eax
jl     13ab <get_arg+0x26b>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x33,%eax
jg     13ab <get_arg+0x26b>
movl   $0x1e,-0x2c(%rbp)
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
sub    $0x30,%eax
mov    %eax,-0x30(%rbp)
jmp    13ea <get_arg+0x2aa>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x78,%eax
jne    13ce <get_arg+0x28e>
movl   $0x28,-0x2c(%rbp)
movl   $0x0,-0x30(%rbp)
jmp    13e5 <get_arg+0x2a5>
mov    -0x28(%rbp),%rax
mov    (%rax),%cl
mov    -0x20(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x20(%rbp)
mov    %cl,(%rax)
jmp    13ea <get_arg+0x2aa>
jmp    13ef <get_arg+0x2af>
jmp    13f4 <get_arg+0x2b4>
jmp    13f9 <get_arg+0x2b9>
jmp    13fe <get_arg+0x2be>
cmpl   $0x2,-0x2c(%rbp)
jne    140f <get_arg+0x2cf>
movl   $0x1,-0x2c(%rbp)
jmp    1555 <get_arg+0x415>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x30,%eax
jl     1449 <get_arg+0x309>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x37,%eax
jg     1449 <get_arg+0x309>
mov    -0x30(%rbp),%eax
shl    $0x3,%eax
mov    -0x28(%rbp),%rcx
movsbl (%rcx),%ecx
sub    $0x30,%ecx
or     %ecx,%eax
mov    %eax,-0x30(%rbp)
cmpl   $0x1f,-0x2c(%rbp)
jne    1475 <get_arg+0x335>
mov    -0x30(%rbp),%eax
mov    %al,%cl
mov    -0x20(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x20(%rbp)
mov    %cl,(%rax)
movl   $0x1,-0x2c(%rbp)
jmp    147e <get_arg+0x33e>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1555 <get_arg+0x415>
mov    -0x28(%rbp),%rax
movsbl (%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     14b2 <get_arg+0x372>
mov    -0x30(%rbp),%eax
shl    $0x4,%eax
mov    -0x28(%rbp),%rcx
movsbl (%rcx),%ecx
sub    $0x30,%ecx
or     %ecx,%eax
mov    %eax,-0x30(%rbp)
jmp    151b <get_arg+0x3db>
mov    -0x28(%rbp),%rax
movsbl (%rax),%edi
call   1060 <isupper@plt>
cmp    $0x0,%eax
je     14e4 <get_arg+0x3a4>
mov    -0x30(%rbp),%eax
shl    $0x4,%eax
mov    -0x28(%rbp),%rcx
movsbl (%rcx),%ecx
sub    $0x41,%ecx
add    $0xa,%ecx
or     %ecx,%eax
mov    %eax,-0x30(%rbp)
jmp    1516 <get_arg+0x3d6>
mov    -0x28(%rbp),%rax
movsbl (%rax),%edi
call   1040 <islower@plt>
cmp    $0x0,%eax
je     1511 <get_arg+0x3d1>
mov    -0x30(%rbp),%eax
shl    $0x4,%eax
mov    -0x28(%rbp),%rcx
movsbl (%rcx),%ecx
sub    $0x61,%ecx
add    $0xa,%ecx
or     %ecx,%eax
mov    %eax,-0x30(%rbp)
jmp    1516 <get_arg+0x3d6>
jmp    151b <get_arg+0x3db>
cmpl   $0x29,-0x2c(%rbp)
jne    1547 <get_arg+0x407>
mov    -0x30(%rbp),%eax
mov    %al,%cl
mov    -0x20(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x20(%rbp)
mov    %cl,(%rax)
movl   $0x1,-0x2c(%rbp)
jmp    1550 <get_arg+0x410>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1555 <get_arg+0x415>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    11f3 <get_arg+0xb3>
jmp    156b <get_arg+0x42b>
jmp    1570 <get_arg+0x430>
mov    -0x28(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x41(%rbp)
je     159b <get_arg+0x45b>
mov    -0x28(%rbp),%rax
movsbl (%rax),%edi
call   1050 <isspace@plt>
cmp    $0x0,%rax
setne  %al
mov    %al,-0x41(%rbp)
mov    -0x41(%rbp),%al
test   $0x1,%al
jne    15ab <get_arg+0x46b>
jmp    15bc <get_arg+0x47c>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    1570 <get_arg+0x430>
mov    -0x20(%rbp),%rax
movb   $0x0,(%rax)
mov    -0x28(%rbp),%rcx
mov    -0x10(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x18(%rbp),%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<get_arg>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
test   %rdi,%rdi
je     119a <get_arg+0x5a>
mov    %rdi,%rbp
mov    (%rdi),%rbx
mov    (%rbx),%al
test   %al,%al
je     119a <get_arg+0x5a>
nopl   0x0(%rax)
movsbl %al,%edi
call   1050 <isspace@plt>
test   %rax,%rax
je     117b <get_arg+0x3b>
movzbl 0x1(%rbx),%eax
add    $0x1,%rbx
test   %al,%al
jne    1160 <get_arg+0x20>
jmp    119a <get_arg+0x5a>
mov    (%rbx),%al
xor    %r13d,%r13d
test   %al,%al
je     119a <get_arg+0x5a>
mov    %rbp,(%rsp)
lea    0xe71(%rip),%rbp
xor    %r14d,%r14d
mov    %rbx,%r15
mov    %rbx,%r12
jmp    11cd <get_arg+0x8d>
xor    %ebx,%ebx
mov    %rbx,%rax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    %r13b,(%r12)
add    $0x1,%r12
mov    $0x1,%r14d
movzbl 0x1(%r15),%eax
add    $0x1,%r15
test   %al,%al
je     135a <get_arg+0x21a>
cmp    $0x29,%r14d
ja     11bc <get_arg+0x7c>
mov    %r14d,%ecx
movslq 0x0(%rbp,%rcx,4),%rcx
add    %rbp,%rcx
jmp    *%rcx
movzbl %al,%ecx
and    $0xf8,%al
lea    0x0(,%r13,8),%edx
add    $0xffffffd0,%ecx
or     %edx,%ecx
cmp    $0x30,%al
cmove  %ecx,%r13d
cmp    $0x1f,%r14d
je     11ae <get_arg+0x6e>
mov    $0x1f,%r14d
jmp    11bc <get_arg+0x7c>
cs nopw 0x0(%rax,%rax,1)
movsbl %al,%edi
call   1030 <isdigit@plt>
mov    $0xffffffd0,%ecx
test   %eax,%eax
jne    1250 <get_arg+0x110>
movsbl (%r15),%edi
call   1060 <isupper@plt>
mov    $0xffffffc9,%ecx
test   %eax,%eax
jne    1250 <get_arg+0x110>
movsbl (%r15),%edi
call   1040 <islower@plt>
mov    $0xffffffa9,%ecx
test   %eax,%eax
je     125d <get_arg+0x11d>
cs nopw 0x0(%rax,%rax,1)
nop
shl    $0x4,%r13d
movzbl (%r15),%eax
add    %ecx,%eax
or     %eax,%r13d
cmp    $0x29,%r14d
je     11ae <get_arg+0x6e>
mov    $0x29,%r14d
jmp    11bc <get_arg+0x7c>
movsbl %al,%edi
call   1050 <isspace@plt>
movzbl (%r15),%ecx
test   %rax,%rax
jne    1356 <get_arg+0x216>
mov    $0x1,%r14d
cmp    $0x22,%cl
je     11bc <get_arg+0x7c>
mov    %cl,(%r12)
add    $0x1,%r12
xor    %r14d,%r14d
jmp    11bc <get_arg+0x7c>
cmp    $0x22,%al
je     12e2 <get_arg+0x1a2>
cmp    $0x5c,%al
jne    1337 <get_arg+0x1f7>
mov    $0x2,%r14d
jmp    11bc <get_arg+0x7c>
lea    -0x5c(%rax),%ecx
cmp    $0x18,%cl
ja     12ea <get_arg+0x1aa>
movzbl %cl,%ecx
lea    0xdd9(%rip),%rdx
movslq (%rdx,%rcx,4),%rcx
add    %rdx,%rcx
jmp    *%rcx
movb   $0x5c,(%r12)
jmp    11b2 <get_arg+0x72>
xor    %r14d,%r14d
jmp    11bc <get_arg+0x7c>
mov    %eax,%ecx
and    $0xfc,%cl
cmp    $0x30,%cl
jne    1325 <get_arg+0x1e5>
movzbl %al,%r13d
add    $0xffffffd0,%r13d
mov    $0x1e,%r14d
jmp    11bc <get_arg+0x7c>
movb   $0xa,(%r12)
jmp    11b2 <get_arg+0x72>
movb   $0xd,(%r12)
jmp    11b2 <get_arg+0x72>
movb   $0x9,(%r12)
jmp    11b2 <get_arg+0x72>
cmp    $0x78,%al
jne    1337 <get_arg+0x1f7>
xor    %r13d,%r13d
mov    $0x28,%r14d
jmp    11bc <get_arg+0x7c>
mov    %al,(%r12)
jmp    11b2 <get_arg+0x72>
movsbl %cl,%edi
call   1050 <isspace@plt>
test   %rax,%rax
je     135a <get_arg+0x21a>
movzbl 0x1(%r15),%ecx
add    $0x1,%r15
test   %cl,%cl
jne    1340 <get_arg+0x200>
movb   $0x0,(%r12)
mov    (%rsp),%rax
mov    %r15,(%rax)
jmp    119c <get_arg+0x5c>

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

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