#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;
};

/* Variables and functions */
int S_IRGRP;
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_ISLNK(int);
scalar_t__ S_ISSOCK(int);
int S_IWGRP;
int S_IWOTH;
int S_IWUSR;
int S_IXGRP;
int S_IXOTH;
int S_IXUSR;
int /*<<< orphan*/ memset(char *, char, int);
char *attr(struct stat *buf) {
  static char attr_buf[11];
  memset(attr_buf, '-', 10);
  if (S_ISLNK(buf->st_mode))
    attr_buf[0] = 'l';
  else if (S_ISDIR(buf->st_mode))
    attr_buf[0] = 'd';
  else if (S_ISCHR(buf->st_mode))
    attr_buf[0] = 'c';
  else if (S_ISBLK(buf->st_mode))
    attr_buf[0] = 'b';
  else if (S_ISFIFO(buf->st_mode))
    attr_buf[0] = 'p';
  else if (S_ISSOCK(buf->st_mode))
    attr_buf[0] = 's';
  if (buf->st_mode & S_IRUSR)
    attr_buf[1] = 'r';
  if (buf->st_mode & S_IWUSR)
    attr_buf[2] = 'w';
  if (buf->st_mode & S_IXUSR)
    attr_buf[3] = 'x';
  if (buf->st_mode & S_IRGRP)
    attr_buf[4] = 'r';
  if (buf->st_mode & S_IWGRP)
    attr_buf[5] = 'w';
  if (buf->st_mode & S_IXGRP)
    attr_buf[6] = 'x';
  if (buf->st_mode & S_IROTH)
    attr_buf[7] = 'r';
  if (buf->st_mode & S_IWOTH)
    attr_buf[8] = 'w';
  if (buf->st_mode & S_IXOTH)
    attr_buf[9] = 'x';
  attr_buf[10] = 0;
  return attr_buf;
}


