#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 */

/* Variables and functions */
int /*<<< orphan*/ AT_FDCWD;
int /*<<< orphan*/ O_CLOEXEC;
int /*<<< orphan*/ O_RDONLY;
int /*<<< orphan*/ O_WRONLY;
int STDERR_FILENO;
int STDIN_FILENO;
int STDOUT_FILENO;
int /*<<< orphan*/ _exit(int /*<<< orphan*/);
scalar_t__ close(int);
int openat(int /*<<< orphan*/, char *, int /*<<< orphan*/);
scalar_t__ pipe2(int *, int /*<<< orphan*/);
int read(int, char *, int);
scalar_t__ strlen(char const *);
scalar_t__ write(int, char const *, scalar_t__);
int main(void) {
  const char *hello = "hello, ";
  const char *world = "world\n";
  if (write(STDOUT_FILENO, hello, strlen(hello)) != strlen(hello))
    return 1;
  char buf[128];
  for (int i = 0; i < sizeof buf; i++)
    buf[i] = i;
  int zero = openat(AT_FDCWD, "/dev/zero", O_RDONLY);
  if (zero < 0)
    return 1;
  if (read(zero, buf, sizeof buf) != sizeof buf)
    return 1;
  if (close(zero) != 0)
    return 1;
  for (int i = 0; i < sizeof buf; i++)
    if (buf[i] != 0)
      return 1;
  int fds[2];
  if (pipe2(fds, O_CLOEXEC) < 0)
    return 1;
  if (close(fds[0]) != 0)
    return 1;
  if (close(fds[1]) != 0)
    return 1;
  int out = openat(AT_FDCWD, "/dev/stdout", O_WRONLY);
  if (out < 0)
    return 1;
  if (write(out, world, strlen(world)) != strlen(world))
    return 1;
  if (close(out) != 0)
    return 1;
  if (close(STDIN_FILENO) != 0)
    return 1;
  if (close(STDOUT_FILENO) != 0)
    return 1;
  if (close(STDERR_FILENO) != 0)
    return 1;
  if (close(STDERR_FILENO) == 0)
    return 1;
  _exit(0);
  return 1;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0xf0,%rsp
movl   $0x0,-0x4(%rbp)
lea    0xe77(%rip),%rax
mov    %rax,-0x10(%rbp)
lea    0xe74(%rip),%rax
mov    %rax,-0x18(%rbp)
mov    0x2e51(%rip),%rax
mov    (%rax),%eax
mov    %eax,-0xcc(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0xc8(%rbp)
mov    -0x10(%rbp),%rdi
call   1050 <strlen@plt>
mov    -0xcc(%rbp),%edi
mov    -0xc8(%rbp),%rsi
mov    %rax,%rdx
call   1040 <write@plt>
mov    %rax,-0xc0(%rbp)
mov    -0x10(%rbp),%rdi
call   1050 <strlen@plt>
mov    %rax,%rcx
mov    -0xc0(%rbp),%rax
cmp    %rcx,%rax
je     11ff <main+0x8f>
movl   $0x1,-0x4(%rbp)
jmp    14f5 <main+0x385>
movl   $0x0,-0xa4(%rbp)
movslq -0xa4(%rbp),%rax
cmp    $0x80,%rax
jae    1246 <main+0xd6>
mov    -0xa4(%rbp),%eax
mov    %al,%cl
movslq -0xa4(%rbp),%rax
mov    %cl,-0xa0(%rbp,%rax,1)
mov    -0xa4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xa4(%rbp)
jmp    1209 <main+0x99>
mov    0x2d5b(%rip),%rax
mov    (%rax),%edi
mov    0x2d8a(%rip),%rax
mov    (%rax),%edx
lea    0xdb0(%rip),%rsi
call   1060 <openat@plt>
mov    %eax,-0xa8(%rbp)
cmpl   $0x0,-0xa8(%rbp)
jge    1283 <main+0x113>
movl   $0x1,-0x4(%rbp)
jmp    14f5 <main+0x385>
mov    -0xa8(%rbp),%edi
lea    -0xa0(%rbp),%rsi
mov    $0x80,%edx
call   1080 <read@plt>
cltq
cmp    $0x80,%rax
je     12b4 <main+0x144>
movl   $0x1,-0x4(%rbp)
jmp    14f5 <main+0x385>
mov    -0xa8(%rbp),%edi
call   1070 <close@plt>
cmp    $0x0,%rax
je     12d5 <main+0x165>
movl   $0x1,-0x4(%rbp)
jmp    14f5 <main+0x385>
movl   $0x0,-0xac(%rbp)
movslq -0xac(%rbp),%rax
cmp    $0x80,%rax
jae    132f <main+0x1bf>
movslq -0xac(%rbp),%rax
movsbl -0xa0(%rbp,%rax,1),%eax
cmp    $0x0,%eax
je     1316 <main+0x1a6>
movl   $0x1,-0x4(%rbp)
jmp    14f5 <main+0x385>
jmp    131b <main+0x1ab>
mov    -0xac(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xac(%rbp)
jmp    12df <main+0x16f>
lea    -0xb4(%rbp),%rdi
mov    0x2c73(%rip),%rax
mov    (%rax),%esi
call   1090 <pipe2@plt>
cmp    $0x0,%rax
jge    135a <main+0x1ea>
movl   $0x1,-0x4(%rbp)
jmp    14f5 <main+0x385>
mov    -0xb4(%rbp),%edi
call   1070 <close@plt>
cmp    $0x0,%rax
je     137b <main+0x20b>
movl   $0x1,-0x4(%rbp)
jmp    14f5 <main+0x385>
mov    -0xb0(%rbp),%edi
call   1070 <close@plt>
cmp    $0x0,%rax
je     139c <main+0x22c>
movl   $0x1,-0x4(%rbp)
jmp    14f5 <main+0x385>
mov    0x2c05(%rip),%rax
mov    (%rax),%edi
mov    0x2c0c(%rip),%rax
mov    (%rax),%edx
lea    0xc64(%rip),%rsi
call   1060 <openat@plt>
mov    %eax,-0xb8(%rbp)
cmpl   $0x0,-0xb8(%rbp)
jge    13d9 <main+0x269>
movl   $0x1,-0x4(%rbp)
jmp    14f5 <main+0x385>
mov    -0xb8(%rbp),%eax
mov    %eax,-0xe4(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,-0xe0(%rbp)
mov    -0x18(%rbp),%rdi
call   1050 <strlen@plt>
mov    -0xe4(%rbp),%edi
mov    -0xe0(%rbp),%rsi
mov    %rax,%rdx
call   1040 <write@plt>
mov    %rax,-0xd8(%rbp)
mov    -0x18(%rbp),%rdi
call   1050 <strlen@plt>
mov    %rax,%rcx
mov    -0xd8(%rbp),%rax
cmp    %rcx,%rax
je     143d <main+0x2cd>
movl   $0x1,-0x4(%rbp)
jmp    14f5 <main+0x385>
mov    -0xb8(%rbp),%edi
call   1070 <close@plt>
cmp    $0x0,%rax
je     145e <main+0x2ee>
movl   $0x1,-0x4(%rbp)
jmp    14f5 <main+0x385>
mov    0x2b63(%rip),%rax
mov    (%rax),%edi
call   1070 <close@plt>
cmp    $0x0,%rax
je     1482 <main+0x312>
movl   $0x1,-0x4(%rbp)
jmp    14f5 <main+0x385>
mov    0x2b67(%rip),%rax
mov    (%rax),%edi
call   1070 <close@plt>
cmp    $0x0,%rax
je     14a6 <main+0x336>
movl   $0x1,-0x4(%rbp)
jmp    14f5 <main+0x385>
mov    0x2b23(%rip),%rax
mov    (%rax),%edi
call   1070 <close@plt>
cmp    $0x0,%rax
je     14ca <main+0x35a>
movl   $0x1,-0x4(%rbp)
jmp    14f5 <main+0x385>
mov    0x2aff(%rip),%rax
mov    (%rax),%edi
call   1070 <close@plt>
cmp    $0x0,%rax
jne    14ee <main+0x37e>
movl   $0x1,-0x4(%rbp)
jmp    14f5 <main+0x385>
xor    %edi,%edi
call   1030 <_exit@plt>
mov    -0x4(%rbp),%eax
add    $0xf0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %r15
push   %r14
push   %rbx
sub    $0x90,%rsp
mov    0x2e7d(%rip),%r14
mov    (%r14),%edi
lea    0xf03(%rip),%rsi
mov    $0x7,%edx
call   1040 <write@plt>
cmp    $0x7,%rax
jne    123d <main+0xdd>
movaps 0xe68(%rip),%xmm0
movaps %xmm0,0x10(%rsp)
movaps 0xe6c(%rip),%xmm0
movaps %xmm0,0x20(%rsp)
movaps 0xe70(%rip),%xmm0
movaps %xmm0,0x30(%rsp)
movaps 0xe74(%rip),%xmm0
movaps %xmm0,0x40(%rsp)
movaps 0xe78(%rip),%xmm0
movaps %xmm0,0x50(%rsp)
movaps 0xe7c(%rip),%xmm0
movaps %xmm0,0x60(%rsp)
movaps 0xe80(%rip),%xmm0
movaps %xmm0,0x70(%rsp)
movaps 0xe84(%rip),%xmm0
movaps %xmm0,0x80(%rsp)
mov    0x2dad(%rip),%r15
mov    (%r15),%edi
mov    0x2ddb(%rip),%rax
mov    (%rax),%edx
lea    0xe81(%rip),%rsi
call   1050 <openat@plt>
test   %eax,%eax
js     123d <main+0xdd>
mov    %eax,%ebx
lea    0x10(%rsp),%rsi
mov    %eax,%edi
mov    $0x80,%edx
call   1070 <read@plt>
cmp    $0x80,%eax
jne    123d <main+0xdd>
mov    %ebx,%edi
call   1060 <close@plt>
test   %rax,%rax
je     124f <main+0xef>
mov    $0x1,%eax
add    $0x90,%rsp
pop    %rbx
pop    %r14
pop    %r15
ret
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
cmpb   $0x0,0x10(%rsp,%rax,1)
jne    123d <main+0xdd>
cmpb   $0x0,0x11(%rsp,%rax,1)
jne    123d <main+0xdd>
cmpb   $0x0,0x12(%rsp,%rax,1)
jne    123d <main+0xdd>
cmpb   $0x0,0x13(%rsp,%rax,1)
jne    123d <main+0xdd>
add    $0x4,%rax
cmp    $0x80,%rax
jne    1260 <main+0x100>
mov    0x2d21(%rip),%rax
mov    (%rax),%esi
lea    0x8(%rsp),%rdi
call   1080 <pipe2@plt>
test   %rax,%rax
js     123d <main+0xdd>
mov    0x8(%rsp),%edi
call   1060 <close@plt>
test   %rax,%rax
jne    123d <main+0xdd>
mov    0xc(%rsp),%edi
call   1060 <close@plt>
test   %rax,%rax
jne    123d <main+0xdd>
mov    (%r15),%edi
mov    0x2cf2(%rip),%rax
mov    (%rax),%edx
lea    0xdca(%rip),%rsi
call   1050 <openat@plt>
test   %eax,%eax
js     123d <main+0xdd>
mov    %eax,%ebx
lea    0xda3(%rip),%rsi
mov    $0x6,%edx
mov    %eax,%edi
call   1040 <write@plt>
cmp    $0x6,%rax
jne    123d <main+0xdd>
mov    %ebx,%edi
call   1060 <close@plt>
test   %rax,%rax
jne    123d <main+0xdd>
mov    0x2cb6(%rip),%rax
mov    (%rax),%edi
call   1060 <close@plt>
test   %rax,%rax
jne    123d <main+0xdd>
mov    (%r14),%edi
call   1060 <close@plt>
test   %rax,%rax
jne    123d <main+0xdd>
mov    0x2c96(%rip),%rbx
mov    (%rbx),%edi
call   1060 <close@plt>
test   %rax,%rax
jne    123d <main+0xdd>
mov    (%rbx),%edi
call   1060 <close@plt>
test   %rax,%rax
je     123d <main+0xdd>
xor    %edi,%edi
call   1030 <_exit@plt>

LLVM IR (-O0):
@.str = [8 x i8] c"hello, \00"
@.str.1 = [7 x i8] c"world\0A\00"
@STDOUT_FILENO = global i32 0
@AT_FDCWD = global i32 0
@.str.2 = [10 x i8] c"/dev/zero\00"
@O_RDONLY = global i32 0
@O_CLOEXEC = global i32 0
@.str.3 = [12 x i8] c"/dev/stdout\00"
@O_WRONLY = global i32 0
@STDIN_FILENO = global i32 0
@STDERR_FILENO = global i32 0
define i32 @main() {
%1 = alloca i32
%2 = alloca i8*
%3 = alloca i8*
%4 = alloca [128 x i8]
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca [2 x i32]
%9 = alloca i32
store i32 0, i32* %1
store i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i64 0, i64 0), i8** %2
store i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.1, i64 0, i64 0), i8** %3
%10 = load i32, i32* @STDOUT_FILENO
%11 = load i8*, i8** %2
%12 = load i8*, i8** %2
%13 = call i64 @strlen(i8* %12)
%14 = call i64 @write(i32 %10, i8* %11, i64 %13)
%15 = load i8*, i8** %2
%16 = call i64 @strlen(i8* %15)
%17 = icmp ne i64 %14, %16
br i1 %17, label %18, label %19
18: ; preds = %0
store i32 1, i32* %1
br label %131
19: ; preds = %0
store i32 0, i32* %5
br label %20
20: ; preds = %30, %19
%21 = load i32, i32* %5
%22 = sext i32 %21 to i64
%23 = icmp ult i64 %22, 128
br i1 %23, label %24, label %33
24: ; preds = %20
%25 = load i32, i32* %5
%26 = trunc i32 %25 to i8
%27 = load i32, i32* %5
%28 = sext i32 %27 to i64
%29 = getelementptr inbounds [128 x i8], [128 x i8]* %4, i64 0, i64 %28
store i8 %26, i8* %29
br label %30
30: ; preds = %24
%31 = load i32, i32* %5
%32 = add nsw i32 %31, 1
store i32 %32, i32* %5
br label %20
33: ; preds = %20
%34 = load i32, i32* @AT_FDCWD
%35 = load i32, i32* @O_RDONLY
%36 = call i32 @openat(i32 %34, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.2, i64 0, i64 0), i32 %35)
store i32 %36, i32* %6
%37 = load i32, i32* %6
%38 = icmp slt i32 %37, 0
br i1 %38, label %39, label %40
39: ; preds = %33
store i32 1, i32* %1
br label %131
40: ; preds = %33
%41 = load i32, i32* %6
%42 = getelementptr inbounds [128 x i8], [128 x i8]* %4, i64 0, i64 0
%43 = call i32 @read(i32 %41, i8* %42, i32 128)
%44 = sext i32 %43 to i64
%45 = icmp ne i64 %44, 128
br i1 %45, label %46, label %47
46: ; preds = %40
store i32 1, i32* %1
br label %131
47: ; preds = %40
%48 = load i32, i32* %6
%49 = call i64 @close(i32 %48)
%50 = icmp ne i64 %49, 0
br i1 %50, label %51, label %52
51: ; preds = %47
store i32 1, i32* %1
br label %131
52: ; preds = %47
store i32 0, i32* %7
br label %53
53: ; preds = %66, %52
%54 = load i32, i32* %7
%55 = sext i32 %54 to i64
%56 = icmp ult i64 %55, 128
br i1 %56, label %57, label %69
57: ; preds = %53
%58 = load i32, i32* %7
%59 = sext i32 %58 to i64
%60 = getelementptr inbounds [128 x i8], [128 x i8]* %4, i64 0, i64 %59
%61 = load i8, i8* %60
%62 = sext i8 %61 to i32
%63 = icmp ne i32 %62, 0
br i1 %63, label %64, label %65
64: ; preds = %57
store i32 1, i32* %1
br label %131
65: ; preds = %57
br label %66
66: ; preds = %65
%67 = load i32, i32* %7
%68 = add nsw i32 %67, 1
store i32 %68, i32* %7
br label %53
69: ; preds = %53
%70 = getelementptr inbounds [2 x i32], [2 x i32]* %8, i64 0, i64 0
%71 = load i32, i32* @O_CLOEXEC
%72 = call i64 @pipe2(i32* %70, i32 %71)
%73 = icmp slt i64 %72, 0
br i1 %73, label %74, label %75
74: ; preds = %69
store i32 1, i32* %1
br label %131
75: ; preds = %69
%76 = getelementptr inbounds [2 x i32], [2 x i32]* %8, i64 0, i64 0
%77 = load i32, i32* %76
%78 = call i64 @close(i32 %77)
%79 = icmp ne i64 %78, 0
br i1 %79, label %80, label %81
80: ; preds = %75
store i32 1, i32* %1
br label %131
81: ; preds = %75
%82 = getelementptr inbounds [2 x i32], [2 x i32]* %8, i64 0, i64 1
%83 = load i32, i32* %82
%84 = call i64 @close(i32 %83)
%85 = icmp ne i64 %84, 0
br i1 %85, label %86, label %87
86: ; preds = %81
store i32 1, i32* %1
br label %131
87: ; preds = %81
%88 = load i32, i32* @AT_FDCWD
%89 = load i32, i32* @O_WRONLY
%90 = call i32 @openat(i32 %88, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.3, i64 0, i64 0), i32 %89)
store i32 %90, i32* %9
%91 = load i32, i32* %9
%92 = icmp slt i32 %91, 0
br i1 %92, label %93, label %94
93: ; preds = %87
store i32 1, i32* %1
br label %131
94: ; preds = %87
%95 = load i32, i32* %9
%96 = load i8*, i8** %3
%97 = load i8*, i8** %3
%98 = call i64 @strlen(i8* %97)
%99 = call i64 @write(i32 %95, i8* %96, i64 %98)
%100 = load i8*, i8** %3
%101 = call i64 @strlen(i8* %100)
%102 = icmp ne i64 %99, %101
br i1 %102, label %103, label %104
103: ; preds = %94
store i32 1, i32* %1
br label %131
104: ; preds = %94
%105 = load i32, i32* %9
%106 = call i64 @close(i32 %105)
%107 = icmp ne i64 %106, 0
br i1 %107, label %108, label %109
108: ; preds = %104
store i32 1, i32* %1
br label %131
109: ; preds = %104
%110 = load i32, i32* @STDIN_FILENO
%111 = call i64 @close(i32 %110)
%112 = icmp ne i64 %111, 0
br i1 %112, label %113, label %114
113: ; preds = %109
store i32 1, i32* %1
br label %131
114: ; preds = %109
%115 = load i32, i32* @STDOUT_FILENO
%116 = call i64 @close(i32 %115)
%117 = icmp ne i64 %116, 0
br i1 %117, label %118, label %119
118: ; preds = %114
store i32 1, i32* %1
br label %131
119: ; preds = %114
%120 = load i32, i32* @STDERR_FILENO
%121 = call i64 @close(i32 %120)
%122 = icmp ne i64 %121, 0
br i1 %122, label %123, label %124
123: ; preds = %119
store i32 1, i32* %1
br label %131
124: ; preds = %119
%125 = load i32, i32* @STDERR_FILENO
%126 = call i64 @close(i32 %125)
%127 = icmp eq i64 %126, 0
br i1 %127, label %128, label %129
128: ; preds = %124
store i32 1, i32* %1
br label %131
129: ; preds = %124
%130 = call i32 @_exit(i32 0)
unreachable
131: ; preds = %128, %123, %118, %113, %108, %103, %93, %86, %80, %74, %64, %51, %46, %39, %18
%132 = load i32, i32* %1
ret i32 %132
}

