int getcnv(int *flags, int *width, int *prec, int *bytes,
           const unsigned char **fmt) {
  int ch;
  *flags = 0;
  for (; (ch = **fmt); ++*fmt) {
    switch (ch) {
    case '#':
      *flags |= 1;
      break;
    case '0':
      *flags |= 2;
      break;
    case '-':
      *flags |= 4;
      break;
    case ' ':
      *flags |= 8;
      break;
    case '+':
      *flags |= 16;
      break;
    default:
      goto width;
    }
  }
width:
  *width = getint(fmt);
  *prec = (**fmt == '.') ? (++*fmt, getint(fmt)) : -1;
  *bytes = 0;
  switch ((ch = **fmt)) {
  case '%':
    break;
  case 'c':
    *bytes = 1;
    break;
  case 'd':
  case 'i':
  case 'o':
  case 'u':
  case 'X':
  case 'x':
    *bytes = 4;
    break;
  case 's':
    if (*prec == -1)
      return 0;
    *bytes = *prec;
    break;
  case '_':
    switch (*++*fmt) {
    case 'a':
      switch (*++*fmt) {
      case 'd':
        ch = (((0xff & ('d')) << 8) | (0xff & ('_')));
        break;
      case 'o':
        ch = (((0xff & ('o')) << 8) | (0xff & ('_')));
        break;
      case 'x':
        ch = (((0xff & ('x')) << 8) | (0xff & ('_')));
        break;
      default:
        return 0;
      }
      *bytes = 0;
      break;
    case 'A':
      switch (*++*fmt) {
      case 'd':
        ch = (((0xff & ('D')) << 8) | (0xff & ('_')));
        break;
      case 'o':
        ch = (((0xff & ('O')) << 8) | (0xff & ('_')));
        break;
      case 'x':
        ch = (((0xff & ('X')) << 8) | (0xff & ('_')));
        break;
      default:
        return 0;
      }
      *bytes = 0;
      return 0;
      break;
    case 'c':
      ch = (((0xff & ('c')) << 8) | (0xff & ('_')));
      *bytes = 1;
      break;
    case 'p':
      ch = (((0xff & ('p')) << 8) | (0xff & ('_')));
      *bytes = 1;
      break;
    case 'u':
      ch = (((0xff & ('u')) << 8) | (0xff & ('_')));
      *bytes = 1;
      break;
    default:
      return 0;
    }
    break;
  }
  ++*fmt;
  return ch;
}


