#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 */
struct stat {
  int /*<<< orphan*/ st_mode;
};
typedef int pid_t;

/* Variables and functions */
scalar_t__ EEXIST;
scalar_t__ EINVAL;
scalar_t__ ENOENT;
scalar_t__ ENOTDIR;
int O_CREAT;
int O_EXCL;
int O_RDWR;
int /*<<< orphan*/ S_ISDIR(int /*<<< orphan*/);
scalar_t__ errno;
int getpid();
scalar_t__ isdigit(char);
scalar_t__ lstat(char *, struct stat *);
scalar_t__ mkdir(char *, int);
int open(char *, int, int);
scalar_t__ stat(char *, struct stat *);
int _gettemp(char *path, int *doopen, int domkdir) {
  char *start, *trv;
  struct stat sbuf;
  pid_t pid;
  if (doopen && domkdir) {
    errno = EINVAL;
    return (0);
  }
  pid = getpid();
  for (trv = path; *trv; ++trv)
    ;
  while (*--trv == 'X') {
    *trv = (pid % 10) + '0';
    pid /= 10;
  }
  if (doopen || domkdir) {
    for (start = trv + 1;; --trv) {
      if (trv <= path)
        break;
      if (*trv == '/') {
        *trv = '\0';
        if (stat(path, &sbuf))
          return (0);
        if (!S_ISDIR(sbuf.st_mode)) {
          errno = ENOTDIR;
          return (0);
        }
        *trv = '/';
        break;
      }
    }
  }
  for (;;) {
    if (doopen) {
      if ((*doopen = open(path, O_CREAT | O_EXCL | O_RDWR, 0600)) >= 0)
        return (1);
      if (errno != EEXIST)
        return (0);
    } else if (domkdir) {
      if (mkdir(path, 0700) == 0)
        return (1);
      if (errno != EEXIST)
        return (0);
    } else if (lstat(path, &sbuf))
      return (errno == ENOENT ? 1 : 0);
    for (trv = start;;) {
      if (!*trv)
        return (0);
      if (*trv == 'z')
        *trv++ = 'a';
      else {
        if (isdigit(*trv))
          *trv = 'a';
        else
          ++*trv;
        break;
      }
    }
  }
}