LLVM IR (-O2):
@.str = [8 x i8] c"hello, \00"
@.str.1 = [7 x i8] c"world\0A\00"
@STDOUT_FILENO = global i32 0
@AT_FDCWD = global i32 0
@.str.2 = [10 x i8] c"/dev/zero\00"
@O_RDONLY = global i32 0
@O_CLOEXEC = global i32 0
@.str.3 = [12 x i8] c"/dev/stdout\00"
@O_WRONLY = global i32 0
@STDIN_FILENO = global i32 0
@STDERR_FILENO = global i32 0
define i32 @main() {
%1 = alloca [128 x i8]
%2 = alloca [2 x i32]
%3 = load i32, i32* @STDOUT_FILENO
%4 = tail call i64 @write(i32 %3, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i64 0, i64 0), i64 7)
%5 = icmp eq i64 %4, 7
br i1 %5, label %6, label %102
6: ; preds = %0
%7 = getelementptr inbounds [128 x i8], [128 x i8]* %1, i64 0, i64 0
%8 = bitcast [128 x i8]* %1 to <16 x i8>*
store <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, <16 x i8>* %8
%9 = getelementptr inbounds [128 x i8], [128 x i8]* %1, i64 0, i64 16
%10 = bitcast i8* %9 to <16 x i8>*
store <16 x i8> <i8 16, i8 17, i8 18, i8 19, i8 20, i8 21, i8 22, i8 23, i8 24, i8 25, i8 26, i8 27, i8 28, i8 29, i8 30, i8 31>, <16 x i8>* %10
%11 = getelementptr inbounds [128 x i8], [128 x i8]* %1, i64 0, i64 32
%12 = bitcast i8* %11 to <16 x i8>*
store <16 x i8> <i8 32, i8 33, i8 34, i8 35, i8 36, i8 37, i8 38, i8 39, i8 40, i8 41, i8 42, i8 43, i8 44, i8 45, i8 46, i8 47>, <16 x i8>* %12
%13 = getelementptr inbounds [128 x i8], [128 x i8]* %1, i64 0, i64 48
%14 = bitcast i8* %13 to <16 x i8>*
store <16 x i8> <i8 48, i8 49, i8 50, i8 51, i8 52, i8 53, i8 54, i8 55, i8 56, i8 57, i8 58, i8 59, i8 60, i8 61, i8 62, i8 63>, <16 x i8>* %14
%15 = getelementptr inbounds [128 x i8], [128 x i8]* %1, i64 0, i64 64
%16 = bitcast i8* %15 to <16 x i8>*
store <16 x i8> <i8 64, i8 65, i8 66, i8 67, i8 68, i8 69, i8 70, i8 71, i8 72, i8 73, i8 74, i8 75, i8 76, i8 77, i8 78, i8 79>, <16 x i8>* %16
%17 = getelementptr inbounds [128 x i8], [128 x i8]* %1, i64 0, i64 80
%18 = bitcast i8* %17 to <16 x i8>*
store <16 x i8> <i8 80, i8 81, i8 82, i8 83, i8 84, i8 85, i8 86, i8 87, i8 88, i8 89, i8 90, i8 91, i8 92, i8 93, i8 94, i8 95>, <16 x i8>* %18
%19 = getelementptr inbounds [128 x i8], [128 x i8]* %1, i64 0, i64 96
%20 = bitcast i8* %19 to <16 x i8>*
store <16 x i8> <i8 96, i8 97, i8 98, i8 99, i8 100, i8 101, i8 102, i8 103, i8 104, i8 105, i8 106, i8 107, i8 108, i8 109, i8 110, i8 111>, <16 x i8>* %20
%21 = getelementptr inbounds [128 x i8], [128 x i8]* %1, i64 0, i64 112
%22 = bitcast i8* %21 to <16 x i8>*
store <16 x i8> <i8 112, i8 113, i8 114, i8 115, i8 116, i8 117, i8 118, i8 119, i8 120, i8 121, i8 122, i8 123, i8 124, i8 125, i8 126, i8 127>, <16 x i8>* %22
%23 = load i32, i32* @AT_FDCWD
%24 = load i32, i32* @O_RDONLY
%25 = tail call i32 @openat(i32 %23, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.2, i64 0, i64 0), i32 %24)
%26 = icmp slt i32 %25, 0
br i1 %26, label %101, label %27
27: ; preds = %6
%28 = call i32 @read(i32 %25, i8* %7, i32 128)
%29 = icmp eq i32 %28, 128
br i1 %29, label %30, label %101
30: ; preds = %27
%31 = tail call i64 @close(i32 %25)
%32 = icmp eq i64 %31, 0
br i1 %32, label %51, label %101
33: ; preds = %51
%34 = or i64 %52, 1
%35 = getelementptr inbounds [128 x i8], [128 x i8]* %1, i64 0, i64 %34
%36 = load i8, i8* %35
%37 = icmp eq i8 %36, 0
br i1 %37, label %38, label %101
38: ; preds = %33
%39 = or i64 %52, 2
%40 = getelementptr inbounds [128 x i8], [128 x i8]* %1, i64 0, i64 %39
%41 = load i8, i8* %40
%42 = icmp eq i8 %41, 0
br i1 %42, label %43, label %101
43: ; preds = %38
%44 = or i64 %52, 3
%45 = getelementptr inbounds [128 x i8], [128 x i8]* %1, i64 0, i64 %44
%46 = load i8, i8* %45
%47 = icmp eq i8 %46, 0
br i1 %47, label %48, label %101
48: ; preds = %43
%49 = add nuw nsw i64 %52, 4
%50 = icmp eq i64 %49, 128
br i1 %50, label %56, label %51
51: ; preds = %30, %48
%52 = phi i64 [ %49, %48 ], [ 0, %30 ]
%53 = getelementptr inbounds [128 x i8], [128 x i8]* %1, i64 0, i64 %52
%54 = load i8, i8* %53
%55 = icmp eq i8 %54, 0
br i1 %55, label %33, label %101
56: ; preds = %48
%57 = bitcast [2 x i32]* %2 to i8*
%58 = getelementptr inbounds [2 x i32], [2 x i32]* %2, i64 0, i64 0
%59 = load i32, i32* @O_CLOEXEC
%60 = call i64 @pipe2(i32* %58, i32 %59)
%61 = icmp slt i64 %60, 0
br i1 %61, label %100, label %62
62: ; preds = %56
%63 = load i32, i32* %58
%64 = call i64 @close(i32 %63)
%65 = icmp eq i64 %64, 0
br i1 %65, label %66, label %100
66: ; preds = %62
%67 = getelementptr inbounds [2 x i32], [2 x i32]* %2, i64 0, i64 1
%68 = load i32, i32* %67
%69 = call i64 @close(i32 %68)
%70 = icmp eq i64 %69, 0
br i1 %70, label %71, label %100
71: ; preds = %66
%72 = load i32, i32* @AT_FDCWD
%73 = load i32, i32* @O_WRONLY
%74 = call i32 @openat(i32 %72, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.3, i64 0, i64 0), i32 %73)
%75 = icmp slt i32 %74, 0
br i1 %75, label %100, label %76
76: ; preds = %71
%77 = call i64 @write(i32 %74, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.1, i64 0, i64 0), i64 6)
%78 = icmp eq i64 %77, 6
br i1 %78, label %79, label %100
79: ; preds = %76
%80 = call i64 @close(i32 %74)
%81 = icmp eq i64 %80, 0
br i1 %81, label %82, label %100
82: ; preds = %79
%83 = load i32, i32* @STDIN_FILENO
%84 = call i64 @close(i32 %83)
%85 = icmp eq i64 %84, 0
br i1 %85, label %86, label %100
86: ; preds = %82
%87 = load i32, i32* @STDOUT_FILENO
%88 = call i64 @close(i32 %87)
%89 = icmp eq i64 %88, 0
br i1 %89, label %90, label %100
90: ; preds = %86
%91 = load i32, i32* @STDERR_FILENO
%92 = call i64 @close(i32 %91)
%93 = icmp eq i64 %92, 0
br i1 %93, label %94, label %100
94: ; preds = %90
%95 = load i32, i32* @STDERR_FILENO
%96 = call i64 @close(i32 %95)
%97 = icmp eq i64 %96, 0
br i1 %97, label %100, label %98
98: ; preds = %94
%99 = call i32 @_exit(i32 0)
unreachable
100: ; preds = %71, %76, %79, %82, %86, %90, %94, %66, %62, %56
br label %101
101: ; preds = %51, %33, %38, %43, %30, %27, %6, %100
br label %102
102: ; preds = %0, %101
ret i32 1
}