#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*/ printf(char *, ...);
int strlen(char *);
void caesar(int key, char message[]) {
  int length = strlen(message);
  char translated[length];
  for (int t = 0; t < length; t++) {
    char c = message[t];
    if ((c >= 'A' && c <= 'Z')) {
      if (c + key > 'Z')
        translated[t] = c + key - 26;
      else
        translated[t] = c + key;
    } else if ((c >= 'a' && c <= 'z')) {
      if (c + key > 'z')
        translated[t] = c + key - 26;
      else
        translated[t] = c + key;
    } else {
      translated[t] = c;
    }
  }
  for (int t = 0; t < length; t++) {
    printf("%c", translated[t]);
  }
  printf("\n");
}


x86 assembly (clang, -O0):
<caesar>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    -0x10(%rbp),%rdi
call   1030 <strlen@plt>
mov    %eax,-0x14(%rbp)
mov    -0x14(%rbp),%eax
mov    %rsp,%rcx
mov    %rcx,-0x20(%rbp)
mov    %rax,%rdx
add    $0xf,%rdx
and    $0xfffffffffffffff0,%rdx
mov    %rsp,%rcx
sub    %rdx,%rcx
mov    %rcx,-0x40(%rbp)
mov    %rcx,%rsp
mov    %rax,-0x28(%rbp)
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1266 <caesar+0x146>
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x2d(%rbp)
movsbl -0x2d(%rbp),%eax
cmp    $0x41,%eax
jl     11e1 <caesar+0xc1>
movsbl -0x2d(%rbp),%eax
cmp    $0x5a,%eax
jg     11e1 <caesar+0xc1>
movsbl -0x2d(%rbp),%eax
add    -0x4(%rbp),%eax
cmp    $0x5a,%eax
jle    11c8 <caesar+0xa8>
mov    -0x40(%rbp),%rax
movsbl -0x2d(%rbp),%ecx
add    -0x4(%rbp),%ecx
sub    $0x1a,%ecx
mov    %cl,%dl
movslq -0x2c(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
jmp    11dc <caesar+0xbc>
mov    -0x40(%rbp),%rax
movsbl -0x2d(%rbp),%ecx
add    -0x4(%rbp),%ecx
mov    %cl,%dl
movslq -0x2c(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
jmp    1253 <caesar+0x133>
movsbl -0x2d(%rbp),%eax
cmp    $0x61,%eax
jl     1240 <caesar+0x120>
movsbl -0x2d(%rbp),%eax
cmp    $0x7a,%eax
jg     1240 <caesar+0x120>
movsbl -0x2d(%rbp),%eax
add    -0x4(%rbp),%eax
cmp    $0x7a,%eax
jle    1227 <caesar+0x107>
mov    -0x40(%rbp),%rax
movsbl -0x2d(%rbp),%ecx
add    -0x4(%rbp),%ecx
sub    $0x1a,%ecx
mov    %cl,%dl
movslq -0x2c(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
jmp    123b <caesar+0x11b>
mov    -0x40(%rbp),%rax
movsbl -0x2d(%rbp),%ecx
add    -0x4(%rbp),%ecx
mov    %cl,%dl
movslq -0x2c(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
jmp    124e <caesar+0x12e>
mov    -0x40(%rbp),%rax
mov    -0x2d(%rbp),%dl
movslq -0x2c(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
jmp    1253 <caesar+0x133>
jmp    1258 <caesar+0x138>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1168 <caesar+0x48>
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    12a1 <caesar+0x181>
mov    -0x40(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsbl (%rax,%rcx,1),%esi
lea    0xd74(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    126d <caesar+0x14d>
lea    0xd5b(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x20(%rbp),%rax
mov    %rax,%rsp
mov    %rbp,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<caesar>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
mov    %rsi,%r15
mov    %edi,%r14d
mov    %rsi,%rdi
call   1040 <strlen@plt>
mov    %eax,%r12d
mov    %rsp,%r13
lea    0xf(%r12),%rcx
and    $0xfffffffffffffff0,%rcx
sub    %rcx,%r13
mov    %r13,%rsp
test   %eax,%eax
jle    14a4 <caesar+0x384>
cmp    $0x8,%r12d
jae    1169 <caesar+0x49>
xor    %eax,%eax
jmp    14dd <caesar+0x3bd>
movd   %r14d,%xmm0
cmp    $0x10,%r12d
jae    117b <caesar+0x5b>
xor    %eax,%eax
jmp    1334 <caesar+0x214>
mov    %r12d,%eax
and    $0xfffffff0,%eax
movdqa %xmm0,-0x40(%rbp)
pshufd $0x0,%xmm0,%xmm14
xor    %ecx,%ecx
movdqa 0xed9(%rip),%xmm13
movdqa 0xe70(%rip),%xmm15
movdqu (%r15,%rcx,1),%xmm4
punpckhbw %xmm4,%xmm0
punpckhwd %xmm0,%xmm7
psrad  $0x18,%xmm7
punpcklwd %xmm0,%xmm3
psrad  $0x18,%xmm3
punpcklbw %xmm4,%xmm0
punpckhwd %xmm0,%xmm8
psrad  $0x18,%xmm8
punpcklwd %xmm0,%xmm5
psrad  $0x18,%xmm5
movdqa %xmm4,%xmm2
paddb  0xe20(%rip),%xmm2
movdqa %xmm2,%xmm0
pminub %xmm15,%xmm0
pcmpeqb %xmm2,%xmm0
movdqa %xmm2,%xmm6
pmaxub 0xe27(%rip),%xmm6
pcmpeqb %xmm2,%xmm6
paddd  %xmm14,%xmm5
paddd  %xmm14,%xmm8
paddd  %xmm14,%xmm3
paddd  %xmm14,%xmm7
movdqa %xmm7,%xmm9
movdqa %xmm7,%xmm2
movdqa 0xe2d(%rip),%xmm11
pand   %xmm11,%xmm2
movdqa %xmm3,%xmm1
pand   %xmm11,%xmm1
packuswb %xmm2,%xmm1
movdqa %xmm8,%xmm2
pand   %xmm11,%xmm2
movdqa %xmm5,%xmm10
pand   %xmm11,%xmm10
packuswb %xmm2,%xmm10
movdqa %xmm3,%xmm11
packuswb %xmm1,%xmm10
movdqa %xmm8,%xmm12
pcmpgtd %xmm13,%xmm7
pcmpgtd %xmm13,%xmm3
packssdw %xmm7,%xmm3
movdqa %xmm5,%xmm1
pcmpgtd %xmm13,%xmm8
pcmpgtd %xmm13,%xmm5
packssdw %xmm8,%xmm5
movdqa %xmm10,%xmm2
paddb  0xdd5(%rip),%xmm2
packsswb %xmm3,%xmm5
movdqa %xmm2,%xmm3
pand   %xmm5,%xmm2
pandn  %xmm10,%xmm5
por    %xmm2,%xmm5
pand   %xmm0,%xmm5
pandn  %xmm4,%xmm0
paddb  0xd80(%rip),%xmm4
movdqa %xmm4,%xmm2
pminub %xmm15,%xmm2
pcmpeqb %xmm4,%xmm2
pand   %xmm6,%xmm2
movdqa 0xd77(%rip),%xmm4
pcmpgtd %xmm4,%xmm9
pcmpgtd %xmm4,%xmm11
packssdw %xmm9,%xmm11
pcmpgtd %xmm4,%xmm12
pcmpgtd %xmm4,%xmm1
packssdw %xmm12,%xmm1
packsswb %xmm11,%xmm1
pand   %xmm1,%xmm3
pandn  %xmm10,%xmm1
por    %xmm3,%xmm1
por    %xmm5,%xmm0
pand   %xmm2,%xmm1
pandn  %xmm0,%xmm2
por    %xmm1,%xmm2
movdqa %xmm2,0x0(%r13,%rcx,1)
add    $0x10,%rcx
cmp    %rcx,%rax
jne    11a0 <caesar+0x80>
cmp    %r12,%rax
movdqa -0x40(%rbp),%xmm0
je     147c <caesar+0x35c>
test   $0x8,%r12b
je     14dd <caesar+0x3bd>
mov    %rax,%rcx
mov    %r12d,%eax
and    $0xfffffff8,%eax
pshufd $0x0,%xmm0,%xmm15
movdqa 0xd44(%rip),%xmm11
movdqa 0xd4b(%rip),%xmm9
movdqa 0xce2(%rip),%xmm12
movdqa 0xce9(%rip),%xmm13
movdqa 0xd40(%rip),%xmm10
movdqa 0xcf7(%rip),%xmm14
nopl   0x0(%rax)
movq   (%r15,%rcx,1),%xmm1
punpcklbw %xmm1,%xmm2
punpckhwd %xmm2,%xmm7
psrad  $0x18,%xmm7
punpcklwd %xmm2,%xmm2
psrad  $0x18,%xmm2
movdqa %xmm1,%xmm5
paddb  0xcd8(%rip),%xmm5
movdqa %xmm5,%xmm3
pmaxub %xmm11,%xmm3
pcmpeqb %xmm5,%xmm3
movdqa %xmm1,%xmm5
paddb  %xmm9,%xmm5
movdqa %xmm5,%xmm6
pmaxub %xmm11,%xmm6
pcmpeqb %xmm5,%xmm6
paddd  %xmm15,%xmm2
paddd  %xmm15,%xmm7
movdqa %xmm7,%xmm4
pcmpgtd %xmm12,%xmm4
movdqa %xmm2,%xmm5
pcmpgtd %xmm12,%xmm5
packssdw %xmm4,%xmm5
packsswb %xmm5,%xmm5
movdqa %xmm7,%xmm4
pand   %xmm13,%xmm4
movdqa %xmm2,%xmm0
pand   %xmm13,%xmm0
packuswb %xmm4,%xmm0
packuswb %xmm0,%xmm0
movdqa %xmm0,%xmm4
paddb  %xmm10,%xmm4
movdqa %xmm4,%xmm8
pand   %xmm5,%xmm8
pandn  %xmm0,%xmm5
por    %xmm8,%xmm5
pcmpgtd %xmm14,%xmm7
pcmpgtd %xmm14,%xmm2
packssdw %xmm7,%xmm2
packsswb %xmm2,%xmm2
pand   %xmm2,%xmm4
pandn  %xmm0,%xmm2
por    %xmm4,%xmm2
movdqa %xmm3,%xmm0
pandn  %xmm2,%xmm0
pandn  %xmm3,%xmm6
pand   %xmm1,%xmm3
por    %xmm0,%xmm3
pand   %xmm6,%xmm5
pandn  %xmm3,%xmm6
por    %xmm5,%xmm6
movq   %xmm6,0x0(%r13,%rcx,1)
add    $0x8,%rcx
cmp    %rcx,%rax
jne    1380 <caesar+0x260>
cmp    %r12,%rax
jne    14dd <caesar+0x3bd>
test   %r12d,%r12d
jle    14a4 <caesar+0x384>
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movsbl 0x0(%r13,%rbx,1),%edi
call   1030 <putchar@plt>
add    $0x1,%rbx
cmp    %rbx,%r12
jne    1490 <caesar+0x370>
mov    $0xa,%edi
lea    -0x28(%rbp),%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1030 <putchar@plt>
nopl   0x0(%rax)
add    %r14d,%ecx
lea    -0x1a(%rcx),%edx
cmp    $0x5b,%ecx
movzbl %dl,%edx
cmovl  %ecx,%edx
mov    %dl,0x0(%r13,%rax,1)
add    $0x1,%rax
cmp    %rax,%r12
je     147c <caesar+0x35c>
movzbl (%r15,%rax,1),%edx
movsbl %dl,%ecx
lea    -0x41(%rcx),%esi
cmp    $0x19,%sil
jbe    14c0 <caesar+0x3a0>
lea    -0x61(%rdx),%esi
cmp    $0x19,%sil
ja     14cf <caesar+0x3af>
add    %r14d,%ecx
lea    -0x1a(%rcx),%edx
cmp    $0x7b,%ecx
jmp    14c9 <caesar+0x3a9>

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

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