x86 assembly (clang, -O0):
<_gettemp>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %edx,-0x1c(%rbp)
cmpq   $0x0,-0x18(%rbp)
je     11b8 <_gettemp+0x48>
cmpl   $0x0,-0x1c(%rbp)
je     11b8 <_gettemp+0x48>
mov    0x2e11(%rip),%rax
mov    (%rax),%rcx
mov    0x2e0f(%rip),%rax
mov    %rcx,(%rax)
movl   $0x0,-0x4(%rbp)
jmp    14a3 <_gettemp+0x333>
mov    $0x0,%al
call   1050 <getpid@plt>
mov    %eax,-0x3c(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
cmpb   $0x0,(%rax)
je     11ed <_gettemp+0x7d>
jmp    11dc <_gettemp+0x6c>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    11ca <_gettemp+0x5a>
jmp    11f2 <_gettemp+0x82>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0xffffffffffffffff,%rcx
mov    %rcx,-0x30(%rbp)
movsbl -0x1(%rax),%eax
cmp    $0x58,%eax
jne    1237 <_gettemp+0xc7>
mov    -0x3c(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
add    $0x30,%edx
mov    %dl,%cl
mov    -0x30(%rbp),%rax
mov    %cl,(%rax)
mov    -0x3c(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %eax,-0x3c(%rbp)
jmp    11f2 <_gettemp+0x82>
cmpq   $0x0,-0x18(%rbp)
jne    124c <_gettemp+0xdc>
cmpl   $0x0,-0x1c(%rbp)
je     12fd <_gettemp+0x18d>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x30(%rbp),%rax
cmp    -0x10(%rbp),%rax
ja     126b <_gettemp+0xfb>
jmp    12f8 <_gettemp+0x188>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    12e2 <_gettemp+0x172>
mov    -0x30(%rbp),%rax
movb   $0x0,(%rax)
mov    -0x10(%rbp),%rdi
lea    -0x38(%rbp),%rsi
call   1080 <stat@plt>
cmp    $0x0,%rax
je     12a5 <_gettemp+0x135>
movl   $0x0,-0x4(%rbp)
jmp    14a3 <_gettemp+0x333>
mov    -0x38(%rbp),%edi
call   1060 <S_ISDIR@plt>
cmp    $0x0,%eax
jne    12d6 <_gettemp+0x166>
mov    0x2d33(%rip),%rax
mov    (%rax),%rcx
mov    0x2cf1(%rip),%rax
mov    %rcx,(%rax)
movl   $0x0,-0x4(%rbp)
jmp    14a3 <_gettemp+0x333>
mov    -0x30(%rbp),%rax
movb   $0x2f,(%rax)
jmp    12f8 <_gettemp+0x188>
jmp    12e7 <_gettemp+0x177>
mov    -0x30(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x30(%rbp)
jmp    1258 <_gettemp+0xe8>
jmp    12fd <_gettemp+0x18d>
jmp    1302 <_gettemp+0x192>
cmpq   $0x0,-0x18(%rbp)
je     137c <_gettemp+0x20c>
mov    -0x10(%rbp),%rdi
mov    0x2ce0(%rip),%rax
mov    (%rax),%esi
mov    0x2c9f(%rip),%rax
or     (%rax),%esi
mov    0x2cae(%rip),%rax
or     (%rax),%esi
mov    $0x180,%edx
call   1090 <open@plt>
mov    -0x18(%rbp),%rcx
mov    %eax,(%rcx)
cmp    $0x0,%eax
jl     1351 <_gettemp+0x1e1>
movl   $0x1,-0x4(%rbp)
jmp    14a3 <_gettemp+0x333>
mov    0x2c60(%rip),%rax
mov    (%rax),%rax
mov    0x2c66(%rip),%rcx
cmp    (%rcx),%rax
je     1377 <_gettemp+0x207>
movl   $0x0,-0x4(%rbp)
jmp    14a3 <_gettemp+0x333>
jmp    141f <_gettemp+0x2af>
cmpl   $0x0,-0x1c(%rbp)
je     13d5 <_gettemp+0x265>
mov    -0x10(%rbp),%rdi
mov    $0x1c0,%esi
call   1040 <mkdir@plt>
cmp    $0x0,%rax
jne    13aa <_gettemp+0x23a>
movl   $0x1,-0x4(%rbp)
jmp    14a3 <_gettemp+0x333>
mov    0x2c07(%rip),%rax
mov    (%rax),%rax
mov    0x2c0d(%rip),%rcx
cmp    (%rcx),%rax
je     13d0 <_gettemp+0x260>
movl   $0x0,-0x4(%rbp)
jmp    14a3 <_gettemp+0x333>
jmp    141a <_gettemp+0x2aa>
mov    -0x10(%rbp),%rdi
lea    -0x38(%rbp),%rsi
call   1070 <lstat@plt>
cmp    $0x0,%rax
je     1415 <_gettemp+0x2a5>
mov    0x2bc5(%rip),%rax
mov    (%rax),%rdx
mov    0x2ba3(%rip),%rax
mov    (%rax),%rsi
xor    %eax,%eax
mov    $0x1,%ecx
cmp    %rsi,%rdx
cmove  %ecx,%eax
mov    %eax,-0x4(%rbp)
jmp    14a3 <_gettemp+0x333>
jmp    141a <_gettemp+0x2aa>
jmp    141f <_gettemp+0x2af>
mov    -0x28(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
cmpb   $0x0,(%rax)
jne    1440 <_gettemp+0x2d0>
movl   $0x0,-0x4(%rbp)
jmp    14a3 <_gettemp+0x333>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x7a,%eax
jne    1467 <_gettemp+0x2f7>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x61,(%rax)
jmp    1499 <_gettemp+0x329>
mov    -0x30(%rbp),%rax
movsbl (%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%rax
je     1489 <_gettemp+0x319>
mov    -0x30(%rbp),%rax
movb   $0x61,(%rax)
jmp    1494 <_gettemp+0x324>
mov    -0x30(%rbp),%rax
mov    (%rax),%cl
add    $0x1,%cl
mov    %cl,(%rax)
jmp    149e <_gettemp+0x32e>
jmp    1427 <_gettemp+0x2b7>
jmp    1302 <_gettemp+0x192>
mov    -0x4(%rbp),%eax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<_gettemp>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    %edx,%r14d
mov    %rsi,%r15
mov    %rdi,%r12
test   %rsi,%rsi
je     11b7 <_gettemp+0x47>
test   %r14d,%r14d
je     11b7 <_gettemp+0x47>
mov    0x2e1b(%rip),%rax
mov    (%rax),%rax
mov    0x2e19(%rip),%rcx
mov    %rax,(%rcx)
xor    %r13d,%r13d
mov    %r13d,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
xor    %eax,%eax
call   1050 <getpid@plt>
lea    -0x1(%r12),%rbp
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
cmpb   $0x0,0x1(%rbp)
lea    0x1(%rbp),%rbp
jne    11d0 <_gettemp+0x60>
mov    -0x1(%rbp),%cl
cmp    $0x58,%cl
jne    1222 <_gettemp+0xb2>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movslq %eax,%rcx
imul   $0x66666667,%rcx,%rax
mov    %rax,%rdx
shr    $0x3f,%rdx
sar    $0x22,%rax
add    %edx,%eax
lea    (%rax,%rax,1),%edx
lea    (%rdx,%rdx,4),%edx
sub    %edx,%ecx
add    $0x30,%cl
mov    %cl,-0x1(%rbp)
movzbl -0x2(%rbp),%ecx
add    $0xffffffffffffffff,%rbp
cmp    $0x58,%cl
je     11f0 <_gettemp+0x80>
lea    -0x1(%rbp),%rbx
test   %r14d,%r14d
sete   %al
test   %r15,%r15
sete   %dl
test   %al,%dl
jne    12a2 <_gettemp+0x132>
cmp    %r12,%rbx
jbe    12a2 <_gettemp+0x132>
cmp    $0x2f,%cl
je     1268 <_gettemp+0xf8>
add    $0xffffffffffffffff,%rbx
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
cmp    %r12,%rbx
jbe    12a2 <_gettemp+0x132>
lea    -0x1(%rbx),%rax
cmpb   $0x2f,(%rbx)
mov    %rax,%rbx
jne    1250 <_gettemp+0xe0>
add    $0x1,%rax
mov    %rax,%rbx
movb   $0x0,(%rbx)
mov    %rsp,%rsi
mov    %r12,%rdi
call   1080 <stat@plt>
xor    %r13d,%r13d
test   %rax,%rax
jne    11a5 <_gettemp+0x35>
mov    (%rsp),%edi
call   1060 <S_ISDIR@plt>
test   %eax,%eax
je     1363 <_gettemp+0x1f3>
movb   $0x2f,(%rbx)
jmp    12a2 <_gettemp+0x132>
nopw   0x0(%rax,%rax,1)
mov    %cl,(%rbx)
test   %r15,%r15
je     12e0 <_gettemp+0x170>
mov    0x2d4a(%rip),%rax
mov    0x2d0b(%rip),%rcx
mov    (%rcx),%esi
or     (%rax),%esi
mov    0x2d18(%rip),%rax
or     (%rax),%esi
mov    %r12,%rdi
mov    $0x180,%edx
call   1090 <open@plt>
mov    %eax,(%r15)
test   %eax,%eax
js     12fb <_gettemp+0x18b>
jmp    137c <_gettemp+0x20c>
nopl   0x0(%rax,%rax,1)
test   %r14d,%r14d
je     1319 <_gettemp+0x1a9>
mov    %r12,%rdi
mov    $0x1c0,%esi
call   1040 <mkdir@plt>
test   %rax,%rax
je     137c <_gettemp+0x20c>
mov    0x2cb6(%rip),%rax
mov    (%rax),%rax
mov    0x2cbc(%rip),%rcx
mov    %rbp,%rbx
cmp    (%rcx),%rax
je     1337 <_gettemp+0x1c7>
jmp    11a2 <_gettemp+0x32>
mov    %rsp,%rsi
mov    %r12,%rdi
call   1070 <lstat@plt>
mov    %rbp,%rbx
test   %rax,%rax
je     1337 <_gettemp+0x1c7>
jmp    1387 <_gettemp+0x217>
xchg   %ax,%ax
movb   $0x61,(%rbx)
add    $0x1,%rbx
movzbl (%rbx),%eax
cmp    $0x7a,%al
je     1330 <_gettemp+0x1c0>
test   %al,%al
je     11a2 <_gettemp+0x32>
movsbl %al,%edi
call   1030 <isdigit@plt>
mov    $0x61,%cl
test   %rax,%rax
jne    12a0 <_gettemp+0x130>
mov    (%rbx),%cl
add    $0x1,%cl
jmp    12a0 <_gettemp+0x130>
mov    0x2c86(%rip),%rax
mov    (%rax),%rax
mov    0x2c44(%rip),%rcx
mov    %rax,(%rcx)
jmp    11a5 <_gettemp+0x35>
mov    $0x1,%r13d
jmp    11a5 <_gettemp+0x35>
mov    0x2c2a(%rip),%rax
mov    (%rax),%rax
mov    0x2c08(%rip),%rcx
xor    %r13d,%r13d
cmp    (%rcx),%rax
sete   %r13b
jmp    11a5 <_gettemp+0x35>

LLVM IR (-O0):
%struct.stat = type { i32 }
@EINVAL = global i64 0
@errno = global i64 0
@ENOTDIR = global i64 0
@O_CREAT = global i32 0
@O_EXCL = global i32 0
@O_RDWR = global i32 0
@EEXIST = global i64 0
@ENOENT = global i64 0
define i32 @_gettemp(i8* %0, i32* %1, i32 %2) {
%4 = alloca i32
%5 = alloca i8*
%6 = alloca i32*
%7 = alloca i32
%8 = alloca i8*
%9 = alloca i8*
%10 = alloca %struct.stat
%11 = alloca i32
store i8* %0, i8** %5
store i32* %1, i32** %6
store i32 %2, i32* %7
%12 = load i32*, i32** %6
%13 = icmp ne i32* %12, null
br i1 %13, label %14, label %19
14: ; preds = %3
%15 = load i32, i32* %7
%16 = icmp ne i32 %15, 0
br i1 %16, label %17, label %19
17: ; preds = %14
%18 = load i64, i64* @EINVAL
store i64 %18, i64* @errno
store i32 0, i32* %4
br label %160
19: ; preds = %14, %3
%20 = call i32 (...) @getpid()
store i32 %20, i32* %11
%21 = load i8*, i8** %5
store i8* %21, i8** %9
br label %22
22: ; preds = %27, %19
%23 = load i8*, i8** %9
%24 = load i8, i8* %23
%25 = icmp ne i8 %24, 0
br i1 %25, label %26, label %30
26: ; preds = %22
br label %27
27: ; preds = %26
%28 = load i8*, i8** %9
%29 = getelementptr inbounds i8, i8* %28, i32 1
store i8* %29, i8** %9
br label %22
30: ; preds = %22
br label %31
31: ; preds = %37, %30
%32 = load i8*, i8** %9
%33 = getelementptr inbounds i8, i8* %32, i32 -1
store i8* %33, i8** %9
%34 = load i8, i8* %33
%35 = sext i8 %34 to i32
%36 = icmp eq i32 %35, 88
br i1 %36, label %37, label %45
37: ; preds = %31
%38 = load i32, i32* %11
%39 = srem i32 %38, 10
%40 = add nsw i32 %39, 48
%41 = trunc i32 %40 to i8
%42 = load i8*, i8** %9
store i8 %41, i8* %42
%43 = load i32, i32* %11
%44 = sdiv i32 %43, 10
store i32 %44, i32* %11
br label %31
45: ; preds = %31
%46 = load i32*, i32** %6
%47 = icmp ne i32* %46, null
br i1 %47, label %51, label %48
48: ; preds = %45
%49 = load i32, i32* %7
%50 = icmp ne i32 %49, 0
br i1 %50, label %51, label %84
51: ; preds = %48, %45
%52 = load i8*, i8** %9
%53 = getelementptr inbounds i8, i8* %52, i64 1
store i8* %53, i8** %8
br label %54
54: ; preds = %80, %51
%55 = load i8*, i8** %9
%56 = load i8*, i8** %5
%57 = icmp ule i8* %55, %56
br i1 %57, label %58, label %59
58: ; preds = %54
br label %83
59: ; preds = %54
%60 = load i8*, i8** %9
%61 = load i8, i8* %60
%62 = sext i8 %61 to i32
%63 = icmp eq i32 %62, 47
br i1 %63, label %64, label %79
64: ; preds = %59
%65 = load i8*, i8** %9
store i8 0, i8* %65
%66 = load i8*, i8** %5
%67 = call i64 @stat(i8* %66, %struct.stat* %10)
%68 = icmp ne i64 %67, 0
br i1 %68, label %69, label %70
69: ; preds = %64
store i32 0, i32* %4
br label %160
70: ; preds = %64
%71 = getelementptr inbounds %struct.stat, %struct.stat* %10, i32 0, i32 0
%72 = load i32, i32* %71
%73 = call i32 @S_ISDIR(i32 %72)
%74 = icmp ne i32 %73, 0
br i1 %74, label %77, label %75
75: ; preds = %70
%76 = load i64, i64* @ENOTDIR
store i64 %76, i64* @errno
store i32 0, i32* %4
br label %160
77: ; preds = %70
%78 = load i8*, i8** %9
store i8 47, i8* %78
br label %83
79: ; preds = %59
br label %80
80: ; preds = %79
%81 = load i8*, i8** %9
%82 = getelementptr inbounds i8, i8* %81, i32 -1
store i8* %82, i8** %9
br label %54
83: ; preds = %77, %58
br label %84
84: ; preds = %83, %48
br label %85
85: ; preds = %159, %84
%86 = load i32*, i32** %6
%87 = icmp ne i32* %86, null
br i1 %87, label %88, label %105
88: ; preds = %85
%89 = load i8*, i8** %5
%90 = load i32, i32* @O_CREAT
%91 = load i32, i32* @O_EXCL
%92 = or i32 %90, %91
%93 = load i32, i32* @O_RDWR
%94 = or i32 %92, %93
%95 = call i32 @open(i8* %89, i32 %94, i32 384)
%96 = load i32*, i32** %6
store i32 %95, i32* %96
%97 = icmp sge i32 %95, 0
br i1 %97, label %98, label %99
98: ; preds = %88
store i32 1, i32* %4
br label %160
99: ; preds = %88
%100 = load i64, i64* @errno
%101 = load i64, i64* @EEXIST
%102 = icmp ne i64 %100, %101
br i1 %102, label %103, label %104
103: ; preds = %99
store i32 0, i32* %4
br label %160
104: ; preds = %99
br label %131
105: ; preds = %85
%106 = load i32, i32* %7
%107 = icmp ne i32 %106, 0
br i1 %107, label %108, label %119
108: ; preds = %105
%109 = load i8*, i8** %5
%110 = call i64 @mkdir(i8* %109, i32 448)
%111 = icmp eq i64 %110, 0
br i1 %111, label %112, label %113
112: ; preds = %108
store i32 1, i32* %4
br label %160
113: ; preds = %108
%114 = load i64, i64* @errno
%115 = load i64, i64* @EEXIST
%116 = icmp ne i64 %114, %115
br i1 %116, label %117, label %118
117: ; preds = %113
store i32 0, i32* %4
br label %160
118: ; preds = %113
br label %130
119: ; preds = %105
%120 = load i8*, i8** %5
%121 = call i64 @lstat(i8* %120, %struct.stat* %10)
%122 = icmp ne i64 %121, 0
br i1 %122, label %123, label %129
123: ; preds = %119
%124 = load i64, i64* @errno
%125 = load i64, i64* @ENOENT
%126 = icmp eq i64 %124, %125
%127 = zext i1 %126 to i64
%128 = select i1 %126, i32 1, i32 0
store i32 %128, i32* %4
br label %160
129: ; preds = %119
br label %130
130: ; preds = %129, %118
br label %131
131: ; preds = %130, %104
%132 = load i8*, i8** %8
store i8* %132, i8** %9
br label %133
133: ; preds = %158, %131
%134 = load i8*, i8** %9
%135 = load i8, i8* %134
%136 = icmp ne i8 %135, 0
br i1 %136, label %138, label %137
137: ; preds = %133
store i32 0, i32* %4
br label %160
138: ; preds = %133
%139 = load i8*, i8** %9
%140 = load i8, i8* %139
%141 = sext i8 %140 to i32
%142 = icmp eq i32 %141, 122
br i1 %142, label %143, label %146
143: ; preds = %138
%144 = load i8*, i8** %9
%145 = getelementptr inbounds i8, i8* %144, i32 1
store i8* %145, i8** %9
store i8 97, i8* %144
br label %158
146: ; preds = %138
%147 = load i8*, i8** %9
%148 = load i8, i8* %147
%149 = call i64 @isdigit(i8 signext %148)
%150 = icmp ne i64 %149, 0
br i1 %150, label %151, label %153
151: ; preds = %146
%152 = load i8*, i8** %9
store i8 97, i8* %152
br label %157
153: ; preds = %146
%154 = load i8*, i8** %9
%155 = load i8, i8* %154
%156 = add i8 %155, 1
store i8 %156, i8* %154
br label %157
157: ; preds = %153, %151
br label %159
158: ; preds = %143
br label %133
159: ; preds = %157
br label %85
160: ; preds = %137, %123, %117, %112, %103, %98, %75, %69, %17
%161 = load i32, i32* %4
ret i32 %161
}

LLVM IR (-O2):
%struct.stat = type { i32 }
@EINVAL = global i64 0
@errno = global i64 0
@ENOTDIR = global i64 0
@O_CREAT = global i32 0
@O_EXCL = global i32 0
@O_RDWR = global i32 0
@EEXIST = global i64 0
@ENOENT = global i64 0
define i32 @_gettemp(i8* %0, i32* writeonly %1, i32 %2) {
%4 = alloca %struct.stat
%5 = bitcast %struct.stat* %4 to i8*
%6 = icmp ne i32* %1, null
%7 = icmp ne i32 %2, 0
%8 = and i1 %6, %7
br i1 %8, label %9, label %11
9: ; preds = %3
%10 = load i64, i64* @EINVAL
store i64 %10, i64* @errno
br label %104
11: ; preds = %3
%12 = tail call i32 (...) @getpid()
br label %13
13: ; preds = %13, %11
%14 = phi i8* [ %0, %11 ], [ %17, %13 ]
%15 = load i8, i8* %14
%16 = icmp eq i8 %15, 0
%17 = getelementptr inbounds i8, i8* %14, i64 1
br i1 %16, label %18, label %13
18: ; preds = %13
%19 = getelementptr inbounds i8, i8* %14, i64 -1
%20 = load i8, i8* %19
%21 = icmp eq i8 %20, 88
br i1 %21, label %22, label %32
22: ; preds = %18, %22
%23 = phi i8* [ %29, %22 ], [ %19, %18 ]
%24 = phi i32 [ %28, %22 ], [ %12, %18 ]
%25 = srem i32 %24, 10
%26 = trunc i32 %25 to i8
%27 = add nsw i8 %26, 48
store i8 %27, i8* %23
%28 = sdiv i32 %24, 10
%29 = getelementptr inbounds i8, i8* %23, i64 -1
%30 = load i8, i8* %29
%31 = icmp eq i8 %30, 88
br i1 %31, label %22, label %32
32: ; preds = %22, %18
%33 = phi i8 [ %20, %18 ], [ %30, %22 ]
%34 = phi i8* [ %14, %18 ], [ %23, %22 ]
%35 = phi i8* [ %19, %18 ], [ %29, %22 ]
%36 = or i1 %6, %7
%37 = icmp ugt i8* %35, %0
%38 = and i1 %36, %37
br i1 %38, label %40, label %39
39: ; preds = %54, %53, %32
br label %61
40: ; preds = %32
%41 = icmp eq i8 %33, 47
br i1 %41, label %42, label %54
42: ; preds = %58, %40
%43 = phi i8* [ %35, %40 ], [ %56, %58 ]
store i8 0, i8* %43
%44 = call i64 @stat(i8* %0, %struct.stat* %4)
%45 = icmp eq i64 %44, 0
br i1 %45, label %46, label %104
46: ; preds = %42
%47 = getelementptr inbounds %struct.stat, %struct.stat* %4, i64 0, i32 0
%48 = load i32, i32* %47
%49 = call i32 @S_ISDIR(i32 %48)
%50 = icmp eq i32 %49, 0
br i1 %50, label %51, label %53
51: ; preds = %46
%52 = load i64, i64* @ENOTDIR
store i64 %52, i64* @errno
br label %104
53: ; preds = %46
store i8 47, i8* %43
br label %39
54: ; preds = %40, %58
%55 = phi i8* [ %56, %58 ], [ %35, %40 ]
%56 = getelementptr inbounds i8, i8* %55, i64 -1
%57 = icmp ugt i8* %56, %0
br i1 %57, label %58, label %39
58: ; preds = %54
%59 = load i8, i8* %56
%60 = icmp eq i8 %59, 47
br i1 %60, label %42, label %54
61: ; preds = %39, %102
br i1 %6, label %62, label %75
62: ; preds = %61
%63 = load i32, i32* @O_CREAT
%64 = load i32, i32* @O_EXCL
%65 = or i32 %64, %63
%66 = load i32, i32* @O_RDWR
%67 = or i32 %65, %66
%68 = call i32 @open(i8* %0, i32 %67, i32 384)
store i32 %68, i32* %1
%69 = icmp sgt i32 %68, -1
br i1 %69, label %104, label %70
70: ; preds = %62
%71 = load i64, i64* @errno
%72 = load i64, i64* @EEXIST
%73 = icmp eq i64 %71, %72
br i1 %73, label %74, label %104
74: ; preds = %79, %83, %70
br label %91
75: ; preds = %61
br i1 %7, label %76, label %83
76: ; preds = %75
%77 = call i64 @mkdir(i8* %0, i32 448)
%78 = icmp eq i64 %77, 0
br i1 %78, label %104, label %79
79: ; preds = %76
%80 = load i64, i64* @errno
%81 = load i64, i64* @EEXIST
%82 = icmp eq i64 %80, %81
br i1 %82, label %74, label %104
83: ; preds = %75
%84 = call i64 @lstat(i8* %0, %struct.stat* %4)
%85 = icmp eq i64 %84, 0
br i1 %85, label %74, label %86
86: ; preds = %83
%87 = load i64, i64* @errno
%88 = load i64, i64* @ENOENT
%89 = icmp eq i64 %87, %88
%90 = zext i1 %89 to i32
br label %104
91: ; preds = %74, %94
%92 = phi i8* [ %95, %94 ], [ %34, %74 ]
%93 = load i8, i8* %92
switch i8 %93, label %96 [
i8 0, label %104
i8 122, label %94
]
94: ; preds = %91
%95 = getelementptr inbounds i8, i8* %92, i64 1
store i8 97, i8* %92
br label %91
96: ; preds = %91
%97 = call i64 @isdigit(i8 signext %93)
%98 = icmp eq i64 %97, 0
br i1 %98, label %99, label %102
99: ; preds = %96
%100 = load i8, i8* %92
%101 = add i8 %100, 1
br label %102
102: ; preds = %96, %99
%103 = phi i8 [ %101, %99 ], [ 97, %96 ]
store i8 %103, i8* %92
br label %61
104: ; preds = %79, %76, %70, %62, %91, %42, %86, %51, %9
%105 = phi i32 [ 0, %9 ], [ %90, %86 ], [ 0, %51 ], [ 0, %42 ], [ 0, %91 ], [ 0, %79 ], [ 1, %76 ], [ 0, %70 ], [ 1, %62 ]
ret i32 %105
}