#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 */
typedef int /*<<< orphan*/ buf;

/* Variables and functions */
int /*<<< orphan*/ E2BIG;
int /*<<< orphan*/ EINVAL;
int /*<<< orphan*/ errno;
char *tgoto(const char *cap, int col, int line) {
  static char buf[20];
  char *p, *e, c, dbuf[6];
  int oncol = 0, which = line, i;
  p = buf;
  e = p + sizeof(buf);
  while ((c = *cap++)) {
    if (c != '%' || ((c = *cap++) == '%')) {
      *p++ = c;
      if (p >= e) {
        errno = E2BIG;
        return NULL;
      }
      continue;
    }
    switch (c) {
    case '3':
    case '2':
    case 'd':
      i = 0;
      do
        dbuf[i++] = which % 10 | '0';
      while ((which /= 10));
      if (c != 'd') {
        c -= '0';
        if (i > c) {
          errno = EINVAL;
          return NULL;
        }
        while (i < c)
          dbuf[i++] = '0';
      }
      if (p + i >= e) {
        errno = E2BIG;
        return NULL;
      }
      do
        *p++ = dbuf[--i];
      while (i);
      break;
    case 'r':
      oncol = 0;
      break;
    case 'i':
      col++;
      line++;
      which++;
      continue;
    default:
      errno = EINVAL;
      return NULL;
    }
    oncol = 1 - oncol;
    which = oncol ? col : line;
  }
  *p = '\0';
  return buf;
}


