#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 st_mode;
};
typedef int mode_t;

/* Variables and functions */
int S_IROTH;
int S_IRUSR;
scalar_t__ S_ISBLK(int);
scalar_t__ S_ISCHR(int);
scalar_t__ S_ISDIR(int);
scalar_t__ S_ISFIFO(int);
scalar_t__ S_ISREG(int);
int S_IWGRP;
int S_IWOTH;
int S_IWUSR;
int S_IXGRP;
int S_IXOTH;
int S_IXUSR;
int errno;
scalar_t__ lstat(char *, struct stat *);
int /*<<< orphan*/ perror(char *);
int /*<<< orphan*/ printf(char *, char *);
int filepermissions(char *str_path) {
  char str[] = "---------";
  struct stat buf;
  if (lstat(str_path, &buf) < 0) {
    perror("lstat failed on file\n");
    return errno;
  }
  mode_t mode = buf.st_mode;
  str[0] = (mode & S_IRUSR) ? 'r' : '-';
  str[1] = (mode & S_IWUSR) ? 'w' : '-';
  str[2] = (mode & S_IXUSR) ? 'x' : '-';
  str[3] = (mode & S_IRUSR) ? 'r' : '-';
  str[4] = (mode & S_IWGRP) ? 'w' : '-';
  str[5] = (mode & S_IXGRP) ? 'x' : '-';
  str[6] = (mode & S_IROTH) ? 'r' : '-';
  str[7] = (mode & S_IWOTH) ? 'w' : '-';
  str[8] = (mode & S_IXOTH) ? 'x' : '-';
  printf("%s\t", str);
  char *ptr;
  if (S_ISREG(buf.st_mode))
    ptr = "regular file";
  else if (S_ISDIR(buf.st_mode))
    ptr = "directory";
  else if (S_ISCHR(buf.st_mode))
    ptr = "character special";
  else if (S_ISBLK(buf.st_mode))
    ptr = "block special";
  else if (S_ISFIFO(buf.st_mode))
    ptr = "fifo";
  else
    ptr = "unknown file bro :(";
  printf("%s\t", ptr);
  return 0;
}


