#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 EOF;
int getc(int /*<<< orphan*/);
int /*<<< orphan*/ printf(char *, ...);
int /*<<< orphan*/ stdin;
void main() {
  char *poo = "poot", *Poo = "pootpoot", O[9];
  int o, t, T, p;
  (t = p = 0) || (*O = '\0');
  while ((o = getc(stdin)) != (EOF))
    if ((p == 0) && (((o > 64) && (o < 91)) || ((o > 96) && (o < 123))))
      (t != 8) && (O[t] = o) && (O[++t] = '\0');
    else {
      if (t > 7) {
        for (T = 0; T <= 7; T++)
          printf("%c", (((*(O + T) > 64) && (*(O + T) < 91))
                            ? (((*(Poo + T) > 96) && (*(Poo + T) < 123))
                                   ? (*(Poo + T) - 32)
                                   : (*(Poo + T)))
                            : (((*(Poo + T) > 64) && (*(Poo + T) < 91))
                                   ? (*(Poo + T) + 32)
                                   : (*(Poo + T)))));
        printf("%c", o);
      } else if (t > 3) {
        for (T = 0; T <= 3; T++)
          printf("%c", (((*(O + T) > 64) && (*(O + T) < 91))
                            ? (((*(poo + T) > 96) && (*(poo + T) < 123))
                                   ? (*(poo + T) - 32)
                                   : (*(poo + T)))
                            : (((*(poo + T) > 64) && (*(poo + T) < 91))
                                   ? (*(poo + T) + 32)
                                   : (*(poo + T)))));
        printf("%c", o);
      } else
        printf("%s%c", O, o);
      (t = 0) || (*O = '\0');
      (o == 60) && (++p);
      (o == 62) && (p != 0) && (--p);
    }
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
lea    0xed5(%rip),%rax
mov    %rax,-0x8(%rbp)
lea    0xec6(%rip),%rax
mov    %rax,-0x10(%rbp)
movl   $0x0,-0x2c(%rbp)
movl   $0x0,-0x24(%rbp)
mov    $0x1,%al
xor    %ecx,%ecx
test   $0x1,%cl
mov    %al,-0x2d(%rbp)
jne    1165 <main+0x45>
movb   $0x0,-0x19(%rbp)
xor    %eax,%eax
mov    %al,-0x2d(%rbp)
mov    -0x2d(%rbp),%al
mov    0x2e79(%rip),%rax
mov    (%rax),%edi
call   1040 <getc@plt>
mov    %eax,-0x20(%rbp)
mov    0x2e60(%rip),%rcx
cmp    (%rcx),%eax
je     14e5 <main+0x3c5>
cmpl   $0x0,-0x2c(%rbp)
jne    1202 <main+0xe2>
cmpl   $0x40,-0x20(%rbp)
jle    11a6 <main+0x86>
cmpl   $0x5b,-0x20(%rbp)
jl     11ba <main+0x9a>
cmpl   $0x60,-0x20(%rbp)
jle    1202 <main+0xe2>
cmpl   $0x7b,-0x20(%rbp)
jge    1202 <main+0xe2>
xor    %eax,%eax
cmpl   $0x8,-0x24(%rbp)
mov    %al,-0x2e(%rbp)
je     11fa <main+0xda>
mov    -0x20(%rbp),%eax
movslq -0x24(%rbp),%rcx
mov    %al,-0x19(%rbp,%rcx,1)
movsbl %al,%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x2e(%rbp)
je     11fa <main+0xda>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
cltq
movb   $0x0,-0x19(%rbp,%rax,1)
xor    %eax,%eax
mov    %al,-0x2e(%rbp)
mov    -0x2e(%rbp),%al
jmp    14e0 <main+0x3c0>
cmpl   $0x7,-0x24(%rbp)
jle    1327 <main+0x207>
movl   $0x0,-0x28(%rbp)
cmpl   $0x7,-0x28(%rbp)
jg     1311 <main+0x1f1>
movslq -0x28(%rbp),%rax
movsbl -0x19(%rbp,%rax,1),%eax
cmp    $0x40,%eax
jle    129c <main+0x17c>
movslq -0x28(%rbp),%rax
movsbl -0x19(%rbp,%rax,1),%eax
cmp    $0x5b,%eax
jge    129c <main+0x17c>
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x60,%eax
jle    1282 <main+0x162>
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x7b,%eax
jge    1282 <main+0x162>
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x20,%eax
mov    %eax,-0x34(%rbp)
jmp    1291 <main+0x171>
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
mov    %eax,-0x38(%rbp)
jmp    12f2 <main+0x1d2>
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x40,%eax
jle    12dd <main+0x1bd>
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x5b,%eax
jge    12dd <main+0x1bd>
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
add    $0x20,%eax
mov    %eax,-0x3c(%rbp)
jmp    12ec <main+0x1cc>
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x38(%rbp),%esi
lea    0xd0f(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1213 <main+0xf3>
mov    -0x20(%rbp),%esi
lea    0xcf0(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1466 <main+0x346>
cmpl   $0x3,-0x24(%rbp)
jle    144c <main+0x32c>
movl   $0x0,-0x28(%rbp)
cmpl   $0x3,-0x28(%rbp)
jg     1436 <main+0x316>
movslq -0x28(%rbp),%rax
movsbl -0x19(%rbp,%rax,1),%eax
cmp    $0x40,%eax
jle    13c1 <main+0x2a1>
movslq -0x28(%rbp),%rax
movsbl -0x19(%rbp,%rax,1),%eax
cmp    $0x5b,%eax
jge    13c1 <main+0x2a1>
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x60,%eax
jle    13a7 <main+0x287>
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x7b,%eax
jge    13a7 <main+0x287>
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x20,%eax
mov    %eax,-0x40(%rbp)
jmp    13b6 <main+0x296>
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    %eax,-0x40(%rbp)
mov    -0x40(%rbp),%eax
mov    %eax,-0x44(%rbp)
jmp    1417 <main+0x2f7>
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x40,%eax
jle    1402 <main+0x2e2>
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x5b,%eax
jge    1402 <main+0x2e2>
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
add    $0x20,%eax
mov    %eax,-0x48(%rbp)
jmp    1411 <main+0x2f1>
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    %eax,-0x48(%rbp)
mov    -0x48(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%esi
lea    0xbea(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1338 <main+0x218>
mov    -0x20(%rbp),%esi
lea    0xbcb(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1461 <main+0x341>
lea    -0x19(%rbp),%rsi
mov    -0x20(%rbp),%edx
lea    0xbaf(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1466 <main+0x346>
movl   $0x0,-0x24(%rbp)
mov    $0x1,%al
xor    %ecx,%ecx
test   $0x1,%cl
mov    %al,-0x49(%rbp)
jne    1486 <main+0x366>
movb   $0x0,-0x19(%rbp)
xor    %eax,%eax
mov    %al,-0x49(%rbp)
mov    -0x49(%rbp),%al
xor    %eax,%eax
cmpl   $0x3c,-0x20(%rbp)
mov    %al,-0x4a(%rbp)
jne    14aa <main+0x38a>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
cmp    $0x0,%eax
setne  %al
mov    %al,-0x4a(%rbp)
mov    -0x4a(%rbp),%al
xor    %eax,%eax
cmpl   $0x3e,-0x20(%rbp)
mov    %al,-0x4b(%rbp)
jne    14dd <main+0x3bd>
xor    %eax,%eax
cmpl   $0x0,-0x2c(%rbp)
mov    %al,-0x4b(%rbp)
je     14dd <main+0x3bd>
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
cmp    $0x0,%eax
setne  %al
mov    %al,-0x4b(%rbp)
mov    -0x4b(%rbp),%al
jmp    1168 <main+0x48>
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
movb   $0x0,0xf(%rsp)
mov    0x2e9e(%rip),%r12
mov    (%r12),%edi
call   1050 <getc@plt>
mov    0x2e86(%rip),%r13
cmp    0x0(%r13),%eax
jne    116f <main+0x3f>
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    %eax,%ebp
lea    0xf(%rsp),%r15
xor    %ebx,%ebx
xor    %eax,%eax
jmp    1293 <main+0x163>
nop
movzbl 0xf(%rsp),%eax
add    $0xbf,%al
xor    %edi,%edi
cmp    $0x1a,%al
setae  %dil
shl    $0x5,%edi
or     $0x50,%edi
call   1030 <putchar@plt>
movzbl 0x10(%rsp),%eax
add    $0xbf,%al
xor    %edi,%edi
cmp    $0x1a,%al
setae  %dil
shl    $0x5,%edi
or     $0x4f,%edi
call   1030 <putchar@plt>
movzbl 0x11(%rsp),%eax
add    $0xbf,%al
xor    %edi,%edi
cmp    $0x1a,%al
setae  %dil
shl    $0x5,%edi
or     $0x4f,%edi
call   1030 <putchar@plt>
movzbl 0x12(%rsp),%eax
add    $0xbf,%al
xor    %edi,%edi
cmp    $0x1a,%al
setae  %dil
shl    $0x5,%edi
or     $0x54,%edi
call   1030 <putchar@plt>
movzbl 0x13(%rsp),%eax
add    $0xbf,%al
xor    %edi,%edi
cmp    $0x1a,%al
setae  %dil
shl    $0x5,%edi
or     $0x50,%edi
call   1030 <putchar@plt>
movzbl 0x14(%rsp),%eax
add    $0xbf,%al
xor    %edi,%edi
cmp    $0x1a,%al
setae  %dil
shl    $0x5,%edi
or     $0x4f,%edi
call   1030 <putchar@plt>
movzbl 0x15(%rsp),%eax
add    $0xbf,%al
xor    %edi,%edi
cmp    $0x1a,%al
setae  %dil
shl    $0x5,%edi
or     $0x4f,%edi
call   1030 <putchar@plt>
movzbl 0x16(%rsp),%eax
add    $0xbf,%al
xor    %edi,%edi
cmp    $0x1a,%al
setae  %dil
shl    $0x5,%edi
or     $0x54,%edi
call   1030 <putchar@plt>
mov    %ebp,%edi
call   1030 <putchar@plt>
movb   $0x0,0xf(%rsp)
xor    %eax,%eax
cmp    $0x3c,%ebp
sete   %al
add    %eax,%ebx
cmp    $0x3e,%ebp
sete   %al
test   %ebx,%ebx
setne  %cl
and    %al,%cl
movzbl %cl,%eax
sub    %eax,%ebx
xor    %r14d,%r14d
mov    (%r12),%edi
call   1050 <getc@plt>
mov    %eax,%ebp
mov    %r14d,%eax
cmp    0x0(%r13),%ebp
je     1160 <main+0x30>
test   %ebx,%ebx
jne    12d0 <main+0x1a0>
mov    %ebp,%ecx
and    $0xffffffdf,%ecx
add    $0xffffffbf,%ecx
cmp    $0x19,%ecx
ja     12d0 <main+0x1a0>
xor    %ebx,%ebx
mov    $0x8,%r14d
cmp    $0x8,%eax
je     127b <main+0x14b>
movslq %eax,%r14
mov    %bpl,0xf(%rsp,%r14,1)
movb   $0x0,0x10(%rsp,%r14,1)
add    $0x1,%r14
jmp    127b <main+0x14b>
cs nopw 0x0(%rax,%rax,1)
nop
cmp    $0x8,%eax
jge    1180 <main+0x50>
cmp    $0x4,%eax
jl     1340 <main+0x210>
movzbl 0xf(%rsp),%eax
add    $0xbf,%al
xor    %edi,%edi
cmp    $0x1a,%al
setae  %dil
shl    $0x5,%edi
or     $0x50,%edi
call   1030 <putchar@plt>
movzbl 0x10(%rsp),%eax
add    $0xbf,%al
xor    %edi,%edi
cmp    $0x1a,%al
setae  %dil
shl    $0x5,%edi
or     $0x4f,%edi
call   1030 <putchar@plt>
movzbl 0x11(%rsp),%eax
add    $0xbf,%al
xor    %edi,%edi
cmp    $0x1a,%al
setae  %dil
shl    $0x5,%edi
or     $0x4f,%edi
call   1030 <putchar@plt>
movzbl 0x12(%rsp),%eax
jmp    123b <main+0x10b>
cs nopw 0x0(%rax,%rax,1)
lea    0xcb9(%rip),%rdi
mov    %r15,%rsi
mov    %ebp,%edx
xor    %eax,%eax
call   1040 <printf@plt>
jmp    1257 <main+0x127>

LLVM IR (-O0):
@.str = [5 x i8] c"poot\00"
@.str.1 = [9 x i8] c"pootpoot\00"
@stdin = global i32 0
@EOF = global i32 0
@.str.2 = [3 x i8] c"%c\00"
@.str.3 = [5 x i8] c"%s%c\00"
define void @main() {
%1 = alloca i8*
%2 = alloca i8*
%3 = alloca [9 x i8]
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), i8** %1
store i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.1, i64 0, i64 0), i8** %2
store i32 0, i32* %7
store i32 0, i32* %5
br i1 false, label %10, label %8
8: ; preds = %0
%9 = getelementptr inbounds [9 x i8], [9 x i8]* %3, i64 0, i64 0
store i8 0, i8* %9
br label %10
10: ; preds = %8, %0
%11 = phi i1 [ true, %0 ], [ false, %8 ]
%12 = zext i1 %11 to i32
br label %13
13: ; preds = %280, %10
%14 = load i32, i32* @stdin
%15 = call i32 @getc(i32 %14)
store i32 %15, i32* %4
%16 = load i32, i32* @EOF
%17 = icmp ne i32 %15, %16
br i1 %17, label %18, label %281
18: ; preds = %13
%19 = load i32, i32* %7
%20 = icmp eq i32 %19, 0
br i1 %20, label %21, label %52
21: ; preds = %18
%22 = load i32, i32* %4
%23 = icmp sgt i32 %22, 64
br i1 %23, label %24, label %27
24: ; preds = %21
%25 = load i32, i32* %4
%26 = icmp slt i32 %25, 91
br i1 %26, label %33, label %27
27: ; preds = %24, %21
%28 = load i32, i32* %4
%29 = icmp sgt i32 %28, 96
br i1 %29, label %30, label %52
30: ; preds = %27
%31 = load i32, i32* %4
%32 = icmp slt i32 %31, 123
br i1 %32, label %33, label %52
33: ; preds = %30, %24
%34 = load i32, i32* %5
%35 = icmp ne i32 %34, 8
br i1 %35, label %36, label %49
36: ; preds = %33
%37 = load i32, i32* %4
%38 = trunc i32 %37 to i8
%39 = load i32, i32* %5
%40 = sext i32 %39 to i64
%41 = getelementptr inbounds [9 x i8], [9 x i8]* %3, i64 0, i64 %40
store i8 %38, i8* %41
%42 = sext i8 %38 to i32
%43 = icmp ne i32 %42, 0
br i1 %43, label %44, label %49
44: ; preds = %36
%45 = load i32, i32* %5
%46 = add nsw i32 %45, 1
store i32 %46, i32* %5
%47 = sext i32 %46 to i64
%48 = getelementptr inbounds [9 x i8], [9 x i8]* %3, i64 0, i64 %47
store i8 0, i8* %48
br label %49
49: ; preds = %44, %36, %33
%50 = phi i1 [ false, %36 ], [ false, %33 ], [ false, %44 ]
%51 = zext i1 %50 to i32
br label %280
52: ; preds = %30, %27, %18
%53 = load i32, i32* %5
%54 = icmp sgt i32 %53, 7
br i1 %54, label %55, label %150
55: ; preds = %52
store i32 0, i32* %6
br label %56
56: ; preds = %144, %55
%57 = load i32, i32* %6
%58 = icmp sle i32 %57, 7
br i1 %58, label %59, label %147
59: ; preds = %56
%60 = getelementptr inbounds [9 x i8], [9 x i8]* %3, i64 0, i64 0
%61 = load i32, i32* %6
%62 = sext i32 %61 to i64
%63 = getelementptr inbounds i8, i8* %60, i64 %62
%64 = load i8, i8* %63
%65 = sext i8 %64 to i32
%66 = icmp sgt i32 %65, 64
br i1 %66, label %67, label %108
67: ; preds = %59
%68 = getelementptr inbounds [9 x i8], [9 x i8]* %3, i64 0, i64 0
%69 = load i32, i32* %6
%70 = sext i32 %69 to i64
%71 = getelementptr inbounds i8, i8* %68, i64 %70
%72 = load i8, i8* %71
%73 = sext i8 %72 to i32
%74 = icmp slt i32 %73, 91
br i1 %74, label %75, label %108
75: ; preds = %67
%76 = load i8*, i8** %2
%77 = load i32, i32* %6
%78 = sext i32 %77 to i64
%79 = getelementptr inbounds i8, i8* %76, i64 %78
%80 = load i8, i8* %79
%81 = sext i8 %80 to i32
%82 = icmp sgt i32 %81, 96
br i1 %82, label %83, label %99
83: ; preds = %75
%84 = load i8*, i8** %2
%85 = load i32, i32* %6
%86 = sext i32 %85 to i64
%87 = getelementptr inbounds i8, i8* %84, i64 %86
%88 = load i8, i8* %87
%89 = sext i8 %88 to i32
%90 = icmp slt i32 %89, 123
br i1 %90, label %91, label %99
91: ; preds = %83
%92 = load i8*, i8** %2
%93 = load i32, i32* %6
%94 = sext i32 %93 to i64
%95 = getelementptr inbounds i8, i8* %92, i64 %94
%96 = load i8, i8* %95
%97 = sext i8 %96 to i32
%98 = sub nsw i32 %97, 32
br label %106
99: ; preds = %83, %75
%100 = load i8*, i8** %2
%101 = load i32, i32* %6
%102 = sext i32 %101 to i64
%103 = getelementptr inbounds i8, i8* %100, i64 %102
%104 = load i8, i8* %103
%105 = sext i8 %104 to i32
br label %106
106: ; preds = %99, %91
%107 = phi i32 [ %98, %91 ], [ %105, %99 ]
br label %141
108: ; preds = %67, %59
%109 = load i8*, i8** %2
%110 = load i32, i32* %6
%111 = sext i32 %110 to i64
%112 = getelementptr inbounds i8, i8* %109, i64 %111
%113 = load i8, i8* %112
%114 = sext i8 %113 to i32
%115 = icmp sgt i32 %114, 64
br i1 %115, label %116, label %132
116: ; preds = %108
%117 = load i8*, i8** %2
%118 = load i32, i32* %6
%119 = sext i32 %118 to i64
%120 = getelementptr inbounds i8, i8* %117, i64 %119
%121 = load i8, i8* %120
%122 = sext i8 %121 to i32
%123 = icmp slt i32 %122, 91
br i1 %123, label %124, label %132
124: ; preds = %116
%125 = load i8*, i8** %2
%126 = load i32, i32* %6
%127 = sext i32 %126 to i64
%128 = getelementptr inbounds i8, i8* %125, i64 %127
%129 = load i8, i8* %128
%130 = sext i8 %129 to i32
%131 = add nsw i32 %130, 32
br label %139
132: ; preds = %116, %108
%133 = load i8*, i8** %2
%134 = load i32, i32* %6
%135 = sext i32 %134 to i64
%136 = getelementptr inbounds i8, i8* %133, i64 %135
%137 = load i8, i8* %136
%138 = sext i8 %137 to i32
br label %139
139: ; preds = %132, %124
%140 = phi i32 [ %131, %124 ], [ %138, %132 ]
br label %141
141: ; preds = %139, %106
%142 = phi i32 [ %107, %106 ], [ %140, %139 ]
%143 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i32 %142)
br label %144
144: ; preds = %141
%145 = load i32, i32* %6
%146 = add nsw i32 %145, 1
store i32 %146, i32* %6
br label %56
147: ; preds = %56
%148 = load i32, i32* %4
%149 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i32 %148)
br label %253
150: ; preds = %52
%151 = load i32, i32* %5
%152 = icmp sgt i32 %151, 3
br i1 %152, label %153, label %248
153: ; preds = %150
store i32 0, i32* %6
br label %154
154: ; preds = %242, %153
%155 = load i32, i32* %6
%156 = icmp sle i32 %155, 3
br i1 %156, label %157, label %245
157: ; preds = %154
%158 = getelementptr inbounds [9 x i8], [9 x i8]* %3, i64 0, i64 0
%159 = load i32, i32* %6
%160 = sext i32 %159 to i64
%161 = getelementptr inbounds i8, i8* %158, i64 %160
%162 = load i8, i8* %161
%163 = sext i8 %162 to i32
%164 = icmp sgt i32 %163, 64
br i1 %164, label %165, label %206
165: ; preds = %157
%166 = getelementptr inbounds [9 x i8], [9 x i8]* %3, i64 0, i64 0
%167 = load i32, i32* %6
%168 = sext i32 %167 to i64
%169 = getelementptr inbounds i8, i8* %166, i64 %168
%170 = load i8, i8* %169
%171 = sext i8 %170 to i32
%172 = icmp slt i32 %171, 91
br i1 %172, label %173, label %206
173: ; preds = %165
%174 = load i8*, i8** %1
%175 = load i32, i32* %6
%176 = sext i32 %175 to i64
%177 = getelementptr inbounds i8, i8* %174, i64 %176
%178 = load i8, i8* %177
%179 = sext i8 %178 to i32
%180 = icmp sgt i32 %179, 96
br i1 %180, label %181, label %197
181: ; preds = %173
%182 = load i8*, i8** %1
%183 = load i32, i32* %6
%184 = sext i32 %183 to i64
%185 = getelementptr inbounds i8, i8* %182, i64 %184
%186 = load i8, i8* %185
%187 = sext i8 %186 to i32
%188 = icmp slt i32 %187, 123
br i1 %188, label %189, label %197
189: ; preds = %181
%190 = load i8*, i8** %1
%191 = load i32, i32* %6
%192 = sext i32 %191 to i64
%193 = getelementptr inbounds i8, i8* %190, i64 %192
%194 = load i8, i8* %193
%195 = sext i8 %194 to i32
%196 = sub nsw i32 %195, 32
br label %204
197: ; preds = %181, %173
%198 = load i8*, i8** %1
%199 = load i32, i32* %6
%200 = sext i32 %199 to i64
%201 = getelementptr inbounds i8, i8* %198, i64 %200
%202 = load i8, i8* %201
%203 = sext i8 %202 to i32
br label %204
204: ; preds = %197, %189
%205 = phi i32 [ %196, %189 ], [ %203, %197 ]
br label %239
206: ; preds = %165, %157
%207 = load i8*, i8** %1
%208 = load i32, i32* %6
%209 = sext i32 %208 to i64
%210 = getelementptr inbounds i8, i8* %207, i64 %209
%211 = load i8, i8* %210
%212 = sext i8 %211 to i32
%213 = icmp sgt i32 %212, 64
br i1 %213, label %214, label %230
214: ; preds = %206
%215 = load i8*, i8** %1
%216 = load i32, i32* %6
%217 = sext i32 %216 to i64
%218 = getelementptr inbounds i8, i8* %215, i64 %217
%219 = load i8, i8* %218
%220 = sext i8 %219 to i32
%221 = icmp slt i32 %220, 91
br i1 %221, label %222, label %230
222: ; preds = %214
%223 = load i8*, i8** %1
%224 = load i32, i32* %6
%225 = sext i32 %224 to i64
%226 = getelementptr inbounds i8, i8* %223, i64 %225
%227 = load i8, i8* %226
%228 = sext i8 %227 to i32
%229 = add nsw i32 %228, 32
br label %237
230: ; preds = %214, %206
%231 = load i8*, i8** %1
%232 = load i32, i32* %6
%233 = sext i32 %232 to i64
%234 = getelementptr inbounds i8, i8* %231, i64 %233
%235 = load i8, i8* %234
%236 = sext i8 %235 to i32
br label %237
237: ; preds = %230, %222
%238 = phi i32 [ %229, %222 ], [ %236, %230 ]
br label %239
239: ; preds = %237, %204
%240 = phi i32 [ %205, %204 ], [ %238, %237 ]
%241 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i32 %240)
br label %242
242: ; preds = %239
%243 = load i32, i32* %6
%244 = add nsw i32 %243, 1
store i32 %244, i32* %6
br label %154
245: ; preds = %154
%246 = load i32, i32* %4
%247 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i32 %246)
br label %252
248: ; preds = %150
%249 = getelementptr inbounds [9 x i8], [9 x i8]* %3, i64 0, i64 0
%250 = load i32, i32* %4
%251 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0), i8* %249, i32 %250)
br label %252
252: ; preds = %248, %245
br label %253
253: ; preds = %252, %147
store i32 0, i32* %5
br i1 false, label %256, label %254
254: ; preds = %253
%255 = getelementptr inbounds [9 x i8], [9 x i8]* %3, i64 0, i64 0
store i8 0, i8* %255
br label %256
256: ; preds = %254, %253
%257 = phi i1 [ true, %253 ], [ false, %254 ]
%258 = zext i1 %257 to i32
%259 = load i32, i32* %4
%260 = icmp eq i32 %259, 60
br i1 %260, label %261, label %265
261: ; preds = %256
%262 = load i32, i32* %7
%263 = add nsw i32 %262, 1
store i32 %263, i32* %7
%264 = icmp ne i32 %263, 0
br label %265
265: ; preds = %261, %256
%266 = phi i1 [ false, %256 ], [ %264, %261 ]
%267 = zext i1 %266 to i32
%268 = load i32, i32* %4
%269 = icmp eq i32 %268, 62
br i1 %269, label %270, label %277
270: ; preds = %265
%271 = load i32, i32* %7
%272 = icmp ne i32 %271, 0
br i1 %272, label %273, label %277
273: ; preds = %270
%274 = load i32, i32* %7
%275 = add nsw i32 %274, -1
store i32 %275, i32* %7
%276 = icmp ne i32 %275, 0
br label %277
277: ; preds = %273, %270, %265
%278 = phi i1 [ false, %270 ], [ false, %265 ], [ %276, %273 ]
%279 = zext i1 %278 to i32
br label %280
280: ; preds = %277, %49
br label %13
281: ; preds = %13
ret void
}

