#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 */
char getchar();
int /*<<< orphan*/ putchar(char);
main() {
  char oink[9], *igpa, atinla = getchar(), iocccwa, apca = 'A', owla = 'a',
                       umna = 26;
  for (; (atinla + 1) && (!(((atinla - apca) * (apca + umna - atinla) >= 0) +
                            ((atinla - owla) * (owla + umna - atinla) >= 0)));
       putchar(atinla), atinla = getchar())
    ;
  for (; atinla + 1;) {
    for (igpa = oink, iocccwa = ((atinla - apca) * (apca + umna - atinla) >= 0);
         ((((atinla - apca) * (apca + umna - atinla) >= 0) +
           ((atinla - owla) * (owla + umna - atinla) >= 0)) &&
          "-Pig-"
          "Lat-in"
          "COb-fus"
          "ca-tion!!"[(((atinla - apca) * (apca + umna - atinla) >= 0)
                           ? atinla - apca + owla
                           : atinla) -
                      owla] -
              '-') ||
         ((igpa == oink) && !(*(igpa++) = 'w')) || !(*(igpa++) = owla);
         *(igpa++) = (((atinla - apca) * (apca + umna - atinla) >= 0)
                          ? atinla - apca + owla
                          : atinla),
        atinla = getchar())
      ;
    for (atinla = iocccwa ? (((atinla - owla) * (owla + umna - atinla) >= 0)
                                 ? atinla - owla + apca
                                 : atinla)
                          : atinla;
         (((atinla - apca) * (apca + umna - atinla) >= 0) +
          ((atinla - owla) * (owla + umna - atinla) >= 0));
         putchar(atinla), atinla = getchar())
      ;
    for (*igpa = 0, igpa = oink; *igpa; putchar(*(igpa++)))
      ;
    for (; (atinla + 1) && (!(((atinla - apca) * (apca + umna - atinla) >= 0) +
                              ((atinla - owla) * (owla + umna - atinla) >= 0)));
         putchar(atinla), atinla = getchar())
      ;
  }
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
movl   $0x0,-0x4(%rbp)
mov    $0x0,%al
call   1040 <getchar@plt>
mov    %al,-0x19(%rbp)
movb   $0x41,-0x1b(%rbp)
movb   $0x61,-0x1c(%rbp)
movb   $0x1a,-0x1d(%rbp)
movsbl -0x19(%rbp),%ecx
add    $0x1,%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x1e(%rbp)
je     11b8 <main+0x98>
movsbl -0x19(%rbp),%eax
movsbl -0x1b(%rbp),%ecx
sub    %ecx,%eax
movsbl -0x1b(%rbp),%ecx
movsbl -0x1d(%rbp),%edx
add    %edx,%ecx
movsbl -0x19(%rbp),%edx
sub    %edx,%ecx
imul   %ecx,%eax
cmp    $0x0,%eax
setge  %al
and    $0x1,%al
movzbl %al,%eax
movsbl -0x19(%rbp),%ecx
movsbl -0x1c(%rbp),%edx
sub    %edx,%ecx
movsbl -0x1c(%rbp),%edx
movsbl -0x1d(%rbp),%esi
add    %esi,%edx
movsbl -0x19(%rbp),%esi
sub    %esi,%edx
imul   %edx,%ecx
cmp    $0x0,%ecx
setge  %cl
and    $0x1,%cl
movzbl %cl,%ecx
add    %ecx,%eax
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
mov    %al,-0x1e(%rbp)
mov    -0x1e(%rbp),%al
test   $0x1,%al
jne    11c8 <main+0xa8>
jmp    11e5 <main+0xc5>
jmp    11cd <main+0xad>
movsbl -0x19(%rbp),%edi
call   1030 <putchar@plt>
mov    $0x0,%al
call   1040 <getchar@plt>
mov    %al,-0x19(%rbp)
jmp    1145 <main+0x25>
jmp    11ea <main+0xca>
movsbl -0x19(%rbp),%eax
add    $0x1,%eax
cmp    $0x0,%eax
je     1592 <main+0x472>
lea    -0xd(%rbp),%rax
mov    %rax,-0x18(%rbp)
movsbl -0x19(%rbp),%eax
movsbl -0x1b(%rbp),%ecx
sub    %ecx,%eax
movsbl -0x1b(%rbp),%ecx
movsbl -0x1d(%rbp),%edx
add    %edx,%ecx
movsbl -0x19(%rbp),%edx
sub    %edx,%ecx
imul   %ecx,%eax
cmp    $0x0,%eax
setge  %al
and    $0x1,%al
movzbl %al,%eax
mov    %al,-0x1a(%rbp)
movsbl -0x19(%rbp),%eax
movsbl -0x1b(%rbp),%ecx
sub    %ecx,%eax
movsbl -0x1b(%rbp),%ecx
movsbl -0x1d(%rbp),%edx
add    %edx,%ecx
movsbl -0x19(%rbp),%edx
sub    %edx,%ecx
imul   %ecx,%eax
cmp    $0x0,%eax
setge  %al
and    $0x1,%al
movzbl %al,%eax
movsbl -0x19(%rbp),%ecx
movsbl -0x1c(%rbp),%edx
sub    %edx,%ecx
movsbl -0x1c(%rbp),%edx
movsbl -0x1d(%rbp),%esi
add    %esi,%edx
movsbl -0x19(%rbp),%esi
sub    %esi,%edx
imul   %edx,%ecx
cmp    $0x0,%ecx
setge  %cl
and    $0x1,%cl
movzbl %cl,%ecx
add    %ecx,%eax
cmp    $0x0,%eax
je     12f6 <main+0x1d6>
movsbl -0x19(%rbp),%eax
movsbl -0x1b(%rbp),%ecx
sub    %ecx,%eax
movsbl -0x1b(%rbp),%ecx
movsbl -0x1d(%rbp),%edx
add    %edx,%ecx
movsbl -0x19(%rbp),%edx
sub    %edx,%ecx
imul   %ecx,%eax
cmp    $0x0,%eax
jl     12c7 <main+0x1a7>
movsbl -0x19(%rbp),%eax
movsbl -0x1b(%rbp),%ecx
sub    %ecx,%eax
movsbl -0x1c(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x24(%rbp)
jmp    12ce <main+0x1ae>
movsbl -0x19(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
movsbl -0x1c(%rbp),%ecx
sub    %ecx,%eax
movslq %eax,%rcx
lea    0xd1f(%rip),%rax
movsbl (%rax,%rcx,1),%ecx
sub    $0x2d,%ecx
mov    $0x1,%al
cmp    $0x0,%ecx
mov    %al,-0x25(%rbp)
jne    1349 <main+0x229>
mov    -0x18(%rbp),%rax
lea    -0xd(%rbp),%rcx
cmp    %rcx,%rax
jne    132b <main+0x20b>
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x18(%rbp)
movb   $0x77,(%rax)
mov    $0x1,%al
test   $0x1,%al
mov    %al,-0x25(%rbp)
jne    132b <main+0x20b>
jmp    1349 <main+0x229>
mov    -0x1c(%rbp),%al
mov    -0x18(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %al,(%rcx)
cmp    $0x0,%al
setne  %al
xor    $0xff,%al
mov    %al,-0x25(%rbp)
mov    -0x25(%rbp),%al
test   $0x1,%al
jne    1359 <main+0x239>
jmp    13c8 <main+0x2a8>
jmp    135e <main+0x23e>
movsbl -0x19(%rbp),%eax
movsbl -0x1b(%rbp),%ecx
sub    %ecx,%eax
movsbl -0x1b(%rbp),%ecx
movsbl -0x1d(%rbp),%edx
add    %edx,%ecx
movsbl -0x19(%rbp),%edx
sub    %edx,%ecx
imul   %ecx,%eax
cmp    $0x0,%eax
jl     139c <main+0x27c>
movsbl -0x19(%rbp),%eax
movsbl -0x1b(%rbp),%ecx
sub    %ecx,%eax
movsbl -0x1c(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x2c(%rbp)
jmp    13a3 <main+0x283>
movsbl -0x19(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    %al,%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
mov    $0x0,%al
call   1040 <getchar@plt>
mov    %al,-0x19(%rbp)
jmp    122d <main+0x10d>
movsbl -0x1a(%rbp),%eax
cmp    $0x0,%eax
je     1425 <main+0x305>
movsbl -0x19(%rbp),%eax
movsbl -0x1c(%rbp),%ecx
sub    %ecx,%eax
movsbl -0x1c(%rbp),%ecx
movsbl -0x1d(%rbp),%edx
add    %edx,%ecx
movsbl -0x19(%rbp),%edx
sub    %edx,%ecx
imul   %ecx,%eax
cmp    $0x0,%eax
jl     1413 <main+0x2f3>
movsbl -0x19(%rbp),%eax
movsbl -0x1c(%rbp),%ecx
sub    %ecx,%eax
movsbl -0x1b(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x30(%rbp)
jmp    141a <main+0x2fa>
movsbl -0x19(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
mov    %eax,-0x34(%rbp)
jmp    142c <main+0x30c>
movsbl -0x19(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
mov    %al,-0x19(%rbp)
movsbl -0x19(%rbp),%eax
movsbl -0x1b(%rbp),%ecx
sub    %ecx,%eax
movsbl -0x1b(%rbp),%ecx
movsbl -0x1d(%rbp),%edx
add    %edx,%ecx
movsbl -0x19(%rbp),%edx
sub    %edx,%ecx
imul   %ecx,%eax
cmp    $0x0,%eax
setge  %al
and    $0x1,%al
movzbl %al,%eax
movsbl -0x19(%rbp),%ecx
movsbl -0x1c(%rbp),%edx
sub    %edx,%ecx
movsbl -0x1c(%rbp),%edx
movsbl -0x1d(%rbp),%esi
add    %esi,%edx
movsbl -0x19(%rbp),%esi
sub    %esi,%edx
imul   %edx,%ecx
cmp    $0x0,%ecx
setge  %cl
and    $0x1,%cl
movzbl %cl,%ecx
add    %ecx,%eax
cmp    $0x0,%eax
je     14ab <main+0x38b>
jmp    1493 <main+0x373>
movsbl -0x19(%rbp),%edi
call   1030 <putchar@plt>
mov    $0x0,%al
call   1040 <getchar@plt>
mov    %al,-0x19(%rbp)
jmp    1432 <main+0x312>
mov    -0x18(%rbp),%rax
movb   $0x0,(%rax)
lea    -0xd(%rbp),%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
cmpb   $0x0,(%rax)
je     14e8 <main+0x3c8>
jmp    14cc <main+0x3ac>
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x18(%rbp)
movsbl (%rax),%edi
call   1030 <putchar@plt>
jmp    14ba <main+0x39a>
jmp    14ed <main+0x3cd>
movsbl -0x19(%rbp),%ecx
add    $0x1,%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x35(%rbp)
je     1560 <main+0x440>
movsbl -0x19(%rbp),%eax
movsbl -0x1b(%rbp),%ecx
sub    %ecx,%eax
movsbl -0x1b(%rbp),%ecx
movsbl -0x1d(%rbp),%edx
add    %edx,%ecx
movsbl -0x19(%rbp),%edx
sub    %edx,%ecx
imul   %ecx,%eax
cmp    $0x0,%eax
setge  %al
and    $0x1,%al
movzbl %al,%eax
movsbl -0x19(%rbp),%ecx
movsbl -0x1c(%rbp),%edx
sub    %edx,%ecx
movsbl -0x1c(%rbp),%edx
movsbl -0x1d(%rbp),%esi
add    %esi,%edx
movsbl -0x19(%rbp),%esi
sub    %esi,%edx
imul   %edx,%ecx
cmp    $0x0,%ecx
setge  %cl
and    $0x1,%cl
movzbl %cl,%ecx
add    %ecx,%eax
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
mov    %al,-0x35(%rbp)
mov    -0x35(%rbp),%al
test   $0x1,%al
jne    1570 <main+0x450>
jmp    158d <main+0x46d>
jmp    1575 <main+0x455>
movsbl -0x19(%rbp),%edi
call   1030 <putchar@plt>
mov    $0x0,%al
call   1040 <getchar@plt>
mov    %al,-0x19(%rbp)
jmp    14ed <main+0x3cd>
jmp    11ea <main+0xca>
mov    -0x4(%rbp),%eax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
xor    %eax,%eax
call   1040 <getchar@plt>
cmp    $0xff,%al
je     1371 <main+0x251>
mov    %eax,%ebx
nop
movsbl %bl,%edi
lea    -0x41(%rdi),%eax
mov    $0x5b,%ecx
sub    %edi,%ecx
imul   %eax,%ecx
not    %ecx
shr    $0x1f,%ecx
lea    -0x61(%rdi),%eax
mov    $0x7b,%edx
sub    %edi,%edx
imul   %eax,%edx
sar    $0x1f,%edx
not    %edx
cmp    %edx,%ecx
jne    1182 <main+0x62>
call   1030 <putchar@plt>
xor    %eax,%eax
call   1040 <getchar@plt>
mov    %eax,%ebx
cmp    $0xff,%al
jne    1140 <main+0x20>
jmp    1371 <main+0x251>
lea    0x10(%rsp),%r14
lea    0xf(%rsp),%r15
mov    $0x104111,%r12d
movsbl %bl,%ecx
lea    -0x41(%rcx),%eax
mov    $0x5b,%ebp
sub    %ecx,%ebp
imul   %eax,%ebp
mov    %ebp,%edx
not    %edx
shr    $0x1f,%edx
lea    -0x61(%rcx),%esi
mov    $0x7b,%eax
sub    %ecx,%eax
imul   %esi,%eax
mov    %eax,%esi
sar    $0x1f,%esi
not    %esi
cmp    %esi,%edx
jne    11d0 <main+0xb0>
test   %eax,%eax
setns  %al
jmp    126e <main+0x14e>
nopl   0x0(%rax,%rax,1)
lea    0x20(%rcx),%edx
test   %ebp,%ebp
movzbl %dl,%edx
cmovs  %ecx,%edx
setns  %cl
add    $0x9f,%dl
movzbl %dl,%edx
bt     %rdx,%r12
jb     1261 <main+0x141>
mov    %r14,%rdx
nopl   (%rax)
mov    %rdx,%r13
movzbl %bl,%eax
add    $0x20,%bl
movzbl %bl,%edx
test   $0x1,%cl
cmove  %eax,%edx
mov    %dl,-0x1(%r13)
xor    %eax,%eax
call   1040 <getchar@plt>
mov    %eax,%ebx
movsbl %al,%edx
lea    -0x41(%rdx),%eax
mov    $0x5b,%ecx
sub    %edx,%ecx
imul   %eax,%ecx
mov    %ecx,%esi
not    %esi
shr    $0x1f,%esi
lea    -0x61(%rdx),%edi
mov    $0x7b,%eax
sub    %edx,%eax
imul   %edi,%eax
mov    %eax,%edi
sar    $0x1f,%edi
not    %edi
cmp    %edi,%esi
je     1264 <main+0x144>
lea    0x20(%rdx),%esi
test   %ecx,%ecx
setns  %cl
movzbl %sil,%esi
cmovs  %edx,%esi
add    $0x9f,%sil
movzbl %sil,%esi
lea    0x1(%r13),%rdx
bt     %rsi,%r12
jae    11f0 <main+0xd0>
jmp    1264 <main+0x144>
mov    %r15,%r13
test   %eax,%eax
setns  %al
cmp    %r15,%r13
jne    1276 <main+0x156>
movb   $0x77,0xf(%rsp)
mov    %r14,%r13
movb   $0x61,0x0(%r13)
lea    -0x20(%rbx),%ecx
movzbl %bl,%edx
movzbl %cl,%ecx
test   %al,%al
cmove  %edx,%ecx
test   %ebp,%ebp
cmovs  %edx,%ecx
movsbl %cl,%eax
lea    -0x41(%rax),%edx
mov    $0x5b,%esi
sub    %eax,%esi
imul   %edx,%esi
not    %esi
shr    $0x1f,%esi
mov    $0x7b,%edx
sub    %eax,%edx
add    $0xffffff9f,%eax
imul   %edx,%eax
sar    $0x1f,%eax
not    %eax
mov    %ecx,%ebx
cmp    %eax,%esi
je     12fc <main+0x1dc>
nopl   0x0(%rax,%rax,1)
movsbl %bl,%edi
call   1030 <putchar@plt>
xor    %eax,%eax
call   1040 <getchar@plt>
mov    %eax,%ebx
movsbl %al,%eax
lea    -0x41(%rax),%ecx
mov    $0x5b,%edx
sub    %eax,%edx
imul   %ecx,%edx
not    %edx
shr    $0x1f,%edx
mov    $0x7b,%ecx
sub    %eax,%ecx
add    $0xffffff9f,%eax
imul   %ecx,%eax
sar    $0x1f,%eax
not    %eax
cmp    %eax,%edx
jne    12c0 <main+0x1a0>
movb   $0x0,0x1(%r13)
mov    0xf(%rsp),%al
test   %al,%al
je     1324 <main+0x204>
mov    %r14,%rbp
nopl   0x0(%rax)
movsbl %al,%edi
call   1030 <putchar@plt>
movzbl 0x0(%rbp),%eax
add    $0x1,%rbp
test   %al,%al
jne    1310 <main+0x1f0>
cmp    $0xff,%bl
je     1371 <main+0x251>
nopl   0x0(%rax)
movsbl %bl,%edi
lea    -0x41(%rdi),%eax
mov    $0x5b,%ecx
sub    %edi,%ecx
imul   %eax,%ecx
not    %ecx
shr    $0x1f,%ecx
lea    -0x61(%rdi),%eax
mov    $0x7b,%edx
sub    %edi,%edx
imul   %eax,%edx
sar    $0x1f,%edx
not    %edx
cmp    %edx,%ecx
jne    1192 <main+0x72>
call   1030 <putchar@plt>
xor    %eax,%eax
call   1040 <getchar@plt>
mov    %eax,%ebx
cmp    $0xff,%al
jne    1330 <main+0x210>
xor    %eax,%eax
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [28 x i8] c"-Pig-Lat-inCOb-fusca-tion!!\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca [9 x i8]
%3 = alloca i8*
%4 = alloca i8
%5 = alloca i8
%6 = alloca i8
%7 = alloca i8
%8 = alloca i8
store i32 0, i32* %1
%9 = call signext i8 (...) @getchar()
store i8 %9, i8* %4
store i8 65, i8* %6
store i8 97, i8* %7
store i8 26, i8* %8
br label %10
10: ; preds = %54, %0
%11 = load i8, i8* %4
%12 = sext i8 %11 to i32
%13 = add nsw i32 %12, 1
%14 = icmp ne i32 %13, 0
br i1 %14, label %15, label %51
15: ; preds = %10
%16 = load i8, i8* %4
%17 = sext i8 %16 to i32
%18 = load i8, i8* %6
%19 = sext i8 %18 to i32
%20 = sub nsw i32 %17, %19
%21 = load i8, i8* %6
%22 = sext i8 %21 to i32
%23 = load i8, i8* %8
%24 = sext i8 %23 to i32
%25 = add nsw i32 %22, %24
%26 = load i8, i8* %4
%27 = sext i8 %26 to i32
%28 = sub nsw i32 %25, %27
%29 = mul nsw i32 %20, %28
%30 = icmp sge i32 %29, 0
%31 = zext i1 %30 to i32
%32 = load i8, i8* %4
%33 = sext i8 %32 to i32
%34 = load i8, i8* %7
%35 = sext i8 %34 to i32
%36 = sub nsw i32 %33, %35
%37 = load i8, i8* %7
%38 = sext i8 %37 to i32
%39 = load i8, i8* %8
%40 = sext i8 %39 to i32
%41 = add nsw i32 %38, %40
%42 = load i8, i8* %4
%43 = sext i8 %42 to i32
%44 = sub nsw i32 %41, %43
%45 = mul nsw i32 %36, %44
%46 = icmp sge i32 %45, 0
%47 = zext i1 %46 to i32
%48 = add nsw i32 %31, %47
%49 = icmp ne i32 %48, 0
%50 = xor i1 %49, true
br label %51
51: ; preds = %15, %10
%52 = phi i1 [ false, %10 ], [ %50, %15 ]
br i1 %52, label %53, label %58
53: ; preds = %51
br label %54
54: ; preds = %53
%55 = load i8, i8* %4
%56 = call i32 @putchar(i8 signext %55)
%57 = call signext i8 (...) @getchar()
store i8 %57, i8* %4
br label %10
58: ; preds = %51
br label %59
59: ; preds = %349, %58
%60 = load i8, i8* %4
%61 = sext i8 %60 to i32
%62 = add nsw i32 %61, 1
%63 = icmp ne i32 %62, 0
br i1 %63, label %64, label %350
64: ; preds = %59
%65 = getelementptr inbounds [9 x i8], [9 x i8]* %2, i64 0, i64 0
store i8* %65, i8** %3
%66 = load i8, i8* %4
%67 = sext i8 %66 to i32
%68 = load i8, i8* %6
%69 = sext i8 %68 to i32
%70 = sub nsw i32 %67, %69
%71 = load i8, i8* %6
%72 = sext i8 %71 to i32
%73 = load i8, i8* %8
%74 = sext i8 %73 to i32
%75 = add nsw i32 %72, %74
%76 = load i8, i8* %4
%77 = sext i8 %76 to i32
%78 = sub nsw i32 %75, %77
%79 = mul nsw i32 %70, %78
%80 = icmp sge i32 %79, 0
%81 = zext i1 %80 to i32
%82 = trunc i32 %81 to i8
store i8 %82, i8* %5
br label %83
83: ; preds = %201, %64
%84 = load i8, i8* %4
%85 = sext i8 %84 to i32
%86 = load i8, i8* %6
%87 = sext i8 %86 to i32
%88 = sub nsw i32 %85, %87
%89 = load i8, i8* %6
%90 = sext i8 %89 to i32
%91 = load i8, i8* %8
%92 = sext i8 %91 to i32
%93 = add nsw i32 %90, %92
%94 = load i8, i8* %4
%95 = sext i8 %94 to i32
%96 = sub nsw i32 %93, %95
%97 = mul nsw i32 %88, %96
%98 = icmp sge i32 %97, 0
%99 = zext i1 %98 to i32
%100 = load i8, i8* %4
%101 = sext i8 %100 to i32
%102 = load i8, i8* %7
%103 = sext i8 %102 to i32
%104 = sub nsw i32 %101, %103
%105 = load i8, i8* %7
%106 = sext i8 %105 to i32
%107 = load i8, i8* %8
%108 = sext i8 %107 to i32
%109 = add nsw i32 %106, %108
%110 = load i8, i8* %4
%111 = sext i8 %110 to i32
%112 = sub nsw i32 %109, %111
%113 = mul nsw i32 %104, %112
%114 = icmp sge i32 %113, 0
%115 = zext i1 %114 to i32
%116 = add nsw i32 %99, %115
%117 = icmp ne i32 %116, 0
br i1 %117, label %118, label %157
118: ; preds = %83
%119 = load i8, i8* %4
%120 = sext i8 %119 to i32
%121 = load i8, i8* %6
%122 = sext i8 %121 to i32
%123 = sub nsw i32 %120, %122
%124 = load i8, i8* %6
%125 = sext i8 %124 to i32
%126 = load i8, i8* %8
%127 = sext i8 %126 to i32
%128 = add nsw i32 %125, %127
%129 = load i8, i8* %4
%130 = sext i8 %129 to i32
%131 = sub nsw i32 %128, %130
%132 = mul nsw i32 %123, %131
%133 = icmp sge i32 %132, 0
br i1 %133, label %134, label %143
134: ; preds = %118
%135 = load i8, i8* %4
%136 = sext i8 %135 to i32
%137 = load i8, i8* %6
%138 = sext i8 %137 to i32
%139 = sub nsw i32 %136, %138
%140 = load i8, i8* %7
%141 = sext i8 %140 to i32
%142 = add nsw i32 %139, %141
br label %146
143: ; preds = %118
%144 = load i8, i8* %4
%145 = sext i8 %144 to i32
br label %146
146: ; preds = %143, %134
%147 = phi i32 [ %142, %134 ], [ %145, %143 ]
%148 = load i8, i8* %7
%149 = sext i8 %148 to i32
%150 = sub nsw i32 %147, %149
%151 = sext i32 %150 to i64
%152 = getelementptr inbounds [28 x i8], [28 x i8]* @.str, i64 0, i64 %151
%153 = load i8, i8* %152
%154 = sext i8 %153 to i32
%155 = sub nsw i32 %154, 45
%156 = icmp ne i32 %155, 0
br i1 %156, label %170, label %157
157: ; preds = %146, %83
%158 = load i8*, i8** %3
%159 = getelementptr inbounds [9 x i8], [9 x i8]* %2, i64 0, i64 0
%160 = icmp eq i8* %158, %159
br i1 %160, label %161, label %164
161: ; preds = %157
%162 = load i8*, i8** %3
%163 = getelementptr inbounds i8, i8* %162, i32 1
store i8* %163, i8** %3
store i8 119, i8* %162
br i1 true, label %164, label %170
164: ; preds = %161, %157
%165 = load i8, i8* %7
%166 = load i8*, i8** %3
%167 = getelementptr inbounds i8, i8* %166, i32 1
store i8* %167, i8** %3
store i8 %165, i8* %166
%168 = icmp ne i8 %165, 0
%169 = xor i1 %168, true
br label %170
170: ; preds = %164, %161, %146
%171 = phi i1 [ true, %161 ], [ true, %146 ], [ %169, %164 ]
br i1 %171, label %172, label %207
172: ; preds = %170
br label %173
173: ; preds = %172
%174 = load i8, i8* %4
%175 = sext i8 %174 to i32
%176 = load i8, i8* %6
%177 = sext i8 %176 to i32
%178 = sub nsw i32 %175, %177
%179 = load i8, i8* %6
%180 = sext i8 %179 to i32
%181 = load i8, i8* %8
%182 = sext i8 %181 to i32
%183 = add nsw i32 %180, %182
%184 = load i8, i8* %4
%185 = sext i8 %184 to i32
%186 = sub nsw i32 %183, %185
%187 = mul nsw i32 %178, %186
%188 = icmp sge i32 %187, 0
br i1 %188, label %189, label %198
189: ; preds = %173
%190 = load i8, i8* %4
%191 = sext i8 %190 to i32
%192 = load i8, i8* %6
%193 = sext i8 %192 to i32
%194 = sub nsw i32 %191, %193
%195 = load i8, i8* %7
%196 = sext i8 %195 to i32
%197 = add nsw i32 %194, %196
br label %201
198: ; preds = %173
%199 = load i8, i8* %4
%200 = sext i8 %199 to i32
br label %201
201: ; preds = %198, %189
%202 = phi i32 [ %197, %189 ], [ %200, %198 ]
%203 = trunc i32 %202 to i8
%204 = load i8*, i8** %3
%205 = getelementptr inbounds i8, i8* %204, i32 1
store i8* %205, i8** %3
store i8 %203, i8* %204
%206 = call signext i8 (...) @getchar()
store i8 %206, i8* %4
br label %83
207: ; preds = %170
%208 = load i8, i8* %5
%209 = sext i8 %208 to i32
%210 = icmp ne i32 %209, 0
br i1 %210, label %211, label %241
211: ; preds = %207
%212 = load i8, i8* %4
%213 = sext i8 %212 to i32
%214 = load i8, i8* %7
%215 = sext i8 %214 to i32
%216 = sub nsw i32 %213, %215
%217 = load i8, i8* %7
%218 = sext i8 %217 to i32
%219 = load i8, i8* %8
%220 = sext i8 %219 to i32
%221 = add nsw i32 %218, %220
%222 = load i8, i8* %4
%223 = sext i8 %222 to i32
%224 = sub nsw i32 %221, %223
%225 = mul nsw i32 %216, %224
%226 = icmp sge i32 %225, 0
br i1 %226, label %227, label %236
227: ; preds = %211
%228 = load i8, i8* %4
%229 = sext i8 %228 to i32
%230 = load i8, i8* %7
%231 = sext i8 %230 to i32
%232 = sub nsw i32 %229, %231
%233 = load i8, i8* %6
%234 = sext i8 %233 to i32
%235 = add nsw i32 %232, %234
br label %239
236: ; preds = %211
%237 = load i8, i8* %4
%238 = sext i8 %237 to i32
br label %239
239: ; preds = %236, %227
%240 = phi i32 [ %235, %227 ], [ %238, %236 ]
br label %244
241: ; preds = %207
%242 = load i8, i8* %4
%243 = sext i8 %242 to i32
br label %244
244: ; preds = %241, %239
%245 = phi i32 [ %240, %239 ], [ %243, %241 ]
%246 = trunc i32 %245 to i8
store i8 %246, i8* %4
br label %247
247: ; preds = %283, %244
%248 = load i8, i8* %4
%249 = sext i8 %248 to i32
%250 = load i8, i8* %6
%251 = sext i8 %250 to i32
%252 = sub nsw i32 %249, %251
%253 = load i8, i8* %6
%254 = sext i8 %253 to i32
%255 = load i8, i8* %8
%256 = sext i8 %255 to i32
%257 = add nsw i32 %254, %256
%258 = load i8, i8* %4
%259 = sext i8 %258 to i32
%260 = sub nsw i32 %257, %259
%261 = mul nsw i32 %252, %260
%262 = icmp sge i32 %261, 0
%263 = zext i1 %262 to i32
%264 = load i8, i8* %4
%265 = sext i8 %264 to i32
%266 = load i8, i8* %7
%267 = sext i8 %266 to i32
%268 = sub nsw i32 %265, %267
%269 = load i8, i8* %7
%270 = sext i8 %269 to i32
%271 = load i8, i8* %8
%272 = sext i8 %271 to i32
%273 = add nsw i32 %270, %272
%274 = load i8, i8* %4
%275 = sext i8 %274 to i32
%276 = sub nsw i32 %273, %275
%277 = mul nsw i32 %268, %276
%278 = icmp sge i32 %277, 0
%279 = zext i1 %278 to i32
%280 = add nsw i32 %263, %279
%281 = icmp ne i32 %280, 0
br i1 %281, label %282, label %287
282: ; preds = %247
br label %283
283: ; preds = %282
%284 = load i8, i8* %4
%285 = call i32 @putchar(i8 signext %284)
%286 = call signext i8 (...) @getchar()
store i8 %286, i8* %4
br label %247
287: ; preds = %247
%288 = load i8*, i8** %3
store i8 0, i8* %288
%289 = getelementptr inbounds [9 x i8], [9 x i8]* %2, i64 0, i64 0
store i8* %289, i8** %3
br label %290
290: ; preds = %295, %287
%291 = load i8*, i8** %3
%292 = load i8, i8* %291
%293 = icmp ne i8 %292, 0
br i1 %293, label %294, label %300
294: ; preds = %290
br label %295
295: ; preds = %294
%296 = load i8*, i8** %3
%297 = getelementptr inbounds i8, i8* %296, i32 1
store i8* %297, i8** %3
%298 = load i8, i8* %296
%299 = call i32 @putchar(i8 signext %298)
br label %290
300: ; preds = %290
br label %301
301: ; preds = %345, %300
%302 = load i8, i8* %4
%303 = sext i8 %302 to i32
%304 = add nsw i32 %303, 1
%305 = icmp ne i32 %304, 0
br i1 %305, label %306, label %342
306: ; preds = %301
%307 = load i8, i8* %4
%308 = sext i8 %307 to i32
%309 = load i8, i8* %6
%310 = sext i8 %309 to i32
%311 = sub nsw i32 %308, %310
%312 = load i8, i8* %6
%313 = sext i8 %312 to i32
%314 = load i8, i8* %8
%315 = sext i8 %314 to i32
%316 = add nsw i32 %313, %315
%317 = load i8, i8* %4
%318 = sext i8 %317 to i32
%319 = sub nsw i32 %316, %318
%320 = mul nsw i32 %311, %319
%321 = icmp sge i32 %320, 0
%322 = zext i1 %321 to i32
%323 = load i8, i8* %4
%324 = sext i8 %323 to i32
%325 = load i8, i8* %7
%326 = sext i8 %325 to i32
%327 = sub nsw i32 %324, %326
%328 = load i8, i8* %7
%329 = sext i8 %328 to i32
%330 = load i8, i8* %8
%331 = sext i8 %330 to i32
%332 = add nsw i32 %329, %331
%333 = load i8, i8* %4
%334 = sext i8 %333 to i32
%335 = sub nsw i32 %332, %334
%336 = mul nsw i32 %327, %335
%337 = icmp sge i32 %336, 0
%338 = zext i1 %337 to i32
%339 = add nsw i32 %322, %338
%340 = icmp ne i32 %339, 0
%341 = xor i1 %340, true
br label %342
342: ; preds = %306, %301
%343 = phi i1 [ false, %301 ], [ %341, %306 ]
br i1 %343, label %344, label %349
344: ; preds = %342
br label %345
345: ; preds = %344
%346 = load i8, i8* %4
%347 = call i32 @putchar(i8 signext %346)
%348 = call signext i8 (...) @getchar()
store i8 %348, i8* %4
br label %301
349: ; preds = %342
br label %59
350: ; preds = %59
%351 = load i32, i32* %1
ret i32 %351
}

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