x86 assembly (clang, -O0):
<filepermissions>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x10(%rbp)
mov    0xe6d(%rip),%rax
mov    %rax,-0x1a(%rbp)
mov    0xe6a(%rip),%ax
mov    %ax,-0x12(%rbp)
mov    -0x10(%rbp),%rdi
lea    -0x20(%rbp),%rsi
call   1060 <lstat@plt>
cmp    $0x0,%rax
jge    11d6 <filepermissions+0x56>
lea    0xe4a(%rip),%rdi
call   10a0 <perror@plt>
mov    0x2dec(%rip),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
jmp    13e3 <filepermissions+0x263>
mov    -0x20(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%edx
mov    0x2dc2(%rip),%rax
and    (%rax),%edx
mov    $0x2d,%eax
mov    $0x72,%ecx
cmp    $0x0,%edx
cmovne %ecx,%eax
mov    %al,-0x1a(%rbp)
mov    -0x24(%rbp),%edx
mov    0x2dcb(%rip),%rax
and    (%rax),%edx
mov    $0x2d,%eax
mov    $0x77,%ecx
cmp    $0x0,%edx
cmovne %ecx,%eax
mov    %al,-0x19(%rbp)
mov    -0x24(%rbp),%edx
mov    0x2dbc(%rip),%rax
and    (%rax),%edx
mov    $0x2d,%eax
mov    $0x78,%ecx
cmp    $0x0,%edx
cmovne %ecx,%eax
mov    %al,-0x18(%rbp)
mov    -0x24(%rbp),%edx
mov    0x2d65(%rip),%rax
and    (%rax),%edx
mov    $0x2d,%eax
mov    $0x72,%ecx
cmp    $0x0,%edx
cmovne %ecx,%eax
mov    %al,-0x17(%rbp)
mov    -0x24(%rbp),%edx
mov    0x2d76(%rip),%rax
and    (%rax),%edx
mov    $0x2d,%eax
mov    $0x77,%ecx
cmp    $0x0,%edx
cmovne %ecx,%eax
mov    %al,-0x16(%rbp)
mov    -0x24(%rbp),%edx
mov    0x2d47(%rip),%rax
and    (%rax),%edx
mov    $0x2d,%eax
mov    $0x78,%ecx
cmp    $0x0,%edx
cmovne %ecx,%eax
mov    %al,-0x15(%rbp)
mov    -0x24(%rbp),%edx
mov    0x2d10(%rip),%rax
and    (%rax),%edx
mov    $0x2d,%eax
mov    $0x72,%ecx
cmp    $0x0,%edx
cmovne %ecx,%eax
mov    %al,-0x14(%rbp)
mov    -0x24(%rbp),%edx
mov    0x2cd9(%rip),%rax
and    (%rax),%edx
mov    $0x2d,%eax
mov    $0x77,%ecx
cmp    $0x0,%edx
cmovne %ecx,%eax
mov    %al,-0x13(%rbp)
mov    -0x24(%rbp),%edx
mov    0x2d0a(%rip),%rax
and    (%rax),%edx
mov    $0x2d,%eax
mov    $0x78,%ecx
cmp    $0x0,%edx
cmovne %ecx,%eax
mov    %al,-0x12(%rbp)
lea    -0x1a(%rbp),%rsi
lea    0xd22(%rip),%rdi
call   1040 <printf@plt>
mov    -0x20(%rbp),%edi
call   1070 <S_ISREG@plt>
cmp    $0x0,%rax
je     1325 <filepermissions+0x1a5>
lea    0xd08(%rip),%rax
mov    %rax,-0x30(%rbp)
jmp    13cc <filepermissions+0x24c>
mov    -0x20(%rbp),%edi
call   1050 <S_ISDIR@plt>
cmp    $0x0,%rax
je     1347 <filepermissions+0x1c7>
lea    0xcf3(%rip),%rax
mov    %rax,-0x30(%rbp)
jmp    13c7 <filepermissions+0x247>
mov    -0x20(%rbp),%edi
call   1080 <S_ISCHR@plt>
cmp    $0x0,%rax
je     1369 <filepermissions+0x1e9>
lea    0xcdb(%rip),%rax
mov    %rax,-0x30(%rbp)
jmp    13c2 <filepermissions+0x242>
mov    -0x20(%rbp),%edi
call   1090 <S_ISBLK@plt>
cmp    $0x0,%rax
je     138b <filepermissions+0x20b>
lea    0xccb(%rip),%rax
mov    %rax,-0x30(%rbp)
jmp    13bd <filepermissions+0x23d>
mov    -0x20(%rbp),%edi
call   1030 <S_ISFIFO@plt>
cmp    $0x0,%rax
je     13ad <filepermissions+0x22d>
lea    0xcb7(%rip),%rax
mov    %rax,-0x30(%rbp)
jmp    13b8 <filepermissions+0x238>
lea    0xcac(%rip),%rax
mov    %rax,-0x30(%rbp)
jmp    13bd <filepermissions+0x23d>
jmp    13c2 <filepermissions+0x242>
jmp    13c7 <filepermissions+0x247>
jmp    13cc <filepermissions+0x24c>
mov    -0x30(%rbp),%rsi
lea    0xc49(%rip),%rdi
call   1040 <printf@plt>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<filepermissions>:
push   %rbx
sub    $0x20,%rsp
movabs $0x2d2d2d2d2d2d2d2d,%rax
2d 2d 2d
mov    %rax,0x8(%rsp)
movw   $0x2d,0x10(%rsp)
lea    0x18(%rsp),%rsi
call   1060 <lstat@plt>
test   %rax,%rax
js     12cb <filepermissions+0x14b>
mov    0x18(%rsp),%ebx
mov    0x2def(%rip),%rax
mov    (%rax),%eax
and    %ebx,%eax
mov    $0x2d,%eax
mov    $0x72,%r8d
mov    $0x72,%edi
cmove  %eax,%edi
mov    %dil,0x8(%rsp)
mov    0x2df4(%rip),%rdx
mov    (%rdx),%edx
and    %ebx,%edx
mov    $0x77,%edx
mov    $0x77,%esi
cmove  %eax,%esi
mov    %sil,0x9(%rsp)
mov    0x2de7(%rip),%rsi
mov    (%rsi),%esi
and    %ebx,%esi
mov    $0x78,%esi
mov    $0x78,%ecx
cmove  %eax,%ecx
mov    %cl,0xa(%rsp)
mov    %dil,0xb(%rsp)
mov    0x2dbe(%rip),%rcx
mov    (%rcx),%ecx
and    %ebx,%ecx
mov    $0x77,%ecx
cmove  %eax,%ecx
mov    0x2d9b(%rip),%rdi
mov    (%rdi),%edi
and    %ebx,%edi
mov    $0x78,%edi
cmove  %eax,%edi
mov    %cl,0xc(%rsp)
mov    %dil,0xd(%rsp)
mov    0x2d67(%rip),%rcx
mov    (%rcx),%ecx
and    %ebx,%ecx
cmove  %eax,%r8d
mov    0x2d40(%rip),%rcx
mov    (%rcx),%ecx
and    %ebx,%ecx
cmove  %eax,%edx
mov    %r8b,0xe(%rsp)
mov    %dl,0xf(%rsp)
mov    0x2d79(%rip),%rcx
mov    (%rcx),%ecx
and    %ebx,%ecx
cmove  %eax,%esi
mov    %sil,0x10(%rsp)
lea    0xd9e(%rip),%rdi
lea    0x8(%rsp),%rsi
call   1040 <printf@plt>
mov    %ebx,%edi
call   1070 <S_ISREG@plt>
test   %rax,%rax
je     12a1 <filepermissions+0x121>
lea    0xd85(%rip),%rsi
jmp    1313 <filepermissions+0x193>
mov    %ebx,%edi
call   1050 <S_ISDIR@plt>
test   %rax,%rax
je     12b6 <filepermissions+0x136>
lea    0xd7d(%rip),%rsi
jmp    1313 <filepermissions+0x193>
mov    %ebx,%edi
call   1080 <S_ISCHR@plt>
test   %rax,%rax
je     12e2 <filepermissions+0x162>
lea    0xd72(%rip),%rsi
jmp    1313 <filepermissions+0x193>
lea    0xd38(%rip),%rdi
call   10a0 <perror@plt>
mov    0x2cda(%rip),%rax
mov    (%rax),%eax
jmp    1321 <filepermissions+0x1a1>
mov    %ebx,%edi
call   1090 <S_ISBLK@plt>
test   %rax,%rax
je     12f7 <filepermissions+0x177>
lea    0xd58(%rip),%rsi
jmp    1313 <filepermissions+0x193>
mov    %ebx,%edi
call   1030 <S_ISFIFO@plt>
test   %rax,%rax
lea    0xd58(%rip),%rax
lea    0xd4c(%rip),%rsi
cmove  %rax,%rsi
lea    0xd06(%rip),%rdi
call   1040 <printf@plt>
xor    %eax,%eax
add    $0x20,%rsp
pop    %rbx
ret

LLVM IR (-O0):
%struct.stat = type { i32 }
@__const.filepermissions.str = [10 x i8] c"---------\00"
@.str = [22 x i8] c"lstat failed on file\0A\00"
@errno = global i32 0
@S_IRUSR = global i32 0
@S_IWUSR = global i32 0
@S_IXUSR = global i32 0
@S_IWGRP = global i32 0
@S_IXGRP = global i32 0
@S_IROTH = global i32 0
@S_IWOTH = global i32 0
@S_IXOTH = global i32 0
@.str.1 = [4 x i8] c"%s\09\00"
@.str.2 = [13 x i8] c"regular file\00"
@.str.3 = [10 x i8] c"directory\00"
@.str.4 = [18 x i8] c"character special\00"
@.str.5 = [14 x i8] c"block special\00"
@.str.6 = [5 x i8] c"fifo\00"
@.str.7 = [20 x i8] c"unknown file bro :(\00"
define i32 @filepermissions(i8* %0) {
%2 = alloca i32
%3 = alloca i8*
%4 = alloca [10 x i8]
%5 = alloca %struct.stat
%6 = alloca i32
%7 = alloca i8*
store i8* %0, i8** %3
%8 = bitcast [10 x i8]* %4 to i8*
%9 = load i8*, i8** %3
%10 = call i64 @lstat(i8* %9, %struct.stat* %5)
%11 = icmp slt i64 %10, 0
br i1 %11, label %12, label %15
12: ; preds = %1
%13 = call i32 @perror(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str, i64 0, i64 0))
%14 = load i32, i32* @errno
store i32 %14, i32* %2
br label %129
15: ; preds = %1
%16 = getelementptr inbounds %struct.stat, %struct.stat* %5, i32 0, i32 0
%17 = load i32, i32* %16
store i32 %17, i32* %6
%18 = load i32, i32* %6
%19 = load i32, i32* @S_IRUSR
%20 = and i32 %18, %19
%21 = icmp ne i32 %20, 0
%22 = zext i1 %21 to i64
%23 = select i1 %21, i32 114, i32 45
%24 = trunc i32 %23 to i8
%25 = getelementptr inbounds [10 x i8], [10 x i8]* %4, i64 0, i64 0
store i8 %24, i8* %25
%26 = load i32, i32* %6
%27 = load i32, i32* @S_IWUSR
%28 = and i32 %26, %27
%29 = icmp ne i32 %28, 0
%30 = zext i1 %29 to i64
%31 = select i1 %29, i32 119, i32 45
%32 = trunc i32 %31 to i8
%33 = getelementptr inbounds [10 x i8], [10 x i8]* %4, i64 0, i64 1
store i8 %32, i8* %33
%34 = load i32, i32* %6
%35 = load i32, i32* @S_IXUSR
%36 = and i32 %34, %35
%37 = icmp ne i32 %36, 0
%38 = zext i1 %37 to i64
%39 = select i1 %37, i32 120, i32 45
%40 = trunc i32 %39 to i8
%41 = getelementptr inbounds [10 x i8], [10 x i8]* %4, i64 0, i64 2
store i8 %40, i8* %41
%42 = load i32, i32* %6
%43 = load i32, i32* @S_IRUSR
%44 = and i32 %42, %43
%45 = icmp ne i32 %44, 0
%46 = zext i1 %45 to i64
%47 = select i1 %45, i32 114, i32 45
%48 = trunc i32 %47 to i8
%49 = getelementptr inbounds [10 x i8], [10 x i8]* %4, i64 0, i64 3
store i8 %48, i8* %49
%50 = load i32, i32* %6
%51 = load i32, i32* @S_IWGRP
%52 = and i32 %50, %51
%53 = icmp ne i32 %52, 0
%54 = zext i1 %53 to i64
%55 = select i1 %53, i32 119, i32 45
%56 = trunc i32 %55 to i8
%57 = getelementptr inbounds [10 x i8], [10 x i8]* %4, i64 0, i64 4
store i8 %56, i8* %57
%58 = load i32, i32* %6
%59 = load i32, i32* @S_IXGRP
%60 = and i32 %58, %59
%61 = icmp ne i32 %60, 0
%62 = zext i1 %61 to i64
%63 = select i1 %61, i32 120, i32 45
%64 = trunc i32 %63 to i8
%65 = getelementptr inbounds [10 x i8], [10 x i8]* %4, i64 0, i64 5
store i8 %64, i8* %65
%66 = load i32, i32* %6
%67 = load i32, i32* @S_IROTH
%68 = and i32 %66, %67
%69 = icmp ne i32 %68, 0
%70 = zext i1 %69 to i64
%71 = select i1 %69, i32 114, i32 45
%72 = trunc i32 %71 to i8
%73 = getelementptr inbounds [10 x i8], [10 x i8]* %4, i64 0, i64 6
store i8 %72, i8* %73
%74 = load i32, i32* %6
%75 = load i32, i32* @S_IWOTH
%76 = and i32 %74, %75
%77 = icmp ne i32 %76, 0
%78 = zext i1 %77 to i64
%79 = select i1 %77, i32 119, i32 45
%80 = trunc i32 %79 to i8
%81 = getelementptr inbounds [10 x i8], [10 x i8]* %4, i64 0, i64 7
store i8 %80, i8* %81
%82 = load i32, i32* %6
%83 = load i32, i32* @S_IXOTH
%84 = and i32 %82, %83
%85 = icmp ne i32 %84, 0
%86 = zext i1 %85 to i64
%87 = select i1 %85, i32 120, i32 45
%88 = trunc i32 %87 to i8
%89 = getelementptr inbounds [10 x i8], [10 x i8]* %4, i64 0, i64 8
store i8 %88, i8* %89
%90 = getelementptr inbounds [10 x i8], [10 x i8]* %4, i64 0, i64 0
%91 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i8* %90)
%92 = getelementptr inbounds %struct.stat, %struct.stat* %5, i32 0, i32 0
%93 = load i32, i32* %92
%94 = call i64 @S_ISREG(i32 %93)
%95 = icmp ne i64 %94, 0
br i1 %95, label %96, label %97
96: ; preds = %15
store i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.2, i64 0, i64 0), i8** %7
br label %126
97: ; preds = %15
%98 = getelementptr inbounds %struct.stat, %struct.stat* %5, i32 0, i32 0
%99 = load i32, i32* %98
%100 = call i64 @S_ISDIR(i32 %99)
%101 = icmp ne i64 %100, 0
br i1 %101, label %102, label %103
102: ; preds = %97
store i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.3, i64 0, i64 0), i8** %7
br label %125
103: ; preds = %97
%104 = getelementptr inbounds %struct.stat, %struct.stat* %5, i32 0, i32 0
%105 = load i32, i32* %104
%106 = call i64 @S_ISCHR(i32 %105)
%107 = icmp ne i64 %106, 0
br i1 %107, label %108, label %109
108: ; preds = %103
store i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.4, i64 0, i64 0), i8** %7
br label %124
109: ; preds = %103
%110 = getelementptr inbounds %struct.stat, %struct.stat* %5, i32 0, i32 0
%111 = load i32, i32* %110
%112 = call i64 @S_ISBLK(i32 %111)
%113 = icmp ne i64 %112, 0
br i1 %113, label %114, label %115
114: ; preds = %109
store i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.5, i64 0, i64 0), i8** %7
br label %123
115: ; preds = %109
%116 = getelementptr inbounds %struct.stat, %struct.stat* %5, i32 0, i32 0
%117 = load i32, i32* %116
%118 = call i64 @S_ISFIFO(i32 %117)
%119 = icmp ne i64 %118, 0
br i1 %119, label %120, label %121
120: ; preds = %115
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.6, i64 0, i64 0), i8** %7
br label %122
121: ; preds = %115
store i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.7, i64 0, i64 0), i8** %7
br label %122
122: ; preds = %121, %120
br label %123
123: ; preds = %122, %114
br label %124
124: ; preds = %123, %108
br label %125
125: ; preds = %124, %102
br label %126
126: ; preds = %125, %96
%127 = load i8*, i8** %7
%128 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i8* %127)
store i32 0, i32* %2
br label %129
129: ; preds = %126, %12
%130 = load i32, i32* %2
ret i32 %130
}