LLVM IR (-O2):
@stdin = global i32 0
@EOF = global i32 0
@.str.3 = [5 x i8] c"%s%c\00"
define void @main() {
%1 = alloca [9 x i8]
%2 = getelementptr inbounds [9 x i8], [9 x i8]* %1, i64 0, i64 0
store i8 0, i8* %2
%3 = load i32, i32* @stdin
%4 = call i32 @getc(i32 %3)
%5 = load i32, i32* @EOF
%6 = icmp eq i32 %4, %5
br i1 %6, label %122, label %7
7: ; preds = %0
%8 = getelementptr inbounds [9 x i8], [9 x i8]* %1, i64 0, i64 1
%9 = getelementptr inbounds [9 x i8], [9 x i8]* %1, i64 0, i64 2
%10 = getelementptr inbounds [9 x i8], [9 x i8]* %1, i64 0, i64 3
%11 = getelementptr inbounds [9 x i8], [9 x i8]* %1, i64 0, i64 1
%12 = getelementptr inbounds [9 x i8], [9 x i8]* %1, i64 0, i64 2
%13 = getelementptr inbounds [9 x i8], [9 x i8]* %1, i64 0, i64 3
%14 = getelementptr inbounds [9 x i8], [9 x i8]* %1, i64 0, i64 4
%15 = getelementptr inbounds [9 x i8], [9 x i8]* %1, i64 0, i64 5
%16 = getelementptr inbounds [9 x i8], [9 x i8]* %1, i64 0, i64 6
%17 = getelementptr inbounds [9 x i8], [9 x i8]* %1, i64 0, i64 7
br label %18
18: ; preds = %7, %115
%19 = phi i32 [ %119, %115 ], [ %4, %7 ]
%20 = phi i32 [ %117, %115 ], [ 0, %7 ]
%21 = phi i32 [ %116, %115 ], [ 0, %7 ]
%22 = icmp eq i32 %20, 0
br i1 %22, label %23, label %36
23: ; preds = %18
%24 = and i32 %19, -33
%25 = add i32 %24, -65
%26 = icmp ult i32 %25, 26
br i1 %26, label %27, label %36
27: ; preds = %23
%28 = icmp eq i32 %21, 8
br i1 %28, label %115, label %29
29: ; preds = %27
%30 = trunc i32 %19 to i8
%31 = sext i32 %21 to i64
%32 = getelementptr inbounds [9 x i8], [9 x i8]* %1, i64 0, i64 %31
store i8 %30, i8* %32
%33 = add nsw i32 %21, 1
%34 = sext i32 %33 to i64
%35 = getelementptr inbounds [9 x i8], [9 x i8]* %1, i64 0, i64 %34
store i8 0, i8* %35
br label %115
36: ; preds = %23, %18
%37 = icmp sgt i32 %21, 7
br i1 %37, label %38, label %80
38: ; preds = %36
%39 = load i8, i8* %2
%40 = add i8 %39, -65
%41 = icmp ult i8 %40, 26
%42 = select i1 %41, i32 80, i32 112
%43 = call i32 @putchar(i32 %42)
%44 = load i8, i8* %11
%45 = add i8 %44, -65
%46 = icmp ult i8 %45, 26
%47 = select i1 %46, i32 79, i32 111
%48 = call i32 @putchar(i32 %47)
%49 = load i8, i8* %12
%50 = add i8 %49, -65
%51 = icmp ult i8 %50, 26
%52 = select i1 %51, i32 79, i32 111
%53 = call i32 @putchar(i32 %52)
%54 = load i8, i8* %13
%55 = add i8 %54, -65
%56 = icmp ult i8 %55, 26
%57 = select i1 %56, i32 84, i32 116
%58 = call i32 @putchar(i32 %57)
%59 = load i8, i8* %14
%60 = add i8 %59, -65
%61 = icmp ult i8 %60, 26
%62 = select i1 %61, i32 80, i32 112
%63 = call i32 @putchar(i32 %62)
%64 = load i8, i8* %15
%65 = add i8 %64, -65
%66 = icmp ult i8 %65, 26
%67 = select i1 %66, i32 79, i32 111
%68 = call i32 @putchar(i32 %67)
%69 = load i8, i8* %16
%70 = add i8 %69, -65
%71 = icmp ult i8 %70, 26
%72 = select i1 %71, i32 79, i32 111
%73 = call i32 @putchar(i32 %72)
%74 = load i8, i8* %17
%75 = add i8 %74, -65
%76 = icmp ult i8 %75, 26
%77 = select i1 %76, i32 84, i32 116
%78 = call i32 @putchar(i32 %77)
%79 = call i32 @putchar(i32 %19)
br label %106
80: ; preds = %36
%81 = icmp sgt i32 %21, 3
br i1 %81, label %82, label %104
82: ; preds = %80
%83 = load i8, i8* %2
%84 = add i8 %83, -65
%85 = icmp ult i8 %84, 26
%86 = select i1 %85, i32 80, i32 112
%87 = call i32 @putchar(i32 %86)
%88 = load i8, i8* %8
%89 = add i8 %88, -65
%90 = icmp ult i8 %89, 26
%91 = select i1 %90, i32 79, i32 111
%92 = call i32 @putchar(i32 %91)
%93 = load i8, i8* %9
%94 = add i8 %93, -65
%95 = icmp ult i8 %94, 26
%96 = select i1 %95, i32 79, i32 111
%97 = call i32 @putchar(i32 %96)
%98 = load i8, i8* %10
%99 = add i8 %98, -65
%100 = icmp ult i8 %99, 26
%101 = select i1 %100, i32 84, i32 116
%102 = call i32 @putchar(i32 %101)
%103 = call i32 @putchar(i32 %19)
br label %106
104: ; preds = %80
%105 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0), i8* %2, i32 %19)
br label %106
106: ; preds = %82, %104, %38
store i8 0, i8* %2
%107 = icmp eq i32 %19, 60
%108 = zext i1 %107 to i32
%109 = add nsw i32 %20, %108
%110 = icmp eq i32 %19, 62
%111 = icmp ne i32 %109, 0
%112 = select i1 %110, i1 %111, i1 false
%113 = sext i1 %112 to i32
%114 = add nsw i32 %109, %113
br label %115
115: ; preds = %27, %29, %106
%116 = phi i32 [ 0, %106 ], [ %33, %29 ], [ 8, %27 ]
%117 = phi i32 [ %114, %106 ], [ 0, %29 ], [ 0, %27 ]
%118 = load i32, i32* @stdin
%119 = call i32 @getc(i32 %118)
%120 = load i32, i32* @EOF
%121 = icmp eq i32 %119, %120
br i1 %121, label %122, label %18
122: ; preds = %115, %0
ret void
}