x86 assembly (clang, -O0):
<getcnv>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
mov    %r8,-0x30(%rbp)
mov    -0x10(%rbp),%rax
movl   $0x0,(%rax)
mov    -0x30(%rbp),%rax
mov    (%rax),%rax
movzbl (%rax),%eax
mov    %eax,-0x34(%rbp)
cmp    $0x0,%eax
je     11e2 <getcnv+0xd2>
mov    -0x34(%rbp),%eax
add    $0xffffffe0,%eax
mov    %eax,%ecx
mov    %rcx,-0x40(%rbp)
sub    $0x10,%eax
ja     11c5 <getcnv+0xb5>
mov    -0x40(%rbp),%rax
lea    0xe94(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x10(%rbp),%rax
mov    (%rax),%ecx
or     $0x1,%ecx
mov    %ecx,(%rax)
jmp    11ca <getcnv+0xba>
mov    -0x10(%rbp),%rax
mov    (%rax),%ecx
or     $0x2,%ecx
mov    %ecx,(%rax)
jmp    11ca <getcnv+0xba>
mov    -0x10(%rbp),%rax
mov    (%rax),%ecx
or     $0x4,%ecx
mov    %ecx,(%rax)
jmp    11ca <getcnv+0xba>
mov    -0x10(%rbp),%rax
mov    (%rax),%ecx
or     $0x8,%ecx
mov    %ecx,(%rax)
jmp    11ca <getcnv+0xba>
mov    -0x10(%rbp),%rax
mov    (%rax),%ecx
or     $0x10,%ecx
mov    %ecx,(%rax)
jmp    11ca <getcnv+0xba>
jmp    11e7 <getcnv+0xd7>
jmp    11cf <getcnv+0xbf>
mov    -0x30(%rbp),%rax
mov    (%rax),%rcx
add    $0x1,%rcx
mov    %rcx,(%rax)
jmp    1136 <getcnv+0x26>
jmp    11e7 <getcnv+0xd7>
mov    -0x30(%rbp),%rdi
mov    $0x0,%al
call   1030 <getint@plt>
mov    %eax,%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x30(%rbp),%rax
mov    (%rax),%rax
movzbl (%rax),%eax
cmp    $0x2e,%eax
jne    122e <getcnv+0x11e>
mov    -0x30(%rbp),%rax
mov    (%rax),%rcx
add    $0x1,%rcx
mov    %rcx,(%rax)
mov    -0x30(%rbp),%rdi
mov    $0x0,%al
call   1030 <getint@plt>
mov    %eax,-0x44(%rbp)
jmp    123b <getcnv+0x12b>
mov    $0xffffffff,%eax
mov    %eax,-0x44(%rbp)
jmp    123b <getcnv+0x12b>
mov    -0x44(%rbp),%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x28(%rbp),%rax
movl   $0x0,(%rax)
mov    -0x30(%rbp),%rax
mov    (%rax),%rax
movzbl (%rax),%eax
mov    %eax,-0x34(%rbp)
add    $0xffffffdb,%eax
mov    %eax,%ecx
mov    %rcx,-0x50(%rbp)
sub    $0x53,%eax
ja     14a0 <getcnv+0x390>
mov    -0x50(%rbp),%rax
lea    0xdcc(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
jmp    14a0 <getcnv+0x390>
mov    -0x28(%rbp),%rax
movl   $0x1,(%rax)
jmp    14a0 <getcnv+0x390>
mov    -0x28(%rbp),%rax
movl   $0x4,(%rax)
jmp    14a0 <getcnv+0x390>
mov    -0x20(%rbp),%rax
cmpl   $0xffffffff,(%rax)
jne    12bd <getcnv+0x1ad>
movl   $0x0,-0x4(%rbp)
jmp    14b4 <getcnv+0x3a4>
mov    -0x20(%rbp),%rax
mov    (%rax),%ecx
mov    -0x28(%rbp),%rax
mov    %ecx,(%rax)
jmp    14a0 <getcnv+0x390>
mov    -0x30(%rbp),%rcx
mov    (%rcx),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,(%rcx)
movzbl 0x1(%rax),%eax
mov    %eax,-0x54(%rbp)
sub    $0x41,%eax
je     13bf <getcnv+0x2af>
jmp    12f4 <getcnv+0x1e4>
mov    -0x54(%rbp),%eax
sub    $0x61,%eax
je     1338 <getcnv+0x228>
jmp    1305 <getcnv+0x1f5>
mov    -0x54(%rbp),%eax
sub    $0x63,%eax
je     144d <getcnv+0x33d>
jmp    1316 <getcnv+0x206>
mov    -0x54(%rbp),%eax
sub    $0x70,%eax
je     1463 <getcnv+0x353>
jmp    1327 <getcnv+0x217>
mov    -0x54(%rbp),%eax
sub    $0x75,%eax
je     1479 <getcnv+0x369>
jmp    148f <getcnv+0x37f>
mov    -0x30(%rbp),%rcx
mov    (%rcx),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,(%rcx)
movzbl 0x1(%rax),%eax
mov    %eax,-0x58(%rbp)
sub    $0x64,%eax
je     1380 <getcnv+0x270>
jmp    135e <getcnv+0x24e>
mov    -0x58(%rbp),%eax
sub    $0x6f,%eax
je     138c <getcnv+0x27c>
jmp    136f <getcnv+0x25f>
mov    -0x58(%rbp),%eax
sub    $0x78,%eax
je     1398 <getcnv+0x288>
jmp    13a4 <getcnv+0x294>
movl   $0x645f,-0x34(%rbp)
jmp    13b0 <getcnv+0x2a0>
movl   $0x6f5f,-0x34(%rbp)
jmp    13b0 <getcnv+0x2a0>
movl   $0x785f,-0x34(%rbp)
jmp    13b0 <getcnv+0x2a0>
movl   $0x0,-0x4(%rbp)
jmp    14b4 <getcnv+0x3a4>
mov    -0x28(%rbp),%rax
movl   $0x0,(%rax)
jmp    149b <getcnv+0x38b>
mov    -0x30(%rbp),%rcx
mov    (%rcx),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,(%rcx)
movzbl 0x1(%rax),%eax
mov    %eax,-0x5c(%rbp)
sub    $0x64,%eax
je     1407 <getcnv+0x2f7>
jmp    13e5 <getcnv+0x2d5>
mov    -0x5c(%rbp),%eax
sub    $0x6f,%eax
je     1413 <getcnv+0x303>
jmp    13f6 <getcnv+0x2e6>
mov    -0x5c(%rbp),%eax
sub    $0x78,%eax
je     141f <getcnv+0x30f>
jmp    142b <getcnv+0x31b>
movl   $0x445f,-0x34(%rbp)
jmp    1437 <getcnv+0x327>
movl   $0x4f5f,-0x34(%rbp)
jmp    1437 <getcnv+0x327>
movl   $0x585f,-0x34(%rbp)
jmp    1437 <getcnv+0x327>
movl   $0x0,-0x4(%rbp)
jmp    14b4 <getcnv+0x3a4>
mov    -0x28(%rbp),%rax
movl   $0x0,(%rax)
movl   $0x0,-0x4(%rbp)
jmp    14b4 <getcnv+0x3a4>
movl   $0x635f,-0x34(%rbp)
mov    -0x28(%rbp),%rax
movl   $0x1,(%rax)
jmp    149b <getcnv+0x38b>
movl   $0x705f,-0x34(%rbp)
mov    -0x28(%rbp),%rax
movl   $0x1,(%rax)
jmp    149b <getcnv+0x38b>
movl   $0x755f,-0x34(%rbp)
mov    -0x28(%rbp),%rax
movl   $0x1,(%rax)
jmp    149b <getcnv+0x38b>
movl   $0x0,-0x4(%rbp)
jmp    14b4 <getcnv+0x3a4>
jmp    14a0 <getcnv+0x390>
mov    -0x30(%rbp),%rax
mov    (%rax),%rcx
add    $0x1,%rcx
mov    %rcx,(%rax)
mov    -0x34(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<getcnv>:
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    %r8,%r13
mov    %rcx,%r14
mov    %rdx,%r15
mov    %rsi,%r12
movl   $0x0,(%rdi)
mov    (%r8),%rax
add    $0x1,%rax
xor    %ecx,%ecx
lea    0xec5(%rip),%rdx
jmp    115c <getcnv+0x4c>
mov    $0x10,%esi
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
or     %esi,%ecx
mov    %ecx,(%rdi)
mov    %rax,0x0(%r13)
add    $0x1,%rax
movzbl -0x1(%rax),%ebx
add    $0xe0,%bl
cmp    $0x10,%bl
ja     118e <getcnv+0x7e>
mov    $0x1,%esi
movzbl %bl,%ebx
movslq (%rdx,%rbx,4),%rbx
add    %rdx,%rbx
jmp    *%rbx
mov    $0x8,%esi
jmp    1150 <getcnv+0x40>
mov    $0x4,%esi
jmp    1150 <getcnv+0x40>
mov    $0x2,%esi
jmp    1150 <getcnv+0x40>
mov    %r13,%rdi
xor    %eax,%eax
call   1030 <getint@plt>
mov    %eax,(%r12)
mov    0x0(%r13),%rcx
mov    $0xffffffff,%eax
cmpb   $0x2e,(%rcx)
jne    11c0 <getcnv+0xb0>
add    $0x1,%rcx
mov    %rcx,0x0(%r13)
mov    %r13,%rdi
xor    %eax,%eax
call   1030 <getint@plt>
mov    0x0(%r13),%rcx
mov    %eax,(%r15)
movl   $0x0,(%r14)
movzbl (%rcx),%eax
lea    -0x58(%rax),%esi
cmp    $0x20,%sil
ja     120b <getcnv+0xfb>
mov    $0x63,%edi
mov    $0x1,%r8d
movzbl %sil,%esi
lea    0xe58(%rip),%rbx
movslq (%rbx,%rsi,4),%rdx
add    %rbx,%rdx
mov    %rcx,%rsi
jmp    *%rdx
mov    $0x4,%r8d
mov    %rcx,%rsi
mov    %eax,%edi
mov    %r8d,(%r14)
mov    %rsi,%rcx
mov    %edi,%eax
add    $0x1,%rcx
mov    %rcx,0x0(%r13)
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
ret
lea    0x1(%rcx),%rsi
mov    %rsi,0x0(%r13)
mov    0x1(%rcx),%dil
xor    %eax,%eax
lea    -0x61(%rdi),%ebx
cmp    $0x14,%bl
ja     1281 <getcnv+0x171>
mov    $0x635f,%edi
movzbl %bl,%edx
lea    0xe86(%rip),%rbx
movslq (%rbx,%rdx,4),%rdx
add    %rbx,%rdx
jmp    *%rdx
lea    0x2(%rcx),%rsi
mov    %rsi,0x0(%r13)
mov    0x2(%rcx),%al
xor    %r8d,%r8d
cmp    $0x64,%al
je     12d0 <getcnv+0x1c0>
cmp    $0x78,%al
je     12da <getcnv+0x1ca>
cmp    $0x6f,%al
jne    127d <getcnv+0x16d>
mov    $0x6f5f,%edi
jmp    1203 <getcnv+0xf3>
mov    (%r15),%r8d
mov    $0x73,%edi
mov    %rcx,%rsi
cmp    $0xffffffff,%r8d
jne    1203 <getcnv+0xf3>
xor    %eax,%eax
jmp    1213 <getcnv+0x103>
cmp    $0x41,%dil
jne    1213 <getcnv+0x103>
lea    0x2(%rcx),%rdx
mov    %rdx,0x0(%r13)
mov    0x2(%rcx),%cl
add    $0x9c,%cl
cmp    $0x14,%cl
ja     1213 <getcnv+0x103>
movzbl %cl,%ecx
mov    $0x100801,%edx
bt     %rcx,%rdx
jae    1213 <getcnv+0x103>
movl   $0x0,(%r14)
jmp    1213 <getcnv+0x103>
mov    $0x705f,%edi
jmp    1203 <getcnv+0xf3>
mov    $0x755f,%edi
jmp    1203 <getcnv+0xf3>
mov    $0x645f,%edi
jmp    1203 <getcnv+0xf3>
mov    $0x785f,%edi
jmp    1203 <getcnv+0xf3>

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

LLVM IR (-O2):
define i32 @getcnv(i32* nocapture %0, i32* nocapture writeonly %1, i32* nocapture %2, i32* nocapture writeonly %3, i8** %4) {
store i32 0, i32* %0
%6 = load i8*, i8** %4
br label %7
7: ; preds = %15, %5
%8 = phi i32 [ %17, %15 ], [ 0, %5 ]
%9 = phi i8* [ %18, %15 ], [ %6, %5 ]
%10 = load i8, i8* %9
switch i8 %10, label %19 [
i8 43, label %14
i8 35, label %15
i8 48, label %11
i8 45, label %12
i8 32, label %13
]
11: ; preds = %7
br label %15
12: ; preds = %7
br label %15
13: ; preds = %7
br label %15
14: ; preds = %7
br label %15
15: ; preds = %7, %11, %12, %13, %14
%16 = phi i32 [ 2, %11 ], [ 4, %12 ], [ 8, %13 ], [ 16, %14 ], [ 1, %7 ]
%17 = or i32 %8, %16
store i32 %17, i32* %0
%18 = getelementptr inbounds i8, i8* %9, i64 1
store i8* %18, i8** %4
br label %7
19: ; preds = %7
%20 = tail call i32 (i8**, ...) bitcast (i32 (...)* @getint to i32 (i8**, ...)*)(i8** %4)
store i32 %20, i32* %1
%21 = load i8*, i8** %4
%22 = load i8, i8* %21
%23 = icmp eq i8 %22, 46
br i1 %23, label %24, label %28
24: ; preds = %19
%25 = getelementptr inbounds i8, i8* %21, i64 1
store i8* %25, i8** %4
%26 = tail call i32 (i8**, ...) bitcast (i32 (...)* @getint to i32 (i8**, ...)*)(i8** %4)
%27 = load i8*, i8** %4
br label %28
28: ; preds = %19, %24
%29 = phi i8* [ %27, %24 ], [ %21, %19 ]
%30 = phi i32 [ %26, %24 ], [ -1, %19 ]
store i32 %30, i32* %2
store i32 0, i32* %3
%31 = load i8, i8* %29
%32 = zext i8 %31 to i32
switch i8 %31, label %55 [
i8 95, label %37
i8 99, label %51
i8 100, label %33
i8 105, label %33
i8 111, label %33
i8 117, label %33
i8 88, label %33
i8 120, label %33
i8 115, label %34
]
33: ; preds = %28, %28, %28, %28, %28, %28
br label %51
34: ; preds = %28
%35 = load i32, i32* %2
%36 = icmp eq i32 %35, -1
br i1 %36, label %59, label %51
37: ; preds = %28
%38 = getelementptr inbounds i8, i8* %29, i64 1
store i8* %38, i8** %4
%39 = load i8, i8* %38
switch i8 %39, label %59 [
i8 97, label %40
i8 65, label %45
i8 99, label %51
i8 112, label %49
i8 117, label %50
]
40: ; preds = %37
%41 = getelementptr inbounds i8, i8* %29, i64 2
store i8* %41, i8** %4
%42 = load i8, i8* %41
switch i8 %42, label %59 [
i8 100, label %51
i8 111, label %43
i8 120, label %44
]
43: ; preds = %40
br label %51
44: ; preds = %40
br label %51
45: ; preds = %37
%46 = getelementptr inbounds i8, i8* %29, i64 2
store i8* %46, i8** %4
%47 = load i8, i8* %46
switch i8 %47, label %59 [
i8 100, label %48
i8 111, label %48
i8 120, label %48
]
48: ; preds = %45, %45, %45
store i32 0, i32* %3
br label %59
49: ; preds = %37
br label %51
50: ; preds = %37
br label %51
51: ; preds = %37, %43, %44, %40, %34, %28, %33, %50, %49
%52 = phi i32 [ 1, %49 ], [ 1, %50 ], [ 4, %33 ], [ 1, %28 ], [ %35, %34 ], [ 0, %40 ], [ 0, %44 ], [ 0, %43 ], [ 1, %37 ]
%53 = phi i8* [ %38, %49 ], [ %38, %50 ], [ %29, %33 ], [ %29, %28 ], [ %29, %34 ], [ %41, %40 ], [ %41, %44 ], [ %41, %43 ], [ %38, %37 ]
%54 = phi i32 [ 28767, %49 ], [ 30047, %50 ], [ %32, %33 ], [ 99, %28 ], [ 115, %34 ], [ 25695, %40 ], [ 30815, %44 ], [ 28511, %43 ], [ 25439, %37 ]
store i32 %52, i32* %3
br label %55
55: ; preds = %51, %28
%56 = phi i8* [ %29, %28 ], [ %53, %51 ]
%57 = phi i32 [ %32, %28 ], [ %54, %51 ]
%58 = getelementptr inbounds i8, i8* %56, i64 1
store i8* %58, i8** %4
br label %59
59: ; preds = %37, %45, %40, %34, %55, %48
%60 = phi i32 [ %57, %55 ], [ 0, %48 ], [ 0, %34 ], [ 0, %40 ], [ 0, %45 ], [ 0, %37 ]
ret i32 %60
}