x86 assembly (clang, -O0):
<attr>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %rdi,-0x8(%rbp)
lea    0x2ed9(%rip),%rdi
mov    $0x2d,%esi
mov    $0xa,%edx
call   1070 <memset@plt>
mov    -0x8(%rbp),%rax
mov    (%rax),%edi
call   1030 <S_ISLNK@plt>
cmp    $0x0,%rax
je     11b3 <attr+0x43>
movb   $0x6c,0x2eae(%rip)
jmp    126c <attr+0xfc>
mov    -0x8(%rbp),%rax
mov    (%rax),%edi
call   1060 <S_ISDIR@plt>
cmp    $0x0,%rax
je     11d4 <attr+0x64>
movb   $0x64,0x2e8d(%rip)
jmp    1267 <attr+0xf7>
mov    -0x8(%rbp),%rax
mov    (%rax),%edi
call   1080 <S_ISCHR@plt>
cmp    $0x0,%rax
je     11f5 <attr+0x85>
movb   $0x63,0x2e6c(%rip)
jmp    1262 <attr+0xf2>
mov    -0x8(%rbp),%rax
mov    (%rax),%edi
call   1090 <S_ISBLK@plt>
cmp    $0x0,%rax
je     1216 <attr+0xa6>
movb   $0x62,0x2e4b(%rip)
jmp    125d <attr+0xed>
mov    -0x8(%rbp),%rax
mov    (%rax),%edi
call   1040 <S_ISFIFO@plt>
cmp    $0x0,%rax
je     1237 <attr+0xc7>
movb   $0x70,0x2e2a(%rip)
jmp    1258 <attr+0xe8>
mov    -0x8(%rbp),%rax
mov    (%rax),%edi
call   1050 <S_ISSOCK@plt>
cmp    $0x0,%rax
je     1253 <attr+0xe3>
movb   $0x73,0x2e09(%rip)
jmp    1258 <attr+0xe8>
jmp    125d <attr+0xed>
jmp    1262 <attr+0xf2>
jmp    1267 <attr+0xf7>
jmp    126c <attr+0xfc>
mov    -0x8(%rbp),%rax
mov    (%rax),%eax
mov    0x2d2f(%rip),%rcx
and    (%rcx),%eax
cmp    $0x0,%eax
je     128b <attr+0x11b>
movb   $0x72,0x2dd2(%rip)
mov    -0x8(%rbp),%rax
mov    (%rax),%eax
mov    0x2d38(%rip),%rcx
and    (%rcx),%eax
cmp    $0x0,%eax
je     12aa <attr+0x13a>
movb   $0x77,0x2db4(%rip)
mov    -0x8(%rbp),%rax
mov    (%rax),%eax
mov    0x2d29(%rip),%rcx
and    (%rcx),%eax
cmp    $0x0,%eax
je     12c9 <attr+0x159>
movb   $0x78,0x2d96(%rip)
mov    -0x8(%rbp),%rax
mov    (%rax),%eax
mov    0x2ce2(%rip),%rcx
and    (%rcx),%eax
cmp    $0x0,%eax
je     12e8 <attr+0x178>
movb   $0x72,0x2d78(%rip)
mov    -0x8(%rbp),%rax
mov    (%rax),%eax
mov    0x2ce3(%rip),%rcx
and    (%rcx),%eax
cmp    $0x0,%eax
je     1307 <attr+0x197>
movb   $0x77,0x2d5a(%rip)
mov    -0x8(%rbp),%rax
mov    (%rax),%eax
mov    0x2cb4(%rip),%rcx
and    (%rcx),%eax
cmp    $0x0,%eax
je     1326 <attr+0x1b6>
movb   $0x78,0x2d3c(%rip)
mov    -0x8(%rbp),%rax
mov    (%rax),%eax
mov    0x2c7d(%rip),%rcx
and    (%rcx),%eax
cmp    $0x0,%eax
je     1345 <attr+0x1d5>
movb   $0x72,0x2d1e(%rip)
mov    -0x8(%rbp),%rax
mov    (%rax),%eax
mov    0x2c46(%rip),%rcx
and    (%rcx),%eax
cmp    $0x0,%eax
je     1364 <attr+0x1f4>
movb   $0x77,0x2d00(%rip)
mov    -0x8(%rbp),%rax
mov    (%rax),%eax
mov    0x2c77(%rip),%rcx
and    (%rcx),%eax
cmp    $0x0,%eax
je     1383 <attr+0x213>
movb   $0x78,0x2ce2(%rip)
movb   $0x0,0x2cdc(%rip)
lea    0x2ccb(%rip),%rax
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<attr>:
push   %rbx
mov    %rdi,%rbx
lea    0x2ee1(%rip),%rdi
mov    $0x2d,%esi
mov    $0xa,%edx
call   1070 <memset@plt>
mov    (%rbx),%edi
call   1030 <S_ISLNK@plt>
mov    $0x6c,%cl
test   %rax,%rax
jne    11de <attr+0x6e>
mov    (%rbx),%edi
call   1060 <S_ISDIR@plt>
mov    $0x64,%cl
test   %rax,%rax
jne    11de <attr+0x6e>
mov    (%rbx),%edi
call   1080 <S_ISCHR@plt>
mov    $0x63,%cl
test   %rax,%rax
jne    11de <attr+0x6e>
mov    (%rbx),%edi
call   1090 <S_ISBLK@plt>
mov    $0x62,%cl
test   %rax,%rax
jne    11de <attr+0x6e>
mov    (%rbx),%edi
call   1040 <S_ISFIFO@plt>
mov    $0x70,%cl
test   %rax,%rax
jne    11de <attr+0x6e>
mov    (%rbx),%edi
call   1050 <S_ISSOCK@plt>
mov    $0x73,%cl
test   %rax,%rax
je     11e4 <attr+0x74>
mov    %cl,0x2e78(%rip)
mov    (%rbx),%eax
mov    0x2dbb(%rip),%rcx
test   %eax,(%rcx)
je     11fa <attr+0x8a>
movb   $0x72,0x2e65(%rip)
mov    (%rbx),%eax
mov    0x2dcf(%rip),%rcx
test   %eax,(%rcx)
je     120e <attr+0x9e>
movb   $0x77,0x2e52(%rip)
mov    (%rbx),%eax
mov    0x2dcb(%rip),%rcx
test   %eax,(%rcx)
je     1222 <attr+0xb2>
movb   $0x78,0x2e3f(%rip)
mov    (%rbx),%eax
mov    0x2d8f(%rip),%rcx
test   %eax,(%rcx)
je     1236 <attr+0xc6>
movb   $0x72,0x2e2c(%rip)
mov    (%rbx),%eax
mov    0x2d9b(%rip),%rcx
test   %eax,(%rcx)
je     124a <attr+0xda>
movb   $0x77,0x2e19(%rip)
mov    (%rbx),%eax
mov    0x2d77(%rip),%rcx
test   %eax,(%rcx)
je     125e <attr+0xee>
movb   $0x78,0x2e06(%rip)
mov    (%rbx),%eax
mov    0x2d4b(%rip),%rcx
test   %eax,(%rcx)
je     1272 <attr+0x102>
movb   $0x72,0x2df3(%rip)
mov    (%rbx),%eax
mov    0x2d1f(%rip),%rcx
test   %eax,(%rcx)
je     1286 <attr+0x116>
movb   $0x77,0x2de0(%rip)
mov    (%rbx),%eax
mov    0x2d5b(%rip),%rcx
test   %eax,(%rcx)
je     1298 <attr+0x128>
movb   $0x78,0x2dcd(%rip)
movb   $0x0,0x2dc7(%rip)
lea    0x2db6(%rip),%rax
pop    %rbx
ret

