#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 scalar_t__ mode;
typedef int __mode_t;

/* Variables and functions */
#define S_IFBLK 134
#define S_IFCHR 133
#define S_IFDIR 132
#define S_IFIFO 131
#define S_IFLNK 130
int /*<<< orphan*/ S_IFMT;
#define S_IFREG 129
#define S_IFSOCK 128
int S_IRGRP;
int S_IROTH;
int S_IRUSR;
int S_IWGRP;
int S_IWOTH;
int S_IWUSR;
int S_IXGRP;
int S_IXOTH;
int S_IXUSR;
const char *sperm(__mode_t mode) {
  static char local_buf[16] = {0};
  int i = 0;
  switch (((mode)&S_IFMT)) {
  case S_IFREG:
    local_buf[i++] = '-';
    break;
  case S_IFDIR:
    local_buf[i++] = 'd';
    break;
  case S_IFLNK:
    local_buf[i++] = 'l';
    break;
  case S_IFSOCK:
    local_buf[i++] = 's';
    break;
  case S_IFIFO:
    local_buf[i++] = 'p';
    break;
  case S_IFCHR:
    local_buf[i++] = 'c';
    break;
  case S_IFBLK:
    local_buf[i++] = 'b';
    break;
  default:
    local_buf[i++] = '?';
    break;
  }
  local_buf[i] = ((mode & S_IRUSR) == S_IRUSR) ? 'r' : '-';
  i++;
  local_buf[i] = ((mode & S_IWUSR) == S_IWUSR) ? 'w' : '-';
  i++;
  local_buf[i] = ((mode & S_IXUSR) == S_IXUSR) ? 'x' : '-';
  i++;
  local_buf[i] = ((mode & S_IRGRP) == S_IRGRP) ? 'r' : '-';
  i++;
  local_buf[i] = ((mode & S_IWGRP) == S_IWGRP) ? 'w' : '-';
  i++;
  local_buf[i] = ((mode & S_IXGRP) == S_IXGRP) ? 'x' : '-';
  i++;
  local_buf[i] = ((mode & S_IROTH) == S_IROTH) ? 'r' : '-';
  i++;
  local_buf[i] = ((mode & S_IWOTH) == S_IWOTH) ? 'w' : '-';
  i++;
  local_buf[i] = ((mode & S_IXOTH) == S_IXOTH) ? 'x' : '-';
  return local_buf;
}