x86 assembly (clang, -O0):
<tgoto>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    %edx,-0x18(%rbp)
movl   $0x0,-0x34(%rbp)
mov    -0x18(%rbp),%eax
mov    %eax,-0x38(%rbp)
lea    0x2f0e(%rip),%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
add    $0x14,%rax
mov    %rax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%al
mov    %al,-0x29(%rbp)
cmp    $0x0,%al
je     13a4 <tgoto+0x2a4>
movsbl -0x29(%rbp),%eax
cmp    $0x25,%eax
jne    117b <tgoto+0x7b>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%al
mov    %al,-0x29(%rbp)
movsbl %al,%eax
cmp    $0x25,%eax
jne    11c1 <tgoto+0xc1>
mov    -0x29(%rbp),%cl
mov    -0x20(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x20(%rbp)
mov    %cl,(%rax)
mov    -0x20(%rbp),%rax
cmp    -0x28(%rbp),%rax
jb     11bc <tgoto+0xbc>
mov    0x2e44(%rip),%rax
mov    (%rax),%ecx
mov    0x2e2b(%rip),%rax
mov    %ecx,(%rax)
movq   $0x0,-0x8(%rbp)
jmp    13b6 <tgoto+0x2b6>
jmp    1132 <tgoto+0x32>
movsbl -0x29(%rbp),%eax
mov    %eax,-0x40(%rbp)
add    $0xffffffce,%eax
sub    $0x2,%eax
jb     120c <tgoto+0x10c>
jmp    11d9 <tgoto+0xd9>
mov    -0x40(%rbp),%eax
sub    $0x64,%eax
je     120c <tgoto+0x10c>
jmp    11ea <tgoto+0xea>
mov    -0x40(%rbp),%eax
sub    $0x69,%eax
je     1334 <tgoto+0x234>
jmp    11fb <tgoto+0xfb>
mov    -0x40(%rbp),%eax
sub    $0x72,%eax
je     1328 <tgoto+0x228>
jmp    1354 <tgoto+0x254>
movl   $0x0,-0x3c(%rbp)
mov    -0x38(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
or     $0x30,%edx
mov    %dl,%cl
mov    -0x3c(%rbp),%eax
mov    %eax,%edx
add    $0x1,%edx
mov    %edx,-0x3c(%rbp)
cltq
mov    %cl,-0x2f(%rbp,%rax,1)
mov    -0x38(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %eax,-0x38(%rbp)
cmp    $0x0,%eax
jne    1213 <tgoto+0x113>
movsbl -0x29(%rbp),%eax
cmp    $0x64,%eax
je     12c0 <tgoto+0x1c0>
movsbl -0x29(%rbp),%eax
sub    $0x30,%eax
mov    %al,-0x29(%rbp)
mov    -0x3c(%rbp),%eax
movsbl -0x29(%rbp),%ecx
cmp    %ecx,%eax
jle    1290 <tgoto+0x190>
mov    0x2d58(%rip),%rax
mov    (%rax),%ecx
mov    0x2d57(%rip),%rax
mov    %ecx,(%rax)
movq   $0x0,-0x8(%rbp)
jmp    13b6 <tgoto+0x2b6>
jmp    1295 <tgoto+0x195>
mov    -0x3c(%rbp),%eax
movsbl -0x29(%rbp),%ecx
cmp    %ecx,%eax
jge    12bb <tgoto+0x1bb>
mov    -0x3c(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x3c(%rbp)
cltq
movb   $0x30,-0x2f(%rbp,%rax,1)
jmp    1295 <tgoto+0x195>
jmp    12c0 <tgoto+0x1c0>
mov    -0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
add    %rcx,%rax
cmp    -0x28(%rbp),%rax
jb     12f4 <tgoto+0x1f4>
mov    0x2d0c(%rip),%rax
mov    (%rax),%ecx
mov    0x2cf3(%rip),%rax
mov    %ecx,(%rax)
movq   $0x0,-0x8(%rbp)
jmp    13b6 <tgoto+0x2b6>
jmp    12f9 <tgoto+0x1f9>
mov    -0x3c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x3c(%rbp)
cltq
mov    -0x2f(%rbp,%rax,1),%cl
mov    -0x20(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x20(%rbp)
mov    %cl,(%rax)
cmpl   $0x0,-0x3c(%rbp)
jne    12f9 <tgoto+0x1f9>
jmp    1373 <tgoto+0x273>
movl   $0x0,-0x34(%rbp)
jmp    1373 <tgoto+0x273>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    1132 <tgoto+0x32>
mov    0x2c75(%rip),%rax
mov    (%rax),%ecx
mov    0x2c74(%rip),%rax
mov    %ecx,(%rax)
movq   $0x0,-0x8(%rbp)
jmp    13b6 <tgoto+0x2b6>
mov    $0x1,%eax
sub    -0x34(%rbp),%eax
mov    %eax,-0x34(%rbp)
cmpl   $0x0,-0x34(%rbp)
je     1393 <tgoto+0x293>
mov    -0x14(%rbp),%eax
mov    %eax,-0x44(%rbp)
jmp    1399 <tgoto+0x299>
mov    -0x18(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%eax
mov    %eax,-0x38(%rbp)
jmp    1132 <tgoto+0x32>
mov    -0x20(%rbp),%rax
movb   $0x0,(%rax)
lea    0x2c7e(%rip),%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
pop    %rbp
ret

x86 assembly (clang, -O2):
<tgoto>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
mov    %edx,%r9d
mov    %esi,%r10d
mov    %rdi,%r13
lea    0x9(%rsp),%r11
lea    -0x6(%rsp),%r8
xor    %eax,%eax
lea    0x2f06(%rip),%r15
lea    0x2f13(%rip),%r12
pxor   %xmm3,%xmm3
mov    %edx,%ebx
jmp    116e <tgoto+0x5e>
nopl   0x0(%rax)
movsbl 0x1(%r13),%ecx
add    $0x2,%r13
cmp    $0x25,%ecx
jne    1185 <tgoto+0x75>
mov    %dl,(%r15)
add    $0x1,%r15
cmp    %r12,%r15
jae    1395 <tgoto+0x285>
mov    0x0(%r13),%dl
cmp    $0x25,%dl
je     1150 <tgoto+0x40>
test   %dl,%dl
je     13ab <tgoto+0x29b>
add    $0x1,%r13
jmp    115e <tgoto+0x4e>
cmp    $0x63,%ecx
jle    11a2 <tgoto+0x92>
cmp    $0x64,%ecx
je     11ae <tgoto+0x9e>
cmp    $0x72,%ecx
jne    1380 <tgoto+0x270>
mov    $0x1,%eax
mov    %r10d,%ebx
jmp    116e <tgoto+0x5e>
lea    -0x32(%rcx),%edx
cmp    $0x2,%edx
jae    13c5 <tgoto+0x2b5>
mov    %rax,0x10(%rsp)
mov    $0xffffffff,%esi
xor    %edx,%edx
nopw   0x0(%rax,%rax,1)
movslq %ebx,%rdi
imul   $0x66666667,%rdi,%rbx
mov    %rbx,%rax
shr    $0x3f,%rax
sar    $0x22,%rbx
add    %eax,%ebx
lea    (%rbx,%rbx,1),%eax
lea    (%rax,%rax,4),%eax
mov    %edi,%ebp
sub    %eax,%ebp
or     $0x30,%bpl
mov    %bpl,0xa(%rsp,%rdx,1)
add    $0x1,%rdx
add    $0x9,%edi
add    $0x1,%esi
cmp    $0x12,%edi
ja     11c0 <tgoto+0xb0>
cmp    $0x64,%cl
je     124c <tgoto+0x13c>
add    $0xd0,%cl
movsbl %cl,%r14d
cmp    %r14d,%esi
jge    13c5 <tgoto+0x2b5>
cmp    %r14d,%edx
jge    124c <tgoto+0x13c>
mov    %edx,%eax
lea    (%rsp,%rax,1),%rdi
add    $0xa,%rdi
not    %edx
add    %r14d,%edx
add    $0x1,%rdx
mov    $0x30,%esi
mov    %r9d,%ebx
mov    %r10d,%ebp
call   1030 <memset@plt>
pxor   %xmm3,%xmm3
lea    -0x6(%rsp),%r8
lea    0x9(%rsp),%r11
mov    %ebp,%r10d
mov    %ebx,%r9d
jmp    124f <tgoto+0x13f>
mov    %edx,%r14d
movslq %r14d,%rax
lea    (%r15,%rax,1),%rcx
cmp    %r12,%rcx
jae    1395 <tgoto+0x285>
add    $0xffffffff,%r14d
cmp    $0x1f,%r14d
jb     128c <tgoto+0x17c>
lea    (%rsp,%rax,1),%rcx
add    $0xa,%rcx
cmp    %rcx,%r15
jae    12cd <tgoto+0x1bd>
lea    (%r15,%r14,1),%rcx
add    $0x1,%rcx
mov    %rax,%rdx
sub    %r14,%rdx
add    %r11,%rdx
cmp    %rcx,%rdx
jae    12cd <tgoto+0x1bd>
mov    %r15,%rcx
add    %r14,%r15
add    %r11,%rax
mov    %rcx,%rdx
nopl   0x0(%rax,%rax,1)
movzbl (%rax),%ebx
lea    0x1(%rdx),%rcx
mov    %bl,(%rdx)
add    $0xffffffffffffffff,%rax
cmp    %r15,%rdx
mov    %rcx,%rdx
jne    12a0 <tgoto+0x190>
mov    0x10(%rsp),%rax
dec    %eax
mov    %r10d,%ebx
cmove  %r9d,%ebx
neg    %eax
mov    %rcx,%r15
jmp    116e <tgoto+0x5e>
mov    %r8,%rdx
lea    0x1(%r14),%r8
mov    %r8,%rsi
and    $0xffffffffffffffe0,%rsi
lea    (%r15,%rsi,1),%rcx
mov    %rdx,%rbx
lea    (%rdx,%rax,1),%rdi
sub    %rsi,%rax
xor    %edx,%edx
nopl   0x0(%rax,%rax,1)
movdqu -0x10(%rdi),%xmm0
movdqu (%rdi),%xmm1
movdqa %xmm1,%xmm2
punpcklbw %xmm3,%xmm2
pshufd $0x4e,%xmm2,%xmm2
pshuflw $0x1b,%xmm2,%xmm2
pshufhw $0x1b,%xmm2,%xmm2
punpckhbw %xmm3,%xmm1
pshufd $0x4e,%xmm1,%xmm1
pshuflw $0x1b,%xmm1,%xmm1
pshufhw $0x1b,%xmm1,%xmm1
packuswb %xmm2,%xmm1
movdqa %xmm0,%xmm2
punpcklbw %xmm3,%xmm2
pshufd $0x4e,%xmm2,%xmm2
pshuflw $0x1b,%xmm2,%xmm2
pshufhw $0x1b,%xmm2,%xmm2
punpckhbw %xmm3,%xmm0
pshufd $0x4e,%xmm0,%xmm0
pshuflw $0x1b,%xmm0,%xmm0
pshufhw $0x1b,%xmm0,%xmm0
packuswb %xmm2,%xmm0
movdqu %xmm1,(%r15,%rdx,1)
movdqu %xmm0,0x10(%r15,%rdx,1)
add    $0x20,%rdx
add    $0xffffffffffffffe0,%rdi
cmp    %rdx,%rsi
jne    12f0 <tgoto+0x1e0>
cmp    %rsi,%r8
mov    %rbx,%r8
je     12b5 <tgoto+0x1a5>
jmp    128f <tgoto+0x17f>
cmp    $0x69,%ecx
jne    13c5 <tgoto+0x2b5>
add    $0x1,%r10d
add    $0x1,%r9d
add    $0x1,%ebx
jmp    116e <tgoto+0x5e>
mov    0x2c4c(%rip),%rax
mov    (%rax),%eax
mov    0x2c33(%rip),%rcx
mov    %eax,(%rcx)
xor    %eax,%eax
jmp    13b6 <tgoto+0x2a6>
movb   $0x0,(%r15)
lea    0x2c8a(%rip),%rax
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    0x2c04(%rip),%rax
jmp    139c <tgoto+0x28c>

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

LLVM IR (-O2):
@tgoto.buf = internal global [20 x i8] zeroinitializer
@E2BIG = global i32 0
@errno = global i32 0
@EINVAL = global i32 0
define i8* @tgoto(i8* nocapture %0, i32 %1, i32 %2) {
%4 = alloca [6 x i8]
%5 = getelementptr inbounds [6 x i8], [6 x i8]* %4, i64 0, i64 0
%6 = getelementptr [6 x i8], [6 x i8]* %4, i64 0, i64 -1
br label %7
7: ; preds = %125, %3
%8 = phi i8* [ %25, %125 ], [ %0, %3 ]
%9 = phi i32 [ %126, %125 ], [ %1, %3 ]
%10 = phi i32 [ %127, %125 ], [ %2, %3 ]
%11 = phi i8* [ %21, %125 ], [ getelementptr inbounds ([20 x i8], [20 x i8]* @tgoto.buf, i64 0, i64 0), %3 ]
%12 = phi i32 [ %17, %125 ], [ 0, %3 ]
%13 = phi i32 [ %128, %125 ], [ %2, %3 ]
br label %14
14: ; preds = %136, %7
%15 = phi i8* [ %8, %7 ], [ %25, %136 ]
%16 = phi i8* [ %11, %7 ], [ %137, %136 ]
%17 = phi i32 [ %12, %7 ], [ %138, %136 ]
%18 = phi i32 [ %13, %7 ], [ %139, %136 ]
br label %19
19: ; preds = %14, %28
%20 = phi i8* [ %29, %28 ], [ %15, %14 ]
%21 = phi i8* [ %30, %28 ], [ %16, %14 ]
%22 = getelementptr inbounds i8, i8* %20, i64 1
%23 = load i8, i8* %20
switch i8 %23, label %28 [
i8 0, label %140
i8 37, label %24
]
24: ; preds = %19
%25 = getelementptr inbounds i8, i8* %20, i64 2
%26 = load i8, i8* %22
%27 = icmp eq i8 %26, 37
br i1 %27, label %28, label %34
28: ; preds = %19, %24
%29 = phi i8* [ %25, %24 ], [ %22, %19 ]
%30 = getelementptr inbounds i8, i8* %21, i64 1
store i8 %23, i8* %21
%31 = icmp ult i8* %30, getelementptr inbounds ([20 x i8], [20 x i8]* @tgoto.buf, i64 1, i64 0)
br i1 %31, label %19, label %32
32: ; preds = %28
%33 = load i32, i32* @E2BIG
store i32 %33, i32* @errno
br label %141
34: ; preds = %24
%35 = sext i8 %26 to i32
switch i32 %35, label %129 [
i32 51, label %36
i32 50, label %36
i32 100, label %36
i32 114, label %136
i32 105, label %125
]
36: ; preds = %34, %34, %34
br label %37
37: ; preds = %36, %37
%38 = phi i64 [ %43, %37 ], [ 0, %36 ]
%39 = phi i32 [ %45, %37 ], [ %18, %36 ]
%40 = srem i32 %39, 10
%41 = trunc i32 %40 to i8
%42 = or i8 %41, 48
%43 = add nuw i64 %38, 1
%44 = getelementptr inbounds [6 x i8], [6 x i8]* %4, i64 0, i64 %38
store i8 %42, i8* %44
%45 = sdiv i32 %39, 10
%46 = add i32 %39, 9
%47 = icmp ult i32 %46, 19
br i1 %47, label %48, label %37
48: ; preds = %37
%49 = trunc i64 %43 to i32
%50 = icmp eq i8 %26, 100
br i1 %50, label %67, label %51
51: ; preds = %48
%52 = trunc i64 %38 to i32
%53 = add i8 %26, -48
%54 = sext i8 %53 to i32
%55 = icmp slt i32 %52, %54
br i1 %55, label %56, label %65
56: ; preds = %51
%57 = icmp slt i32 %49, %54
br i1 %57, label %58, label %67
58: ; preds = %56
%59 = and i64 %43, 4294967295
%60 = getelementptr [6 x i8], [6 x i8]* %4, i64 0, i64 %59
%61 = xor i32 %49, -1
%62 = add i32 %61, %54
%63 = zext i32 %62 to i64
%64 = add nuw nsw i64 %63, 1
br label %67
65: ; preds = %51
%66 = load i32, i32* @EINVAL
store i32 %66, i32* @errno
br label %141
67: ; preds = %58, %56, %48
%68 = phi i32 [ %49, %48 ], [ %49, %56 ], [ %54, %58 ]
%69 = sext i32 %68 to i64
%70 = getelementptr inbounds i8, i8* %21, i64 %69
%71 = icmp ult i8* %70, getelementptr inbounds ([20 x i8], [20 x i8]* @tgoto.buf, i64 1, i64 0)
br i1 %71, label %72, label %115
72: ; preds = %67
%73 = add i32 %68, -1
%74 = zext i32 %73 to i64
%75 = getelementptr i8, i8* %21, i64 %74
%76 = add nuw nsw i64 %74, 1
%77 = icmp ult i32 %73, 31
br i1 %77, label %112, label %78
78: ; preds = %72
%79 = getelementptr i8, i8* %21, i64 1
%80 = getelementptr i8, i8* %79, i64 %74
%81 = sub nsw i64 %69, %74
%82 = getelementptr i8, i8* %6, i64 %81
%83 = getelementptr [6 x i8], [6 x i8]* %4, i64 0, i64 %69
%84 = icmp ult i8* %21, %83
%85 = icmp ult i8* %82, %80
%86 = and i1 %84, %85
br i1 %86, label %112, label %87
87: ; preds = %78
%88 = and i64 %76, 8589934560
%89 = sub nsw i64 %69, %88
%90 = getelementptr i8, i8* %21, i64 %88
br label %91
91: ; preds = %91, %87
%92 = phi i64 [ 0, %87 ], [ %108, %91 ]
%93 = getelementptr i8, i8* %21, i64 %92
%94 = xor i64 %92, -1
%95 = add i64 %94, %69
%96 = getelementptr inbounds [6 x i8], [6 x i8]* %4, i64 0, i64 %95
%97 = getelementptr inbounds i8, i8* %96, i64 -15
%98 = bitcast i8* %97 to <16 x i8>*
%99 = load <16 x i8>, <16 x i8>* %98
%100 = shufflevector <16 x i8> %99, <16 x i8> poison, <16 x i32> <i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
%101 = getelementptr inbounds i8, i8* %96, i64 -31
%102 = bitcast i8* %101 to <16 x i8>*
%103 = load <16 x i8>, <16 x i8>* %102
%104 = shufflevector <16 x i8> %103, <16 x i8> poison, <16 x i32> <i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
%105 = bitcast i8* %93 to <16 x i8>*
store <16 x i8> %100, <16 x i8>* %105
%106 = getelementptr i8, i8* %93, i64 16
%107 = bitcast i8* %106 to <16 x i8>*
store <16 x i8> %104, <16 x i8>* %107
%108 = add nuw i64 %92, 32
%109 = icmp eq i64 %108, %88
br i1 %109, label %110, label %91
110: ; preds = %91
%111 = icmp eq i64 %76, %88
br i1 %111, label %131, label %112
112: ; preds = %78, %72, %110
%113 = phi i64 [ %69, %78 ], [ %69, %72 ], [ %89, %110 ]
%114 = phi i8* [ %21, %78 ], [ %21, %72 ], [ %90, %110 ]
br label %117
115: ; preds = %67
%116 = load i32, i32* @E2BIG
store i32 %116, i32* @errno
br label %141
117: ; preds = %112, %117
%118 = phi i64 [ %120, %117 ], [ %113, %112 ]
%119 = phi i8* [ %123, %117 ], [ %114, %112 ]
%120 = add nsw i64 %118, -1
%121 = getelementptr inbounds [6 x i8], [6 x i8]* %4, i64 0, i64 %120
%122 = load i8, i8* %121
%123 = getelementptr inbounds i8, i8* %119, i64 1
store i8 %122, i8* %119
%124 = icmp eq i8* %119, %75
br i1 %124, label %131, label %117
125: ; preds = %34
%126 = add nsw i32 %9, 1
%127 = add nsw i32 %10, 1
%128 = add nsw i32 %18, 1
br label %7
129: ; preds = %34
%130 = load i32, i32* @EINVAL
store i32 %130, i32* @errno
br label %141
131: ; preds = %117, %110
%132 = phi i8* [ %90, %110 ], [ %123, %117 ]
%133 = sub i32 1, %17
%134 = icmp eq i32 %17, 1
%135 = select i1 %134, i32 %10, i32 %9
br label %136
136: ; preds = %131, %34
%137 = phi i8* [ %132, %131 ], [ %21, %34 ]
%138 = phi i32 [ %133, %131 ], [ 1, %34 ]
%139 = phi i32 [ %135, %131 ], [ %9, %34 ]
br label %14
140: ; preds = %19
store i8 0, i8* %21
br label %141
141: ; preds = %140, %129, %115, %65, %32
%142 = phi i8* [ null, %32 ], [ null, %129 ], [ null, %65 ], [ null, %115 ], [ getelementptr inbounds ([20 x i8], [20 x i8]* @tgoto.buf, i64 0, i64 0), %140 ]
ret i8* %142
}