#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 *calloc(unsigned long, int);
char *caesar_cipher(char *string, unsigned long len, int rot) {
  rot %= 26;
  if (rot < 0)
    rot += 26;
  char *result = calloc(len + 1, sizeof(char));
  unsigned long i;
  for (i = 0; i < len; i++) {
    char c = string[i];
    if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
      int r = c >= 'a' && c <= 'z' ? 'a' : 'A';
      c = r + (c - r + rot) % 26;
    }
    result[i] = c;
  }
  result[len] = 0;
  return result;
}


x86 assembly (clang, -O0):
<caesar_cipher>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    -0x14(%rbp),%eax
mov    $0x1a,%ecx
cltd
idiv   %ecx
mov    %edx,-0x14(%rbp)
cmpl   $0x0,-0x14(%rbp)
jge    1144 <caesar_cipher+0x34>
mov    -0x14(%rbp),%eax
add    $0x1a,%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%rdi
add    $0x1,%rdi
mov    $0x1,%esi
call   1030 <calloc@plt>
mov    %rax,-0x20(%rbp)
movq   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%rax
cmp    -0x10(%rbp),%rax
jae    1226 <caesar_cipher+0x116>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x29(%rbp)
movsbl -0x29(%rbp),%eax
cmp    $0x61,%eax
jl     1198 <caesar_cipher+0x88>
movsbl -0x29(%rbp),%eax
cmp    $0x7a,%eax
jle    11b2 <caesar_cipher+0xa2>
movsbl -0x29(%rbp),%eax
cmp    $0x41,%eax
jl     1207 <caesar_cipher+0xf7>
movsbl -0x29(%rbp),%eax
cmp    $0x5a,%eax
jg     1207 <caesar_cipher+0xf7>
movsbl -0x29(%rbp),%ecx
xor    %eax,%eax
cmp    $0x61,%ecx
mov    %al,-0x31(%rbp)
jl     11d1 <caesar_cipher+0xc1>
movsbl -0x29(%rbp),%eax
cmp    $0x7a,%eax
setle  %al
mov    %al,-0x31(%rbp)
mov    -0x31(%rbp),%dl
mov    $0x41,%eax
mov    $0x61,%ecx
test   $0x1,%dl
cmovne %ecx,%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
mov    %eax,-0x38(%rbp)
movsbl -0x29(%rbp),%eax
sub    -0x30(%rbp),%eax
add    -0x14(%rbp),%eax
mov    $0x1a,%ecx
cltd
idiv   %ecx
mov    -0x38(%rbp),%eax
add    %edx,%eax
mov    %al,-0x29(%rbp)
mov    -0x29(%rbp),%dl
mov    -0x20(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    1162 <caesar_cipher+0x52>
mov    -0x20(%rbp),%rax
mov    -0x10(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x20(%rbp),%rax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<caesar_cipher>:
push   %rbp
push   %r15
push   %r14
push   %rbx
sub    $0x28,%rsp
mov    %rsi,%r14
mov    %rdi,%rbx
movslq %edx,%rax
imul   $0x4ec4ec4f,%rax,%rcx
mov    %rcx,%rdx
shr    $0x3f,%rdx
sar    $0x23,%rcx
add    %edx,%ecx
lea    (%rcx,%rcx,4),%edx
lea    (%rdx,%rdx,4),%edx
add    %ecx,%edx
mov    %eax,%ecx
sub    %edx,%ecx
neg    %edx
test   %ecx,%ecx
lea    0x1a(%rax,%rdx,1),%r15d
cmovns %ecx,%r15d
lea    0x1(%rsi),%rdi
mov    $0x1,%esi
call   1030 <calloc@plt>
test   %r14,%r14
je     1712 <caesar_cipher+0x602>
cmp    $0x8,%r14
jae    1174 <caesar_cipher+0x64>
xor    %ecx,%ecx
jmp    1768 <caesar_cipher+0x658>
lea    (%rbx,%r14,1),%rcx
cmp    %rcx,%rax
jae    118f <caesar_cipher+0x7f>
mov    %rax,%rcx
add    %r14,%rcx
cmp    %rbx,%rcx
jbe    118f <caesar_cipher+0x7f>
xor    %ecx,%ecx
jmp    1768 <caesar_cipher+0x658>
movd   %r15d,%xmm0
cmp    $0x10,%r14
jae    11a1 <caesar_cipher+0x91>
xor    %ecx,%ecx
jmp    1519 <caesar_cipher+0x409>
mov    %r14,%rcx
and    $0xfffffffffffffff0,%rcx
movdqa %xmm0,(%rsp)
pshufd $0x0,%xmm0,%xmm0
movdqa %xmm0,0x10(%rsp)
xor    %edx,%edx
movdqa 0xeae(%rip),%xmm2
movdqa 0xeb5(%rip),%xmm14
movdqa 0xe8d(%rip),%xmm3
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movdqu (%rbx,%rdx,1),%xmm5
punpcklbw %xmm5,%xmm0
punpcklwd %xmm0,%xmm6
psrad  $0x18,%xmm6
punpckhwd %xmm0,%xmm7
psrad  $0x18,%xmm7
punpckhbw %xmm5,%xmm4
punpcklwd %xmm4,%xmm0
psrad  $0x18,%xmm0
punpckhwd %xmm4,%xmm8
psrad  $0x18,%xmm8
movdqa %xmm5,%xmm4
paddb  0xde1(%rip),%xmm4
movdqa %xmm4,%xmm15
pmaxub 0xde3(%rip),%xmm15
pcmpeqb %xmm4,%xmm15
movdqa %xmm4,%xmm1
pminub 0xde2(%rip),%xmm1
pcmpeqb %xmm4,%xmm1
punpcklbw %xmm1,%xmm4
punpcklwd %xmm4,%xmm10
psrad  $0x18,%xmm10
punpckhwd %xmm4,%xmm11
psrad  $0x18,%xmm11
punpckhbw %xmm1,%xmm1
punpcklwd %xmm1,%xmm12
psrad  $0x18,%xmm12
punpckhwd %xmm1,%xmm13
psrad  $0x18,%xmm13
movdqa %xmm5,%xmm1
paddb  0xdae(%rip),%xmm1
movdqa %xmm1,%xmm9
pminub 0xdb0(%rip),%xmm9
pcmpeqb %xmm1,%xmm9
pand   %xmm15,%xmm9
movdqa %xmm13,%xmm1
movdqa 0xda9(%rip),%xmm4
pandn  %xmm4,%xmm1
pand   %xmm3,%xmm13
por    %xmm1,%xmm13
movdqa %xmm12,%xmm1
pandn  %xmm4,%xmm1
pand   %xmm3,%xmm12
por    %xmm1,%xmm12
movdqa %xmm11,%xmm1
pandn  %xmm4,%xmm1
pand   %xmm3,%xmm11
por    %xmm1,%xmm11
movdqa %xmm10,%xmm1
pandn  %xmm4,%xmm1
pand   %xmm3,%xmm10
por    %xmm1,%xmm10
movdqa 0x10(%rsp),%xmm1
paddd  %xmm1,%xmm8
paddd  %xmm1,%xmm0
paddd  %xmm1,%xmm7
paddd  %xmm1,%xmm6
psubd  %xmm10,%xmm6
psubd  %xmm11,%xmm7
psubd  %xmm12,%xmm0
psubd  %xmm13,%xmm8
movdqa %xmm8,%xmm1
pmuludq %xmm2,%xmm1
pshufd $0xed,%xmm1,%xmm1
pshufd $0xf5,%xmm8,%xmm4
pmuludq %xmm2,%xmm4
pshufd $0xed,%xmm4,%xmm4
punpckldq %xmm4,%xmm1
pxor   %xmm4,%xmm4
pcmpgtd %xmm8,%xmm4
pand   %xmm2,%xmm4
psubd  %xmm4,%xmm1
movdqa %xmm1,%xmm4
psrld  $0x1f,%xmm4
psrad  $0x3,%xmm1
paddd  %xmm4,%xmm1
pshufd $0xf5,%xmm1,%xmm4
pmuludq %xmm14,%xmm1
pshufd $0xe8,%xmm1,%xmm1
pmuludq %xmm14,%xmm4
pshufd $0xe8,%xmm4,%xmm4
punpckldq %xmm4,%xmm1
psubd  %xmm1,%xmm8
movdqa %xmm0,%xmm1
pmuludq %xmm2,%xmm1
pshufd $0xed,%xmm1,%xmm1
pshufd $0xf5,%xmm0,%xmm4
pmuludq %xmm2,%xmm4
pshufd $0xed,%xmm4,%xmm4
punpckldq %xmm4,%xmm1
pxor   %xmm4,%xmm4
pcmpgtd %xmm0,%xmm4
pand   %xmm2,%xmm4
psubd  %xmm4,%xmm1
movdqa %xmm1,%xmm4
psrld  $0x1f,%xmm4
psrad  $0x3,%xmm1
paddd  %xmm4,%xmm1
pshufd $0xf5,%xmm1,%xmm4
pmuludq %xmm14,%xmm1
pshufd $0xe8,%xmm1,%xmm1
pmuludq %xmm14,%xmm4
pshufd $0xe8,%xmm4,%xmm4
punpckldq %xmm4,%xmm1
psubd  %xmm1,%xmm0
movdqa %xmm7,%xmm1
pmuludq %xmm2,%xmm1
pshufd $0xed,%xmm1,%xmm1
pshufd $0xf5,%xmm7,%xmm4
pmuludq %xmm2,%xmm4
pshufd $0xed,%xmm4,%xmm4
punpckldq %xmm4,%xmm1
pxor   %xmm4,%xmm4
pcmpgtd %xmm7,%xmm4
pand   %xmm2,%xmm4
psubd  %xmm4,%xmm1
movdqa %xmm1,%xmm4
psrld  $0x1f,%xmm4
psrad  $0x3,%xmm1
paddd  %xmm4,%xmm1
pshufd $0xf5,%xmm1,%xmm4
pmuludq %xmm14,%xmm1
pshufd $0xe8,%xmm1,%xmm1
pmuludq %xmm14,%xmm4
pshufd $0xe8,%xmm4,%xmm4
punpckldq %xmm4,%xmm1
psubd  %xmm1,%xmm7
movdqa %xmm6,%xmm1
pmuludq %xmm2,%xmm1
pshufd $0xed,%xmm1,%xmm1
pshufd $0xf5,%xmm6,%xmm4
pmuludq %xmm2,%xmm4
pshufd $0xed,%xmm4,%xmm4
punpckldq %xmm4,%xmm1
pxor   %xmm4,%xmm4
pcmpgtd %xmm6,%xmm4
pand   %xmm2,%xmm4
psubd  %xmm4,%xmm1
movdqa %xmm1,%xmm4
psrld  $0x1f,%xmm4
psrad  $0x3,%xmm1
paddd  %xmm4,%xmm1
pshufd $0xf5,%xmm1,%xmm4
pmuludq %xmm14,%xmm1
pshufd $0xe8,%xmm1,%xmm1
pmuludq %xmm14,%xmm4
pshufd $0xe8,%xmm4,%xmm4
punpckldq %xmm4,%xmm1
psubd  %xmm1,%xmm6
paddd  %xmm10,%xmm6
paddd  %xmm11,%xmm7
paddd  %xmm12,%xmm0
paddd  %xmm13,%xmm8
movdqa 0xbcf(%rip),%xmm1
pand   %xmm1,%xmm8
pand   %xmm1,%xmm0
packuswb %xmm8,%xmm0
pand   %xmm1,%xmm7
pand   %xmm1,%xmm6
packuswb %xmm7,%xmm6
packuswb %xmm0,%xmm6
pand   %xmm9,%xmm5
pandn  %xmm6,%xmm9
por    %xmm5,%xmm9
movdqu %xmm9,(%rax,%rdx,1)
add    $0x10,%rdx
cmp    %rdx,%rcx
jne    11e0 <caesar_cipher+0xd0>
cmp    %r14,%rcx
movdqa (%rsp),%xmm0
je     1712 <caesar_cipher+0x602>
test   $0x8,%r14b
je     1768 <caesar_cipher+0x658>
mov    %rcx,%rdx
mov    %r14,%rcx
and    $0xfffffffffffffff8,%rcx
pshufd $0x0,%xmm0,%xmm10
movdqa 0xb9e(%rip),%xmm12
movdqa 0xb15(%rip),%xmm13
movdqa 0xb1c(%rip),%xmm14
movdqa 0xb24(%rip),%xmm1
movdqa 0xb2b(%rip),%xmm11
movdqa 0xb32(%rip),%xmm15
xchg   %ax,%ax
movq   (%rbx,%rdx,1),%xmm4
punpcklbw %xmm4,%xmm3
punpcklwd %xmm3,%xmm5
psrad  $0x18,%xmm5
punpckhwd %xmm3,%xmm6
psrad  $0x18,%xmm6
movdqa %xmm4,%xmm7
paddb  0xb19(%rip),%xmm7
movdqa %xmm7,%xmm3
pmaxub 0xb1d(%rip),%xmm3
pcmpeqb %xmm7,%xmm3
movdqa %xmm4,%xmm7
paddb  0xb1d(%rip),%xmm7
movdqa %xmm7,%xmm8
pmaxub %xmm12,%xmm8
pcmpeqb %xmm7,%xmm8
pandn  %xmm3,%xmm8
pxor   0xb21(%rip),%xmm3
punpcklbw %xmm3,%xmm3
punpcklwd %xmm3,%xmm7
psrad  $0x18,%xmm7
punpckhwd %xmm3,%xmm3
psrad  $0x18,%xmm3
movdqa %xmm3,%xmm9
pandn  %xmm13,%xmm9
pand   %xmm14,%xmm3
por    %xmm9,%xmm3
movdqa %xmm7,%xmm0
pandn  %xmm13,%xmm0
pand   %xmm14,%xmm7
por    %xmm0,%xmm7
paddd  %xmm10,%xmm6
paddd  %xmm10,%xmm5
psubd  %xmm7,%xmm5
psubd  %xmm3,%xmm6
movdqa %xmm6,%xmm0
pmuludq %xmm1,%xmm0
pshufd $0xed,%xmm0,%xmm0
pshufd $0xf5,%xmm6,%xmm2
pmuludq %xmm1,%xmm2
pshufd $0xed,%xmm2,%xmm2
punpckldq %xmm2,%xmm0
pxor   %xmm2,%xmm2
pcmpgtd %xmm6,%xmm2
pand   %xmm1,%xmm2
psubd  %xmm2,%xmm0
movdqa %xmm0,%xmm2
psrld  $0x1f,%xmm2
psrad  $0x3,%xmm0
paddd  %xmm2,%xmm0
pshufd $0xf5,%xmm0,%xmm2
pmuludq %xmm11,%xmm0
pshufd $0xe8,%xmm0,%xmm0
pmuludq %xmm11,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm0
psubd  %xmm0,%xmm6
movdqa %xmm5,%xmm0
pmuludq %xmm1,%xmm0
pshufd $0xed,%xmm0,%xmm0
pshufd $0xf5,%xmm5,%xmm2
pmuludq %xmm1,%xmm2
pshufd $0xed,%xmm2,%xmm2
punpckldq %xmm2,%xmm0
pxor   %xmm2,%xmm2
pcmpgtd %xmm5,%xmm2
pand   %xmm1,%xmm2
psubd  %xmm2,%xmm0
movdqa %xmm0,%xmm2
psrld  $0x1f,%xmm2
psrad  $0x3,%xmm0
paddd  %xmm2,%xmm0
pshufd $0xf5,%xmm0,%xmm2
pmuludq %xmm11,%xmm0
pshufd $0xe8,%xmm0,%xmm0
pmuludq %xmm11,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm0
psubd  %xmm0,%xmm5
paddd  %xmm7,%xmm5
paddd  %xmm3,%xmm6
pand   %xmm15,%xmm6
pand   %xmm15,%xmm5
packuswb %xmm6,%xmm5
packuswb %xmm5,%xmm5
pand   %xmm8,%xmm4
pandn  %xmm5,%xmm8
por    %xmm4,%xmm8
movq   %xmm8,(%rax,%rdx,1)
add    $0x8,%rdx
cmp    %rdx,%rcx
jne    1560 <caesar_cipher+0x450>
cmp    %r14,%rcx
jne    1768 <caesar_cipher+0x658>
movb   $0x0,(%rax,%r14,1)
add    $0x28,%rsp
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movsbl %dl,%edx
add    %r15d,%edx
sub    %esi,%edx
movslq %edx,%rdx
imul   $0x4ec4ec4f,%rdx,%rdi
mov    %rdi,%rbp
shr    $0x3f,%rbp
sar    $0x23,%rdi
add    %ebp,%edi
lea    (%rdi,%rdi,4),%ebp
lea    0x0(%rbp,%rbp,4),%ebp
add    %edi,%ebp
sub    %ebp,%edx
add    %esi,%edx
mov    %dl,(%rax,%rcx,1)
add    $0x1,%rcx
cmp    %rcx,%r14
je     1712 <caesar_cipher+0x602>
movzbl (%rbx,%rcx,1),%edx
lea    -0x61(%rdx),%edi
mov    $0x61,%esi
cmp    $0x1a,%dil
jb     1730 <caesar_cipher+0x620>
lea    -0x41(%rdx),%edi
mov    $0x41,%esi
cmp    $0x19,%dil
jbe    1730 <caesar_cipher+0x620>
jmp    175c <caesar_cipher+0x64c>

LLVM IR (-O0):
define i8* @caesar_cipher(i8* %0, i64 %1, i32 %2) {
%4 = alloca i8*
%5 = alloca i64
%6 = alloca i32
%7 = alloca i8*
%8 = alloca i64
%9 = alloca i8
%10 = alloca i32
store i8* %0, i8** %4
store i64 %1, i64* %5
store i32 %2, i32* %6
%11 = load i32, i32* %6
%12 = srem i32 %11, 26
store i32 %12, i32* %6
%13 = load i32, i32* %6
%14 = icmp slt i32 %13, 0
br i1 %14, label %15, label %18
15: ; preds = %3
%16 = load i32, i32* %6
%17 = add nsw i32 %16, 26
store i32 %17, i32* %6
br label %18
18: ; preds = %15, %3
%19 = load i64, i64* %5
%20 = add i64 %19, 1
%21 = call i8* @calloc(i64 %20, i32 1)
store i8* %21, i8** %7
store i64 0, i64* %8
br label %22
22: ; preds = %73, %18
%23 = load i64, i64* %8
%24 = load i64, i64* %5
%25 = icmp ult i64 %23, %24
br i1 %25, label %26, label %76
26: ; preds = %22
%27 = load i8*, i8** %4
%28 = load i64, i64* %8
%29 = getelementptr inbounds i8, i8* %27, i64 %28
%30 = load i8, i8* %29
store i8 %30, i8* %9
%31 = load i8, i8* %9
%32 = sext i8 %31 to i32
%33 = icmp sge i32 %32, 97
br i1 %33, label %34, label %38
34: ; preds = %26
%35 = load i8, i8* %9
%36 = sext i8 %35 to i32
%37 = icmp sle i32 %36, 122
br i1 %37, label %46, label %38
38: ; preds = %34, %26
%39 = load i8, i8* %9
%40 = sext i8 %39 to i32
%41 = icmp sge i32 %40, 65
br i1 %41, label %42, label %68
42: ; preds = %38
%43 = load i8, i8* %9
%44 = sext i8 %43 to i32
%45 = icmp sle i32 %44, 90
br i1 %45, label %46, label %68
46: ; preds = %42, %34
%47 = load i8, i8* %9
%48 = sext i8 %47 to i32
%49 = icmp sge i32 %48, 97
br i1 %49, label %50, label %54
50: ; preds = %46
%51 = load i8, i8* %9
%52 = sext i8 %51 to i32
%53 = icmp sle i32 %52, 122
br label %54
54: ; preds = %50, %46
%55 = phi i1 [ false, %46 ], [ %53, %50 ]
%56 = zext i1 %55 to i64
%57 = select i1 %55, i32 97, i32 65
store i32 %57, i32* %10
%58 = load i32, i32* %10
%59 = load i8, i8* %9
%60 = sext i8 %59 to i32
%61 = load i32, i32* %10
%62 = sub nsw i32 %60, %61
%63 = load i32, i32* %6
%64 = add nsw i32 %62, %63
%65 = srem i32 %64, 26
%66 = add nsw i32 %58, %65
%67 = trunc i32 %66 to i8
store i8 %67, i8* %9
br label %68
68: ; preds = %54, %42, %38
%69 = load i8, i8* %9
%70 = load i8*, i8** %7
%71 = load i64, i64* %8
%72 = getelementptr inbounds i8, i8* %70, i64 %71
store i8 %69, i8* %72
br label %73
73: ; preds = %68
%74 = load i64, i64* %8
%75 = add i64 %74, 1
store i64 %75, i64* %8
br label %22
76: ; preds = %22
%77 = load i8*, i8** %7
%78 = load i64, i64* %5
%79 = getelementptr inbounds i8, i8* %77, i64 %78
store i8 0, i8* %79
%80 = load i8*, i8** %7
ret i8* %80
}

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