x86 assembly (clang, -O0):
<sperm>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
movl   $0x0,-0x8(%rbp)
mov    -0x4(%rbp),%eax
mov    0x2ea0(%rip),%rcx
mov    (%rcx),%ecx
and    %ecx,%eax
add    $0xffffff80,%eax
mov    %eax,%ecx
mov    %rcx,-0x10(%rbp)
sub    $0x6,%eax
ja     1214 <sperm+0x114>
mov    -0x10(%rbp),%rax
lea    0xec7(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x8(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x8(%rbp)
movslq %eax,%rcx
lea    0x2ed9(%rip),%rax
movb   $0x2d,(%rax,%rcx,1)
jmp    122d <sperm+0x12d>
mov    -0x8(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x8(%rbp)
movslq %eax,%rcx
lea    0x2ebb(%rip),%rax
movb   $0x64,(%rax,%rcx,1)
jmp    122d <sperm+0x12d>
mov    -0x8(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x8(%rbp)
movslq %eax,%rcx
lea    0x2e9d(%rip),%rax
movb   $0x6c,(%rax,%rcx,1)
jmp    122d <sperm+0x12d>
mov    -0x8(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x8(%rbp)
movslq %eax,%rcx
lea    0x2e7f(%rip),%rax
movb   $0x73,(%rax,%rcx,1)
jmp    122d <sperm+0x12d>
mov    -0x8(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x8(%rbp)
movslq %eax,%rcx
lea    0x2e61(%rip),%rax
movb   $0x70,(%rax,%rcx,1)
jmp    122d <sperm+0x12d>
mov    -0x8(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x8(%rbp)
movslq %eax,%rcx
lea    0x2e43(%rip),%rax
movb   $0x63,(%rax,%rcx,1)
jmp    122d <sperm+0x12d>
mov    -0x8(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x8(%rbp)
movslq %eax,%rcx
lea    0x2e25(%rip),%rax
movb   $0x62,(%rax,%rcx,1)
jmp    122d <sperm+0x12d>
mov    -0x8(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x8(%rbp)
movslq %eax,%rcx
lea    0x2e07(%rip),%rax
movb   $0x3f,(%rax,%rcx,1)
mov    -0x4(%rbp),%edx
mov    0x2d69(%rip),%rax
and    (%rax),%edx
mov    0x2d60(%rip),%rax
mov    (%rax),%esi
mov    $0x2d,%eax
mov    $0x72,%ecx
cmp    %esi,%edx
cmove  %ecx,%eax
mov    %al,%dl
movslq -0x8(%rbp),%rcx
lea    0x2dd2(%rip),%rax
mov    %dl,(%rax,%rcx,1)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
mov    -0x4(%rbp),%edx
mov    0x2d5c(%rip),%rax
and    (%rax),%edx
mov    0x2d53(%rip),%rax
mov    (%rax),%esi
mov    $0x2d,%eax
mov    $0x77,%ecx
cmp    %esi,%edx
cmove  %ecx,%eax
mov    %al,%dl
movslq -0x8(%rbp),%rcx
lea    0x2d95(%rip),%rax
mov    %dl,(%rax,%rcx,1)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
mov    -0x4(%rbp),%edx
mov    0x2d2f(%rip),%rax
and    (%rax),%edx
mov    0x2d26(%rip),%rax
mov    (%rax),%esi
mov    $0x2d,%eax
mov    $0x78,%ecx
cmp    %esi,%edx
cmove  %ecx,%eax
mov    %al,%dl
movslq -0x8(%rbp),%rcx
lea    0x2d58(%rip),%rax
mov    %dl,(%rax,%rcx,1)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
mov    -0x4(%rbp),%edx
mov    0x2cc2(%rip),%rax
and    (%rax),%edx
mov    0x2cb9(%rip),%rax
mov    (%rax),%esi
mov    $0x2d,%eax
mov    $0x72,%ecx
cmp    %esi,%edx
cmove  %ecx,%eax
mov    %al,%dl
movslq -0x8(%rbp),%rcx
lea    0x2d1b(%rip),%rax
mov    %dl,(%rax,%rcx,1)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
mov    -0x4(%rbp),%edx
mov    0x2cad(%rip),%rax
and    (%rax),%edx
mov    0x2ca4(%rip),%rax
mov    (%rax),%esi
mov    $0x2d,%eax
mov    $0x77,%ecx
cmp    %esi,%edx
cmove  %ecx,%eax
mov    %al,%dl
movslq -0x8(%rbp),%rcx
lea    0x2cde(%rip),%rax
mov    %dl,(%rax,%rcx,1)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
mov    -0x4(%rbp),%edx
mov    0x2c60(%rip),%rax
and    (%rax),%edx
mov    0x2c57(%rip),%rax
mov    (%rax),%esi
mov    $0x2d,%eax
mov    $0x78,%ecx
cmp    %esi,%edx
cmove  %ecx,%eax
mov    %al,%dl
movslq -0x8(%rbp),%rcx
lea    0x2ca1(%rip),%rax
mov    %dl,(%rax,%rcx,1)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
mov    -0x4(%rbp),%edx
mov    0x2c03(%rip),%rax
and    (%rax),%edx
mov    0x2bfa(%rip),%rax
mov    (%rax),%esi
mov    $0x2d,%eax
mov    $0x72,%ecx
cmp    %esi,%edx
cmove  %ecx,%eax
mov    %al,%dl
movslq -0x8(%rbp),%rcx
lea    0x2c64(%rip),%rax
mov    %dl,(%rax,%rcx,1)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
mov    -0x4(%rbp),%edx
mov    0x2bae(%rip),%rax
and    (%rax),%edx
mov    0x2ba5(%rip),%rax
mov    (%rax),%esi
mov    $0x2d,%eax
mov    $0x77,%ecx
cmp    %esi,%edx
cmove  %ecx,%eax
mov    %al,%dl
movslq -0x8(%rbp),%rcx
lea    0x2c27(%rip),%rax
mov    %dl,(%rax,%rcx,1)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
mov    -0x4(%rbp),%edx
mov    0x2bc9(%rip),%rax
and    (%rax),%edx
mov    0x2bc0(%rip),%rax
mov    (%rax),%esi
mov    $0x2d,%eax
mov    $0x78,%ecx
cmp    %esi,%edx
cmove  %ecx,%eax
mov    %al,%dl
movslq -0x8(%rbp),%rcx
lea    0x2bea(%rip),%rax
mov    %dl,(%rax,%rcx,1)
lea    0x2be0(%rip),%rax
pop    %rbp
ret

x86 assembly (clang, -O2):
<sperm>:
mov    0x2eb1(%rip),%rax
mov    (%rax),%eax
and    %edi,%eax
lea    -0x400(,%rax,8),%ecx
add    $0xffffff80,%eax
movabs $0x626364706c2d73,%rdx
shr    %cl,%rdx
cmp    $0x7,%eax
mov    $0x3f,%eax
cmovb  %edx,%eax
mov    %al,0x2efd(%rip)
lea    0x2ef6(%rip),%rax
mov    0x2e5f(%rip),%rcx
not    %edi
mov    (%rcx),%ecx
and    %edi,%ecx
mov    $0x72,%r9d
mov    $0x2d,%edx
cmove  %r9d,%edx
mov    %dl,0x2ed5(%rip)
mov    0x2e6d(%rip),%rdx
mov    (%rdx),%edx
and    %edi,%edx
mov    $0x77,%edx
mov    $0x2d,%esi
cmove  %edx,%esi
mov    %sil,0x2eb7(%rip)
mov    0x2e5e(%rip),%rsi
mov    (%rsi),%esi
and    %edi,%esi
mov    $0x78,%r8d
mov    $0x2d,%esi
cmove  %r8d,%esi
mov    %sil,0x2e97(%rip)
mov    0x2e0d(%rip),%rsi
mov    (%rsi),%esi
and    %edi,%esi
mov    $0x2d,%esi
cmove  %r9d,%esi
mov    0x2e21(%rip),%rcx
mov    (%rcx),%ecx
and    %edi,%ecx
mov    $0x2d,%ecx
cmove  %edx,%ecx
mov    %sil,0x2e6a(%rip)
mov    %cl,0x2e65(%rip)
mov    0x2df1(%rip),%rcx
mov    (%rcx),%ecx
and    %edi,%ecx
mov    $0x2d,%ecx
cmove  %r8d,%ecx
mov    $0x2d,%esi
mov    %cl,0x2e47(%rip)
mov    0x2db2(%rip),%rcx
mov    (%rcx),%ecx
and    %edi,%ecx
cmovne %esi,%r9d
mov    0x2d8b(%rip),%rcx
mov    (%rcx),%ecx
and    %edi,%ecx
cmovne %esi,%edx
mov    %r9b,0x2e24(%rip)
mov    0x2dce(%rip),%rcx
and    (%rcx),%edi
mov    %dl,0x2e16(%rip)
cmove  %r8d,%esi
mov    %sil,0x2e0c(%rip)
ret

LLVM IR (-O0):
@sperm.local_buf = internal global [16 x i8] zeroinitializer
@S_IFMT = global i32 0
@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* @sperm(i32 %0) {
%2 = alloca i32
%3 = alloca i32
store i32 %0, i32* %2
store i32 0, i32* %3
%4 = load i32, i32* %2
%5 = load i32, i32* @S_IFMT
%6 = and i32 %4, %5
switch i32 %6, label %42 [
i32 129, label %7
i32 132, label %12
i32 130, label %17
i32 128, label %22
i32 131, label %27
i32 133, label %32
i32 134, label %37
]
7: ; preds = %1
%8 = load i32, i32* %3
%9 = add nsw i32 %8, 1
store i32 %9, i32* %3
%10 = sext i32 %8 to i64
%11 = getelementptr inbounds [16 x i8], [16 x i8]* @sperm.local_buf, i64 0, i64 %10
store i8 45, i8* %11
br label %47
12: ; preds = %1
%13 = load i32, i32* %3
%14 = add nsw i32 %13, 1
store i32 %14, i32* %3
%15 = sext i32 %13 to i64
%16 = getelementptr inbounds [16 x i8], [16 x i8]* @sperm.local_buf, i64 0, i64 %15
store i8 100, i8* %16
br label %47
17: ; preds = %1
%18 = load i32, i32* %3
%19 = add nsw i32 %18, 1
store i32 %19, i32* %3
%20 = sext i32 %18 to i64
%21 = getelementptr inbounds [16 x i8], [16 x i8]* @sperm.local_buf, i64 0, i64 %20
store i8 108, i8* %21
br label %47
22: ; preds = %1
%23 = load i32, i32* %3
%24 = add nsw i32 %23, 1
store i32 %24, i32* %3
%25 = sext i32 %23 to i64
%26 = getelementptr inbounds [16 x i8], [16 x i8]* @sperm.local_buf, i64 0, i64 %25
store i8 115, i8* %26
br label %47
27: ; preds = %1
%28 = load i32, i32* %3
%29 = add nsw i32 %28, 1
store i32 %29, i32* %3
%30 = sext i32 %28 to i64
%31 = getelementptr inbounds [16 x i8], [16 x i8]* @sperm.local_buf, i64 0, i64 %30
store i8 112, i8* %31
br label %47
32: ; preds = %1
%33 = load i32, i32* %3
%34 = add nsw i32 %33, 1
store i32 %34, i32* %3
%35 = sext i32 %33 to i64
%36 = getelementptr inbounds [16 x i8], [16 x i8]* @sperm.local_buf, i64 0, i64 %35
store i8 99, i8* %36
br label %47
37: ; preds = %1
%38 = load i32, i32* %3
%39 = add nsw i32 %38, 1
store i32 %39, i32* %3
%40 = sext i32 %38 to i64
%41 = getelementptr inbounds [16 x i8], [16 x i8]* @sperm.local_buf, i64 0, i64 %40
store i8 98, i8* %41
br label %47
42: ; preds = %1
%43 = load i32, i32* %3
%44 = add nsw i32 %43, 1
store i32 %44, i32* %3
%45 = sext i32 %43 to i64
%46 = getelementptr inbounds [16 x i8], [16 x i8]* @sperm.local_buf, i64 0, i64 %45
store i8 63, i8* %46
br label %47
47: ; preds = %42, %37, %32, %27, %22, %17, %12, %7
%48 = load i32, i32* %2
%49 = load i32, i32* @S_IRUSR
%50 = and i32 %48, %49
%51 = load i32, i32* @S_IRUSR
%52 = icmp eq i32 %50, %51
%53 = zext i1 %52 to i64
%54 = select i1 %52, i32 114, i32 45
%55 = trunc i32 %54 to i8
%56 = load i32, i32* %3
%57 = sext i32 %56 to i64
%58 = getelementptr inbounds [16 x i8], [16 x i8]* @sperm.local_buf, i64 0, i64 %57
store i8 %55, i8* %58
%59 = load i32, i32* %3
%60 = add nsw i32 %59, 1
store i32 %60, i32* %3
%61 = load i32, i32* %2
%62 = load i32, i32* @S_IWUSR
%63 = and i32 %61, %62
%64 = load i32, i32* @S_IWUSR
%65 = icmp eq i32 %63, %64
%66 = zext i1 %65 to i64
%67 = select i1 %65, i32 119, i32 45
%68 = trunc i32 %67 to i8
%69 = load i32, i32* %3
%70 = sext i32 %69 to i64
%71 = getelementptr inbounds [16 x i8], [16 x i8]* @sperm.local_buf, i64 0, i64 %70
store i8 %68, i8* %71
%72 = load i32, i32* %3
%73 = add nsw i32 %72, 1
store i32 %73, i32* %3
%74 = load i32, i32* %2
%75 = load i32, i32* @S_IXUSR
%76 = and i32 %74, %75
%77 = load i32, i32* @S_IXUSR
%78 = icmp eq i32 %76, %77
%79 = zext i1 %78 to i64
%80 = select i1 %78, i32 120, i32 45
%81 = trunc i32 %80 to i8
%82 = load i32, i32* %3
%83 = sext i32 %82 to i64
%84 = getelementptr inbounds [16 x i8], [16 x i8]* @sperm.local_buf, i64 0, i64 %83
store i8 %81, i8* %84
%85 = load i32, i32* %3
%86 = add nsw i32 %85, 1
store i32 %86, i32* %3
%87 = load i32, i32* %2
%88 = load i32, i32* @S_IRGRP
%89 = and i32 %87, %88
%90 = load i32, i32* @S_IRGRP
%91 = icmp eq i32 %89, %90
%92 = zext i1 %91 to i64
%93 = select i1 %91, i32 114, i32 45
%94 = trunc i32 %93 to i8
%95 = load i32, i32* %3
%96 = sext i32 %95 to i64
%97 = getelementptr inbounds [16 x i8], [16 x i8]* @sperm.local_buf, i64 0, i64 %96
store i8 %94, i8* %97
%98 = load i32, i32* %3
%99 = add nsw i32 %98, 1
store i32 %99, i32* %3
%100 = load i32, i32* %2
%101 = load i32, i32* @S_IWGRP
%102 = and i32 %100, %101
%103 = load i32, i32* @S_IWGRP
%104 = icmp eq i32 %102, %103
%105 = zext i1 %104 to i64
%106 = select i1 %104, i32 119, i32 45
%107 = trunc i32 %106 to i8
%108 = load i32, i32* %3
%109 = sext i32 %108 to i64
%110 = getelementptr inbounds [16 x i8], [16 x i8]* @sperm.local_buf, i64 0, i64 %109
store i8 %107, i8* %110
%111 = load i32, i32* %3
%112 = add nsw i32 %111, 1
store i32 %112, i32* %3
%113 = load i32, i32* %2
%114 = load i32, i32* @S_IXGRP
%115 = and i32 %113, %114
%116 = load i32, i32* @S_IXGRP
%117 = icmp eq i32 %115, %116
%118 = zext i1 %117 to i64
%119 = select i1 %117, i32 120, i32 45
%120 = trunc i32 %119 to i8
%121 = load i32, i32* %3
%122 = sext i32 %121 to i64
%123 = getelementptr inbounds [16 x i8], [16 x i8]* @sperm.local_buf, i64 0, i64 %122
store i8 %120, i8* %123
%124 = load i32, i32* %3
%125 = add nsw i32 %124, 1
store i32 %125, i32* %3
%126 = load i32, i32* %2
%127 = load i32, i32* @S_IROTH
%128 = and i32 %126, %127
%129 = load i32, i32* @S_IROTH
%130 = icmp eq i32 %128, %129
%131 = zext i1 %130 to i64
%132 = select i1 %130, i32 114, i32 45
%133 = trunc i32 %132 to i8
%134 = load i32, i32* %3
%135 = sext i32 %134 to i64
%136 = getelementptr inbounds [16 x i8], [16 x i8]* @sperm.local_buf, i64 0, i64 %135
store i8 %133, i8* %136
%137 = load i32, i32* %3
%138 = add nsw i32 %137, 1
store i32 %138, i32* %3
%139 = load i32, i32* %2
%140 = load i32, i32* @S_IWOTH
%141 = and i32 %139, %140
%142 = load i32, i32* @S_IWOTH
%143 = icmp eq i32 %141, %142
%144 = zext i1 %143 to i64
%145 = select i1 %143, i32 119, i32 45
%146 = trunc i32 %145 to i8
%147 = load i32, i32* %3
%148 = sext i32 %147 to i64
%149 = getelementptr inbounds [16 x i8], [16 x i8]* @sperm.local_buf, i64 0, i64 %148
store i8 %146, i8* %149
%150 = load i32, i32* %3
%151 = add nsw i32 %150, 1
store i32 %151, i32* %3
%152 = load i32, i32* %2
%153 = load i32, i32* @S_IXOTH
%154 = and i32 %152, %153
%155 = load i32, i32* @S_IXOTH
%156 = icmp eq i32 %154, %155
%157 = zext i1 %156 to i64
%158 = select i1 %156, i32 120, i32 45
%159 = trunc i32 %158 to i8
%160 = load i32, i32* %3
%161 = sext i32 %160 to i64
%162 = getelementptr inbounds [16 x i8], [16 x i8]* @sperm.local_buf, i64 0, i64 %161
store i8 %159, i8* %162
ret i8* getelementptr inbounds ([16 x i8], [16 x i8]* @sperm.local_buf, i64 0, i64 0)
}

LLVM IR (-O2):
@sperm.local_buf = internal global [16 x i8] zeroinitializer
@S_IFMT = global i32 0
@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* @sperm(i32 %0) {
%2 = load i32, i32* @S_IFMT
%3 = and i32 %2, %0
%4 = add i32 %3, -128
%5 = icmp ult i32 %4, 7
%6 = zext i32 %4 to i56
%7 = shl nuw nsw i56 %6, 3
%8 = lshr i56 27693830751661427, %7
%9 = trunc i56 %8 to i8
%10 = select i1 %5, i8 %9, i8 63
store i8 %10, i8* getelementptr inbounds ([16 x i8], [16 x i8]* @sperm.local_buf, i64 0, i64 0)
%11 = load i32, i32* @S_IRUSR
%12 = and i32 %11, %0
%13 = icmp eq i32 %12, %11
%14 = select i1 %13, i8 114, i8 45
store i8 %14, i8* getelementptr inbounds ([16 x i8], [16 x i8]* @sperm.local_buf, i64 0, i64 1)
%15 = load i32, i32* @S_IWUSR
%16 = and i32 %15, %0
%17 = icmp eq i32 %16, %15
%18 = select i1 %17, i8 119, i8 45
store i8 %18, i8* getelementptr inbounds ([16 x i8], [16 x i8]* @sperm.local_buf, i64 0, i64 2)
%19 = load i32, i32* @S_IXUSR
%20 = and i32 %19, %0
%21 = icmp eq i32 %20, %19
%22 = select i1 %21, i8 120, i8 45
store i8 %22, i8* getelementptr inbounds ([16 x i8], [16 x i8]* @sperm.local_buf, i64 0, i64 3)
%23 = load i32, i32* @S_IRGRP
%24 = and i32 %23, %0
%25 = icmp eq i32 %24, %23
%26 = select i1 %25, i8 114, i8 45
store i8 %26, i8* getelementptr inbounds ([16 x i8], [16 x i8]* @sperm.local_buf, i64 0, i64 4)
%27 = load i32, i32* @S_IWGRP
%28 = and i32 %27, %0
%29 = icmp eq i32 %28, %27
%30 = select i1 %29, i8 119, i8 45
store i8 %30, i8* getelementptr inbounds ([16 x i8], [16 x i8]* @sperm.local_buf, i64 0, i64 5)
%31 = load i32, i32* @S_IXGRP
%32 = and i32 %31, %0
%33 = icmp eq i32 %32, %31
%34 = select i1 %33, i8 120, i8 45
store i8 %34, i8* getelementptr inbounds ([16 x i8], [16 x i8]* @sperm.local_buf, i64 0, i64 6)
%35 = load i32, i32* @S_IROTH
%36 = and i32 %35, %0
%37 = icmp eq i32 %36, %35
%38 = select i1 %37, i8 114, i8 45
store i8 %38, i8* getelementptr inbounds ([16 x i8], [16 x i8]* @sperm.local_buf, i64 0, i64 7)
%39 = load i32, i32* @S_IWOTH
%40 = and i32 %39, %0
%41 = icmp eq i32 %40, %39
%42 = select i1 %41, i8 119, i8 45
store i8 %42, i8* getelementptr inbounds ([16 x i8], [16 x i8]* @sperm.local_buf, i64 0, i64 8)
%43 = load i32, i32* @S_IXOTH
%44 = and i32 %43, %0
%45 = icmp eq i32 %44, %43
%46 = select i1 %45, i8 120, i8 45
store i8 %46, i8* getelementptr inbounds ([16 x i8], [16 x i8]* @sperm.local_buf, i64 0, i64 9)
ret i8* getelementptr inbounds ([16 x i8], [16 x i8]* @sperm.local_buf, i64 0, i64 0)
}