LLVM IR (-O0):
%struct.stat = type { i32 }
@attr.attr_buf = internal global [11 x i8] zeroinitializer
@S_IRUSR = global i32 0
@S_IWUSR = global i32 0
@S_IXUSR = global i32 0
@S_IRGRP = 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
define i8* @attr(%struct.stat* %0) {
%2 = alloca %struct.stat*
store %struct.stat* %0, %struct.stat** %2
%3 = call i32 @memset(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @attr.attr_buf, i64 0, i64 0), i8 signext 45, i32 10)
%4 = load %struct.stat*, %struct.stat** %2
%5 = getelementptr inbounds %struct.stat, %struct.stat* %4, i32 0, i32 0
%6 = load i32, i32* %5
%7 = call i64 @S_ISLNK(i32 %6)
%8 = icmp ne i64 %7, 0
br i1 %8, label %9, label %10
9: ; preds = %1
store i8 108, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @attr.attr_buf, i64 0, i64 0)
br label %50
10: ; preds = %1
%11 = load %struct.stat*, %struct.stat** %2
%12 = getelementptr inbounds %struct.stat, %struct.stat* %11, i32 0, i32 0
%13 = load i32, i32* %12
%14 = call i64 @S_ISDIR(i32 %13)
%15 = icmp ne i64 %14, 0
br i1 %15, label %16, label %17
16: ; preds = %10
store i8 100, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @attr.attr_buf, i64 0, i64 0)
br label %49
17: ; preds = %10
%18 = load %struct.stat*, %struct.stat** %2
%19 = getelementptr inbounds %struct.stat, %struct.stat* %18, i32 0, i32 0
%20 = load i32, i32* %19
%21 = call i64 @S_ISCHR(i32 %20)
%22 = icmp ne i64 %21, 0
br i1 %22, label %23, label %24
23: ; preds = %17
store i8 99, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @attr.attr_buf, i64 0, i64 0)
br label %48
24: ; preds = %17
%25 = load %struct.stat*, %struct.stat** %2
%26 = getelementptr inbounds %struct.stat, %struct.stat* %25, i32 0, i32 0
%27 = load i32, i32* %26
%28 = call i64 @S_ISBLK(i32 %27)
%29 = icmp ne i64 %28, 0
br i1 %29, label %30, label %31
30: ; preds = %24
store i8 98, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @attr.attr_buf, i64 0, i64 0)
br label %47
31: ; preds = %24
%32 = load %struct.stat*, %struct.stat** %2
%33 = getelementptr inbounds %struct.stat, %struct.stat* %32, i32 0, i32 0
%34 = load i32, i32* %33
%35 = call i64 @S_ISFIFO(i32 %34)
%36 = icmp ne i64 %35, 0
br i1 %36, label %37, label %38
37: ; preds = %31
store i8 112, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @attr.attr_buf, i64 0, i64 0)
br label %46
38: ; preds = %31
%39 = load %struct.stat*, %struct.stat** %2
%40 = getelementptr inbounds %struct.stat, %struct.stat* %39, i32 0, i32 0
%41 = load i32, i32* %40
%42 = call i64 @S_ISSOCK(i32 %41)
%43 = icmp ne i64 %42, 0
br i1 %43, label %44, label %45
44: ; preds = %38
store i8 115, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @attr.attr_buf, i64 0, i64 0)
br label %45
45: ; preds = %44, %38
br label %46
46: ; preds = %45, %37
br label %47
47: ; preds = %46, %30
br label %48
48: ; preds = %47, %23
br label %49
49: ; preds = %48, %16
br label %50
50: ; preds = %49, %9
%51 = load %struct.stat*, %struct.stat** %2
%52 = getelementptr inbounds %struct.stat, %struct.stat* %51, i32 0, i32 0
%53 = load i32, i32* %52
%54 = load i32, i32* @S_IRUSR
%55 = and i32 %53, %54
%56 = icmp ne i32 %55, 0
br i1 %56, label %57, label %58
57: ; preds = %50
store i8 114, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @attr.attr_buf, i64 0, i64 1)
br label %58
58: ; preds = %57, %50
%59 = load %struct.stat*, %struct.stat** %2
%60 = getelementptr inbounds %struct.stat, %struct.stat* %59, i32 0, i32 0
%61 = load i32, i32* %60
%62 = load i32, i32* @S_IWUSR
%63 = and i32 %61, %62
%64 = icmp ne i32 %63, 0
br i1 %64, label %65, label %66
65: ; preds = %58
store i8 119, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @attr.attr_buf, i64 0, i64 2)
br label %66
66: ; preds = %65, %58
%67 = load %struct.stat*, %struct.stat** %2
%68 = getelementptr inbounds %struct.stat, %struct.stat* %67, i32 0, i32 0
%69 = load i32, i32* %68
%70 = load i32, i32* @S_IXUSR
%71 = and i32 %69, %70
%72 = icmp ne i32 %71, 0
br i1 %72, label %73, label %74
73: ; preds = %66
store i8 120, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @attr.attr_buf, i64 0, i64 3)
br label %74
74: ; preds = %73, %66
%75 = load %struct.stat*, %struct.stat** %2
%76 = getelementptr inbounds %struct.stat, %struct.stat* %75, i32 0, i32 0
%77 = load i32, i32* %76
%78 = load i32, i32* @S_IRGRP
%79 = and i32 %77, %78
%80 = icmp ne i32 %79, 0
br i1 %80, label %81, label %82
81: ; preds = %74
store i8 114, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @attr.attr_buf, i64 0, i64 4)
br label %82
82: ; preds = %81, %74
%83 = load %struct.stat*, %struct.stat** %2
%84 = getelementptr inbounds %struct.stat, %struct.stat* %83, i32 0, i32 0
%85 = load i32, i32* %84
%86 = load i32, i32* @S_IWGRP
%87 = and i32 %85, %86
%88 = icmp ne i32 %87, 0
br i1 %88, label %89, label %90
89: ; preds = %82
store i8 119, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @attr.attr_buf, i64 0, i64 5)
br label %90
90: ; preds = %89, %82
%91 = load %struct.stat*, %struct.stat** %2
%92 = getelementptr inbounds %struct.stat, %struct.stat* %91, i32 0, i32 0
%93 = load i32, i32* %92
%94 = load i32, i32* @S_IXGRP
%95 = and i32 %93, %94
%96 = icmp ne i32 %95, 0
br i1 %96, label %97, label %98
97: ; preds = %90
store i8 120, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @attr.attr_buf, i64 0, i64 6)
br label %98
98: ; preds = %97, %90
%99 = load %struct.stat*, %struct.stat** %2
%100 = getelementptr inbounds %struct.stat, %struct.stat* %99, i32 0, i32 0
%101 = load i32, i32* %100
%102 = load i32, i32* @S_IROTH
%103 = and i32 %101, %102
%104 = icmp ne i32 %103, 0
br i1 %104, label %105, label %106
105: ; preds = %98
store i8 114, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @attr.attr_buf, i64 0, i64 7)
br label %106
106: ; preds = %105, %98
%107 = load %struct.stat*, %struct.stat** %2
%108 = getelementptr inbounds %struct.stat, %struct.stat* %107, i32 0, i32 0
%109 = load i32, i32* %108
%110 = load i32, i32* @S_IWOTH
%111 = and i32 %109, %110
%112 = icmp ne i32 %111, 0
br i1 %112, label %113, label %114
113: ; preds = %106
store i8 119, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @attr.attr_buf, i64 0, i64 8)
br label %114
114: ; preds = %113, %106
%115 = load %struct.stat*, %struct.stat** %2
%116 = getelementptr inbounds %struct.stat, %struct.stat* %115, i32 0, i32 0
%117 = load i32, i32* %116
%118 = load i32, i32* @S_IXOTH
%119 = and i32 %117, %118
%120 = icmp ne i32 %119, 0
br i1 %120, label %121, label %122
121: ; preds = %114
store i8 120, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @attr.attr_buf, i64 0, i64 9)
br label %122
122: ; preds = %121, %114
store i8 0, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @attr.attr_buf, i64 0, i64 10)
ret i8* getelementptr inbounds ([11 x i8], [11 x i8]* @attr.attr_buf, i64 0, i64 0)
}