LLVM IR (-O2):
%struct.stat = type { i32 }
@__const.filepermissions.str = [10 x i8] c"---------\00"
@.str = [22 x i8] c"lstat failed on file\0A\00"
@errno = global i32 0
@S_IRUSR = global i32 0
@S_IWUSR = global i32 0
@S_IXUSR = global i32 0
@S_IWGRP = global i32 0
@S_IXGRP = global i32 0
@S_IROTH = global i32 0
@S_IWOTH = global i32 0
@S_IXOTH = global i32 0
@.str.1 = [4 x i8] c"%s\09\00"
@.str.2 = [13 x i8] c"regular file\00"
@.str.3 = [10 x i8] c"directory\00"
@.str.4 = [18 x i8] c"character special\00"
@.str.5 = [14 x i8] c"block special\00"
@.str.6 = [5 x i8] c"fifo\00"
@.str.7 = [20 x i8] c"unknown file bro :(\00"
define i32 @filepermissions(i8* nocapture %0) {
%2 = alloca [10 x i8]
%3 = alloca %struct.stat
%4 = getelementptr inbounds [10 x i8], [10 x i8]* %2, i64 0, i64 0
%5 = bitcast %struct.stat* %3 to i8*
%6 = call i64 @lstat(i8* %0, %struct.stat* %3)
%7 = icmp slt i64 %6, 0
br i1 %7, label %8, label %11
8: ; preds = %1
%9 = tail call i32 @perror(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str, i64 0, i64 0))
%10 = load i32, i32* @errno
br label %73
11: ; preds = %1
%12 = getelementptr inbounds %struct.stat, %struct.stat* %3, i64 0, i32 0
%13 = load i32, i32* %12
%14 = load i32, i32* @S_IRUSR
%15 = and i32 %14, %13
%16 = icmp eq i32 %15, 0
%17 = select i1 %16, i8 45, i8 114
store i8 %17, i8* %4
%18 = load i32, i32* @S_IWUSR
%19 = and i32 %18, %13
%20 = icmp eq i32 %19, 0
%21 = select i1 %20, i8 45, i8 119
%22 = getelementptr inbounds [10 x i8], [10 x i8]* %2, i64 0, i64 1
store i8 %21, i8* %22
%23 = load i32, i32* @S_IXUSR
%24 = and i32 %23, %13
%25 = icmp eq i32 %24, 0
%26 = select i1 %25, i8 45, i8 120
%27 = getelementptr inbounds [10 x i8], [10 x i8]* %2, i64 0, i64 2
store i8 %26, i8* %27
%28 = getelementptr inbounds [10 x i8], [10 x i8]* %2, i64 0, i64 3
store i8 %17, i8* %28
%29 = load i32, i32* @S_IWGRP
%30 = and i32 %29, %13
%31 = icmp eq i32 %30, 0
%32 = select i1 %31, i8 45, i8 119
%33 = getelementptr inbounds [10 x i8], [10 x i8]* %2, i64 0, i64 4
store i8 %32, i8* %33
%34 = load i32, i32* @S_IXGRP
%35 = and i32 %34, %13
%36 = icmp eq i32 %35, 0
%37 = select i1 %36, i8 45, i8 120
%38 = getelementptr inbounds [10 x i8], [10 x i8]* %2, i64 0, i64 5
store i8 %37, i8* %38
%39 = load i32, i32* @S_IROTH
%40 = and i32 %39, %13
%41 = icmp eq i32 %40, 0
%42 = select i1 %41, i8 45, i8 114
%43 = getelementptr inbounds [10 x i8], [10 x i8]* %2, i64 0, i64 6
store i8 %42, i8* %43
%44 = load i32, i32* @S_IWOTH
%45 = and i32 %44, %13
%46 = icmp eq i32 %45, 0
%47 = select i1 %46, i8 45, i8 119
%48 = getelementptr inbounds [10 x i8], [10 x i8]* %2, i64 0, i64 7
store i8 %47, i8* %48
%49 = load i32, i32* @S_IXOTH
%50 = and i32 %49, %13
%51 = icmp eq i32 %50, 0
%52 = select i1 %51, i8 45, i8 120
%53 = getelementptr inbounds [10 x i8], [10 x i8]* %2, i64 0, i64 8
store i8 %52, i8* %53
%54 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i8* %4)
%55 = call i64 @S_ISREG(i32 %13)
%56 = icmp eq i64 %55, 0
br i1 %56, label %57, label %70
57: ; preds = %11
%58 = call i64 @S_ISDIR(i32 %13)
%59 = icmp eq i64 %58, 0
br i1 %59, label %60, label %70
60: ; preds = %57
%61 = call i64 @S_ISCHR(i32 %13)
%62 = icmp eq i64 %61, 0
br i1 %62, label %63, label %70
63: ; preds = %60
%64 = call i64 @S_ISBLK(i32 %13)
%65 = icmp eq i64 %64, 0
br i1 %65, label %66, label %70
66: ; preds = %63
%67 = call i64 @S_ISFIFO(i32 %13)
%68 = icmp eq i64 %67, 0
%69 = select i1 %68, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.7, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.6, i64 0, i64 0)
br label %70
70: ; preds = %66, %63, %60, %57, %11
%71 = phi i8* [ getelementptr inbounds ([13 x i8], [13 x i8]* @.str.2, i64 0, i64 0), %11 ], [ getelementptr inbounds ([10 x i8], [10 x i8]* @.str.3, i64 0, i64 0), %57 ], [ getelementptr inbounds ([18 x i8], [18 x i8]* @.str.4, i64 0, i64 0), %60 ], [ getelementptr inbounds ([14 x i8], [14 x i8]* @.str.5, i64 0, i64 0), %63 ], [ %69, %66 ]
%72 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i8* %71)
br label %73
73: ; preds = %70, %8
%74 = phi i32 [ %10, %8 ], [ 0, %70 ]
ret i32 %74
}