LLVM IR (-O2):
%struct.stat = type { i32 }
@attr.attr_buf = internal global [11 x i8] zeroinitializer
@S_IRUSR = global i32 0
@S_IWUSR = global i32 0
@S_IXUSR = global i32 0
@S_IRGRP = 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
define i8* @attr(%struct.stat* nocapture %0) {
%2 = tail call i32 @memset(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @attr.attr_buf, i64 0, i64 0), i8 signext 45, i32 10)
%3 = getelementptr inbounds %struct.stat, %struct.stat* %0, i64 0, i32 0
%4 = load i32, i32* %3
%5 = tail call i64 @S_ISLNK(i32 %4)
%6 = icmp eq i64 %5, 0
br i1 %6, label %7, label %27
7: ; preds = %1
%8 = load i32, i32* %3
%9 = tail call i64 @S_ISDIR(i32 %8)
%10 = icmp eq i64 %9, 0
br i1 %10, label %11, label %27
11: ; preds = %7
%12 = load i32, i32* %3
%13 = tail call i64 @S_ISCHR(i32 %12)
%14 = icmp eq i64 %13, 0
br i1 %14, label %15, label %27
15: ; preds = %11
%16 = load i32, i32* %3
%17 = tail call i64 @S_ISBLK(i32 %16)
%18 = icmp eq i64 %17, 0
br i1 %18, label %19, label %27
19: ; preds = %15
%20 = load i32, i32* %3
%21 = tail call i64 @S_ISFIFO(i32 %20)
%22 = icmp eq i64 %21, 0
br i1 %22, label %23, label %27
23: ; preds = %19
%24 = load i32, i32* %3
%25 = tail call i64 @S_ISSOCK(i32 %24)
%26 = icmp eq i64 %25, 0
br i1 %26, label %29, label %27
27: ; preds = %23, %19, %15, %11, %7, %1
%28 = phi i8 [ 108, %1 ], [ 100, %7 ], [ 99, %11 ], [ 98, %15 ], [ 112, %19 ], [ 115, %23 ]
store i8 %28, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @attr.attr_buf, i64 0, i64 0)
br label %29
29: ; preds = %27, %23
%30 = load i32, i32* %3
%31 = load i32, i32* @S_IRUSR
%32 = and i32 %31, %30
%33 = icmp eq i32 %32, 0
br i1 %33, label %36, label %34
34: ; preds = %29
store i8 114, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @attr.attr_buf, i64 0, i64 1)
%35 = load i32, i32* %3
br label %36
36: ; preds = %34, %29
%37 = phi i32 [ %35, %34 ], [ %30, %29 ]
%38 = load i32, i32* @S_IWUSR
%39 = and i32 %38, %37
%40 = icmp eq i32 %39, 0
br i1 %40, label %43, label %41
41: ; preds = %36
store i8 119, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @attr.attr_buf, i64 0, i64 2)
%42 = load i32, i32* %3
br label %43
43: ; preds = %41, %36
%44 = phi i32 [ %42, %41 ], [ %37, %36 ]
%45 = load i32, i32* @S_IXUSR
%46 = and i32 %45, %44
%47 = icmp eq i32 %46, 0
br i1 %47, label %50, label %48
48: ; preds = %43
store i8 120, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @attr.attr_buf, i64 0, i64 3)
%49 = load i32, i32* %3
br label %50
50: ; preds = %48, %43
%51 = phi i32 [ %49, %48 ], [ %44, %43 ]
%52 = load i32, i32* @S_IRGRP
%53 = and i32 %52, %51
%54 = icmp eq i32 %53, 0
br i1 %54, label %57, label %55
55: ; preds = %50
store i8 114, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @attr.attr_buf, i64 0, i64 4)
%56 = load i32, i32* %3
br label %57
57: ; preds = %55, %50
%58 = phi i32 [ %56, %55 ], [ %51, %50 ]
%59 = load i32, i32* @S_IWGRP
%60 = and i32 %59, %58
%61 = icmp eq i32 %60, 0
br i1 %61, label %64, label %62
62: ; preds = %57
store i8 119, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @attr.attr_buf, i64 0, i64 5)
%63 = load i32, i32* %3
br label %64
64: ; preds = %62, %57
%65 = phi i32 [ %63, %62 ], [ %58, %57 ]
%66 = load i32, i32* @S_IXGRP
%67 = and i32 %66, %65
%68 = icmp eq i32 %67, 0
br i1 %68, label %71, label %69
69: ; preds = %64
store i8 120, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @attr.attr_buf, i64 0, i64 6)
%70 = load i32, i32* %3
br label %71
71: ; preds = %69, %64
%72 = phi i32 [ %70, %69 ], [ %65, %64 ]
%73 = load i32, i32* @S_IROTH
%74 = and i32 %73, %72
%75 = icmp eq i32 %74, 0
br i1 %75, label %78, label %76
76: ; preds = %71
store i8 114, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @attr.attr_buf, i64 0, i64 7)
%77 = load i32, i32* %3
br label %78
78: ; preds = %76, %71
%79 = phi i32 [ %77, %76 ], [ %72, %71 ]
%80 = load i32, i32* @S_IWOTH
%81 = and i32 %80, %79
%82 = icmp eq i32 %81, 0
br i1 %82, label %85, label %83
83: ; preds = %78
store i8 119, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @attr.attr_buf, i64 0, i64 8)
%84 = load i32, i32* %3
br label %85
85: ; preds = %83, %78
%86 = phi i32 [ %84, %83 ], [ %79, %78 ]
%87 = load i32, i32* @S_IXOTH
%88 = and i32 %87, %86
%89 = icmp eq i32 %88, 0
br i1 %89, label %91, label %90
90: ; preds = %85
store i8 120, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @attr.attr_buf, i64 0, i64 9)
br label %91
91: ; preds = %90, %85
store i8 0, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @attr.attr_buf, i64 0, i64 10)
ret i8* getelementptr inbounds ([11 x i8], [11 x i8]* @attr.attr_buf, i64 0, i64 0)
}