#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 strLen(char *);
void ShiftByAmount(char *str, int amount) {
  int i, len = strLen(str);
  for (i = 0; i < len; i++)
    str[i] = (str[i] - 'a' + amount) % 26 + 'a';
}


x86 assembly (clang, -O0):
<ShiftByAmount>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    -0x8(%rbp),%rdi
call   1030 <strLen@plt>
mov    %eax,-0x14(%rbp)
movl   $0x0,-0x10(%rbp)
mov    -0x10(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1174 <ShiftByAmount+0x64>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x61,%eax
add    -0xc(%rbp),%eax
mov    $0x1a,%ecx
cltd
idiv   %ecx
add    $0x61,%edx
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    1132 <ShiftByAmount+0x22>
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<ShiftByAmount>:
push   %rbp
push   %rbx
push   %rax
mov    %esi,%ebp
mov    %rdi,%rbx
call   1030 <strLen@plt>
test   %eax,%eax
jle    1946 <ShiftByAmount+0x836>
add    $0xffffff9f,%ebp
mov    %eax,%ecx
cmp    $0x8,%eax
jae    1136 <ShiftByAmount+0x26>
xor    %eax,%eax
jmp    1910 <ShiftByAmount+0x800>
movd   %ebp,%xmm8
cmp    $0x10,%eax
jae    1298 <ShiftByAmount+0x188>
xor    %eax,%eax
mov    %rax,%rdx
mov    %ecx,%eax
and    $0xfffffff8,%eax
pshufd $0x0,%xmm8,%xmm0
movdqa 0xea4(%rip),%xmm1
movdqa 0xeac(%rip),%xmm2
movdqa 0xeb4(%rip),%xmm3
movdqa 0xecb(%rip),%xmm8
cs nopw 0x0(%rax,%rax,1)
nop
movq   (%rbx,%rdx,1),%xmm5
punpcklbw %xmm5,%xmm6
punpcklwd %xmm6,%xmm5
psrad  $0x18,%xmm5
punpckhwd %xmm6,%xmm6
psrad  $0x18,%xmm6
paddd  %xmm0,%xmm6
paddd  %xmm0,%xmm5
movdqa %xmm5,%xmm7
pmuludq %xmm1,%xmm7
pshufd $0xed,%xmm7,%xmm7
pshufd $0xf5,%xmm5,%xmm4
pmuludq %xmm1,%xmm4
pshufd $0xed,%xmm4,%xmm4
punpckldq %xmm4,%xmm7
pxor   %xmm4,%xmm4
pcmpgtd %xmm5,%xmm4
pand   %xmm1,%xmm4
psubd  %xmm4,%xmm7
movdqa %xmm7,%xmm4
psrld  $0x1f,%xmm4
psrld  $0x3,%xmm7
paddd  %xmm4,%xmm7
pshufd $0xf5,%xmm7,%xmm4
pmuludq %xmm2,%xmm7
pshufd $0xe8,%xmm7,%xmm7
pmuludq %xmm2,%xmm4
pshufd $0xe8,%xmm4,%xmm4
punpckldq %xmm4,%xmm7
psubd  %xmm7,%xmm5
movdqa %xmm6,%xmm4
pmuludq %xmm1,%xmm4
pshufd $0xed,%xmm4,%xmm4
pshufd $0xf5,%xmm6,%xmm7
pmuludq %xmm1,%xmm7
pshufd $0xed,%xmm7,%xmm7
punpckldq %xmm7,%xmm4
pxor   %xmm7,%xmm7
pcmpgtd %xmm6,%xmm7
pand   %xmm1,%xmm7
psubd  %xmm7,%xmm4
movdqa %xmm4,%xmm7
psrld  $0x1f,%xmm7
psrld  $0x3,%xmm4
paddd  %xmm7,%xmm4
pshufd $0xf5,%xmm4,%xmm7
pmuludq %xmm2,%xmm4
pshufd $0xe8,%xmm4,%xmm4
pmuludq %xmm2,%xmm7
pshufd $0xe8,%xmm7,%xmm7
punpckldq %xmm7,%xmm4
psubd  %xmm4,%xmm6
pand   %xmm3,%xmm6
pand   %xmm3,%xmm5
packuswb %xmm6,%xmm5
packuswb %xmm5,%xmm5
paddb  %xmm8,%xmm5
movq   %xmm5,(%rbx,%rdx,1)
add    $0x8,%rdx
cmp    %rdx,%rax
jne    1180 <ShiftByAmount+0x70>
cmp    %rcx,%rax
jne    1910 <ShiftByAmount+0x800>
jmp    1946 <ShiftByAmount+0x836>
mov    %ecx,%eax
and    $0xfffffff0,%eax
pshufd $0x0,%xmm8,%xmm12
lea    -0x10(%rax),%rdx
mov    %rdx,%rsi
shr    $0x4,%rsi
add    $0x1,%rsi
test   %rdx,%rdx
je     194d <ShiftByAmount+0x83d>
mov    %rsi,%rdi
and    $0xfffffffffffffffe,%rdi
xor    %edx,%edx
movdqa 0xd34(%rip),%xmm2
movdqa 0xd3c(%rip),%xmm3
movdqa 0xd43(%rip),%xmm10
movdqa 0xd4a(%rip),%xmm9
cs nopw 0x0(%rax,%rax,1)
movdqu (%rbx,%rdx,1),%xmm4
movdqu 0x10(%rbx,%rdx,1),%xmm11
punpcklbw %xmm4,%xmm0
punpcklwd %xmm0,%xmm6
psrad  $0x18,%xmm6
punpckhwd %xmm0,%xmm0
psrad  $0x18,%xmm0
punpckhbw %xmm4,%xmm4
punpcklwd %xmm4,%xmm5
psrad  $0x18,%xmm5
punpckhwd %xmm4,%xmm4
psrad  $0x18,%xmm4
paddd  %xmm12,%xmm4
paddd  %xmm12,%xmm5
paddd  %xmm12,%xmm0
paddd  %xmm12,%xmm6
movdqa %xmm6,%xmm7
pmuludq %xmm2,%xmm7
pshufd $0xed,%xmm7,%xmm7
pshufd $0xf5,%xmm6,%xmm1
pmuludq %xmm2,%xmm1
pshufd $0xed,%xmm1,%xmm1
punpckldq %xmm1,%xmm7
pxor   %xmm1,%xmm1
pcmpgtd %xmm6,%xmm1
pand   %xmm2,%xmm1
psubd  %xmm1,%xmm7
movdqa %xmm7,%xmm1
psrld  $0x1f,%xmm1
psrld  $0x3,%xmm7
paddd  %xmm1,%xmm7
pshufd $0xf5,%xmm7,%xmm1
pmuludq %xmm3,%xmm7
pshufd $0xe8,%xmm7,%xmm7
pmuludq %xmm3,%xmm1
pshufd $0xe8,%xmm1,%xmm1
punpckldq %xmm1,%xmm7
psubd  %xmm7,%xmm6
movdqa %xmm0,%xmm1
pmuludq %xmm2,%xmm1
pshufd $0xed,%xmm1,%xmm1
pshufd $0xf5,%xmm0,%xmm7
pmuludq %xmm2,%xmm7
pshufd $0xed,%xmm7,%xmm7
punpckldq %xmm7,%xmm1
pxor   %xmm7,%xmm7
pcmpgtd %xmm0,%xmm7
pand   %xmm2,%xmm7
psubd  %xmm7,%xmm1
movdqa %xmm1,%xmm7
psrld  $0x1f,%xmm7
psrld  $0x3,%xmm1
paddd  %xmm7,%xmm1
pshufd $0xf5,%xmm1,%xmm7
pmuludq %xmm3,%xmm1
pshufd $0xe8,%xmm1,%xmm1
pmuludq %xmm3,%xmm7
pshufd $0xe8,%xmm7,%xmm7
punpckldq %xmm7,%xmm1
psubd  %xmm1,%xmm0
movdqa %xmm5,%xmm1
pmuludq %xmm2,%xmm1
pshufd $0xed,%xmm1,%xmm1
pshufd $0xf5,%xmm5,%xmm7
pmuludq %xmm2,%xmm7
pshufd $0xed,%xmm7,%xmm7
punpckldq %xmm7,%xmm1
pxor   %xmm7,%xmm7
pcmpgtd %xmm5,%xmm7
pand   %xmm2,%xmm7
psubd  %xmm7,%xmm1
movdqa %xmm1,%xmm7
psrld  $0x1f,%xmm7
psrld  $0x3,%xmm1
paddd  %xmm7,%xmm1
pshufd $0xf5,%xmm1,%xmm7
pmuludq %xmm3,%xmm1
pshufd $0xe8,%xmm1,%xmm1
pmuludq %xmm3,%xmm7
pshufd $0xe8,%xmm7,%xmm7
punpckldq %xmm7,%xmm1
psubd  %xmm1,%xmm5
movdqa %xmm4,%xmm1
pmuludq %xmm2,%xmm1
pshufd $0xed,%xmm1,%xmm1
pshufd $0xf5,%xmm4,%xmm7
pmuludq %xmm2,%xmm7
pshufd $0xed,%xmm7,%xmm7
punpckldq %xmm7,%xmm1
pxor   %xmm7,%xmm7
pcmpgtd %xmm4,%xmm7
pand   %xmm2,%xmm7
psubd  %xmm7,%xmm1
movdqa %xmm1,%xmm7
psrld  $0x1f,%xmm7
psrld  $0x3,%xmm1
paddd  %xmm7,%xmm1
pshufd $0xf5,%xmm1,%xmm7
pmuludq %xmm3,%xmm1
pshufd $0xe8,%xmm1,%xmm1
pmuludq %xmm3,%xmm7
pshufd $0xe8,%xmm7,%xmm7
punpckldq %xmm7,%xmm1
psubd  %xmm1,%xmm4
pand   %xmm10,%xmm4
pand   %xmm10,%xmm5
packuswb %xmm4,%xmm5
pand   %xmm10,%xmm0
pand   %xmm10,%xmm6
packuswb %xmm0,%xmm6
packuswb %xmm5,%xmm6
paddb  %xmm9,%xmm6
movdqu %xmm6,(%rbx,%rdx,1)
punpcklbw %xmm11,%xmm0
punpcklwd %xmm0,%xmm7
psrad  $0x18,%xmm7
punpckhwd %xmm0,%xmm0
psrad  $0x18,%xmm0
punpckhbw %xmm11,%xmm1
punpcklwd %xmm1,%xmm5
psrad  $0x18,%xmm5
punpckhwd %xmm1,%xmm4
psrad  $0x18,%xmm4
paddd  %xmm12,%xmm4
paddd  %xmm12,%xmm5
paddd  %xmm12,%xmm0
paddd  %xmm12,%xmm7
movdqa %xmm7,%xmm1
pmuludq %xmm2,%xmm1
pshufd $0xed,%xmm1,%xmm1
pshufd $0xf5,%xmm7,%xmm6
pmuludq %xmm2,%xmm6
pshufd $0xed,%xmm6,%xmm6
punpckldq %xmm6,%xmm1
pxor   %xmm6,%xmm6
pcmpgtd %xmm7,%xmm6
pand   %xmm2,%xmm6
psubd  %xmm6,%xmm1
movdqa %xmm1,%xmm6
psrld  $0x1f,%xmm6
psrld  $0x3,%xmm1
paddd  %xmm6,%xmm1
pshufd $0xf5,%xmm1,%xmm6
pmuludq %xmm3,%xmm1
pshufd $0xe8,%xmm1,%xmm1
pmuludq %xmm3,%xmm6
pshufd $0xe8,%xmm6,%xmm6
punpckldq %xmm6,%xmm1
psubd  %xmm1,%xmm7
movdqa %xmm0,%xmm1
pmuludq %xmm2,%xmm1
pshufd $0xed,%xmm1,%xmm1
pshufd $0xf5,%xmm0,%xmm6
pmuludq %xmm2,%xmm6
pshufd $0xed,%xmm6,%xmm6
punpckldq %xmm6,%xmm1
pxor   %xmm6,%xmm6
pcmpgtd %xmm0,%xmm6
pand   %xmm2,%xmm6
psubd  %xmm6,%xmm1
movdqa %xmm1,%xmm6
psrld  $0x1f,%xmm6
psrld  $0x3,%xmm1
paddd  %xmm6,%xmm1
pshufd $0xf5,%xmm1,%xmm6
pmuludq %xmm3,%xmm1
pshufd $0xe8,%xmm1,%xmm1
pmuludq %xmm3,%xmm6
pshufd $0xe8,%xmm6,%xmm6
punpckldq %xmm6,%xmm1
psubd  %xmm1,%xmm0
movdqa %xmm5,%xmm1
pmuludq %xmm2,%xmm1
pshufd $0xed,%xmm1,%xmm1
pshufd $0xf5,%xmm5,%xmm6
pmuludq %xmm2,%xmm6
pshufd $0xed,%xmm6,%xmm6
punpckldq %xmm6,%xmm1
pxor   %xmm6,%xmm6
pcmpgtd %xmm5,%xmm6
pand   %xmm2,%xmm6
psubd  %xmm6,%xmm1
movdqa %xmm1,%xmm6
psrld  $0x1f,%xmm6
psrld  $0x3,%xmm1
paddd  %xmm6,%xmm1
pshufd $0xf5,%xmm1,%xmm6
pmuludq %xmm3,%xmm1
pshufd $0xe8,%xmm1,%xmm1
pmuludq %xmm3,%xmm6
pshufd $0xe8,%xmm6,%xmm6
punpckldq %xmm6,%xmm1
psubd  %xmm1,%xmm5
movdqa %xmm4,%xmm1
pmuludq %xmm2,%xmm1
pshufd $0xed,%xmm1,%xmm1
pshufd $0xf5,%xmm4,%xmm6
pmuludq %xmm2,%xmm6
pshufd $0xed,%xmm6,%xmm6
punpckldq %xmm6,%xmm1
pxor   %xmm6,%xmm6
pcmpgtd %xmm4,%xmm6
pand   %xmm2,%xmm6
psubd  %xmm6,%xmm1
movdqa %xmm1,%xmm6
psrld  $0x1f,%xmm6
psrld  $0x3,%xmm1
paddd  %xmm6,%xmm1
pshufd $0xf5,%xmm1,%xmm6
pmuludq %xmm3,%xmm1
pshufd $0xe8,%xmm1,%xmm1
pmuludq %xmm3,%xmm6
pshufd $0xe8,%xmm6,%xmm6
punpckldq %xmm6,%xmm1
psubd  %xmm1,%xmm4
pand   %xmm10,%xmm4
pand   %xmm10,%xmm5
packuswb %xmm4,%xmm5
pand   %xmm10,%xmm0
pand   %xmm10,%xmm7
packuswb %xmm0,%xmm7
packuswb %xmm5,%xmm7
paddb  %xmm9,%xmm7
movdqu %xmm7,0x10(%rbx,%rdx,1)
add    $0x20,%rdx
add    $0xfffffffffffffffe,%rdi
jne    12f0 <ShiftByAmount+0x1e0>
test   $0x1,%sil
je     18fa <ShiftByAmount+0x7ea>
movdqu (%rbx,%rdx,1),%xmm0
punpcklbw %xmm0,%xmm1
punpcklwd %xmm1,%xmm2
psrad  $0x18,%xmm2
punpckhwd %xmm1,%xmm3
psrad  $0x18,%xmm3
punpckhbw %xmm0,%xmm0
punpcklwd %xmm0,%xmm4
psrad  $0x18,%xmm4
punpckhwd %xmm0,%xmm0
psrad  $0x18,%xmm0
paddd  %xmm12,%xmm0
paddd  %xmm12,%xmm4
paddd  %xmm12,%xmm3
paddd  %xmm12,%xmm2
movdqa 0x8c8(%rip),%xmm1
movdqa %xmm2,%xmm5
pmuludq %xmm1,%xmm5
pshufd $0xed,%xmm5,%xmm7
pshufd $0xf5,%xmm2,%xmm5
pmuludq %xmm1,%xmm5
pshufd $0xed,%xmm5,%xmm5
punpckldq %xmm5,%xmm7
pxor   %xmm5,%xmm5
pxor   %xmm6,%xmm6
pcmpgtd %xmm2,%xmm6
pand   %xmm1,%xmm6
psubd  %xmm6,%xmm7
movdqa %xmm7,%xmm6
psrld  $0x1f,%xmm6
psrld  $0x3,%xmm7
paddd  %xmm6,%xmm7
movdqa 0x88a(%rip),%xmm9
pshufd $0xf5,%xmm7,%xmm6
pmuludq %xmm9,%xmm7
pshufd $0xe8,%xmm7,%xmm7
pmuludq %xmm9,%xmm6
pshufd $0xe8,%xmm6,%xmm6
punpckldq %xmm6,%xmm7
psubd  %xmm7,%xmm2
movdqa %xmm3,%xmm6
pmuludq %xmm1,%xmm6
pshufd $0xed,%xmm6,%xmm6
pshufd $0xf5,%xmm3,%xmm7
pmuludq %xmm1,%xmm7
pshufd $0xed,%xmm7,%xmm7
punpckldq %xmm7,%xmm6
pxor   %xmm7,%xmm7
pcmpgtd %xmm3,%xmm7
pand   %xmm1,%xmm7
psubd  %xmm7,%xmm6
movdqa %xmm6,%xmm7
psrld  $0x1f,%xmm7
psrld  $0x3,%xmm6
paddd  %xmm7,%xmm6
pshufd $0xf5,%xmm6,%xmm7
pmuludq %xmm9,%xmm6
pshufd $0xe8,%xmm6,%xmm6
pmuludq %xmm9,%xmm7
pshufd $0xe8,%xmm7,%xmm7
punpckldq %xmm7,%xmm6
psubd  %xmm6,%xmm3
movdqa %xmm4,%xmm6
pmuludq %xmm1,%xmm6
pshufd $0xed,%xmm6,%xmm6
pshufd $0xf5,%xmm4,%xmm7
pmuludq %xmm1,%xmm7
pshufd $0xed,%xmm7,%xmm7
punpckldq %xmm7,%xmm6
pxor   %xmm7,%xmm7
pcmpgtd %xmm4,%xmm7
pand   %xmm1,%xmm7
psubd  %xmm7,%xmm6
movdqa %xmm6,%xmm7
psrld  $0x1f,%xmm7
psrld  $0x3,%xmm6
paddd  %xmm7,%xmm6
pshufd $0xf5,%xmm6,%xmm7
pmuludq %xmm9,%xmm6
pshufd $0xe8,%xmm6,%xmm6
pmuludq %xmm9,%xmm7
pshufd $0xe8,%xmm7,%xmm7
punpckldq %xmm7,%xmm6
psubd  %xmm6,%xmm4
movdqa %xmm0,%xmm6
pmuludq %xmm1,%xmm6
pshufd $0xed,%xmm6,%xmm6
pshufd $0xf5,%xmm0,%xmm7
pmuludq %xmm1,%xmm7
pshufd $0xed,%xmm7,%xmm7
punpckldq %xmm7,%xmm6
pcmpgtd %xmm0,%xmm5
pand   %xmm1,%xmm5
psubd  %xmm5,%xmm6
movdqa %xmm6,%xmm1
psrld  $0x1f,%xmm1
psrld  $0x3,%xmm6
paddd  %xmm1,%xmm6
pshufd $0xf5,%xmm6,%xmm1
pmuludq %xmm9,%xmm6
pshufd $0xe8,%xmm6,%xmm5
pmuludq %xmm9,%xmm1
pshufd $0xe8,%xmm1,%xmm1
punpckldq %xmm1,%xmm5
psubd  %xmm5,%xmm0
movdqa 0x74f(%rip),%xmm1
pand   %xmm1,%xmm0
pand   %xmm1,%xmm4
packuswb %xmm0,%xmm4
pand   %xmm1,%xmm3
pand   %xmm1,%xmm2
packuswb %xmm3,%xmm2
packuswb %xmm4,%xmm2
paddb  0x73b(%rip),%xmm2
movdqu %xmm2,(%rbx,%rdx,1)
cmp    %rcx,%rax
je     1946 <ShiftByAmount+0x836>
test   $0x8,%cl
jne    1146 <ShiftByAmount+0x36>
nopl   0x0(%rax,%rax,1)
movsbl (%rbx,%rax,1),%edx
add    %ebp,%edx
movslq %edx,%rdx
imul   $0x4ec4ec4f,%rdx,%rsi
mov    %rsi,%rdi
shr    $0x3f,%rdi
sar    $0x23,%rsi
add    %edi,%esi
lea    (%rsi,%rsi,4),%edi
lea    (%rdi,%rdi,4),%edi
add    %esi,%edi
sub    %edi,%edx
add    $0x61,%dl
mov    %dl,(%rbx,%rax,1)
add    $0x1,%rax
cmp    %rax,%rcx
jne    1910 <ShiftByAmount+0x800>
add    $0x8,%rsp
pop    %rbx
pop    %rbp
ret
xor    %edx,%edx
test   $0x1,%sil
jne    16eb <ShiftByAmount+0x5db>
jmp    18fa <ShiftByAmount+0x7ea>

LLVM IR (-O0):
define void @ShiftByAmount(i8* %0, i32 %1) {
%3 = alloca i8*
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
store i8* %0, i8** %3
store i32 %1, i32* %4
%7 = load i8*, i8** %3
%8 = call i32 @strLen(i8* %7)
store i32 %8, i32* %6
store i32 0, i32* %5
br label %9
9: ; preds = %30, %2
%10 = load i32, i32* %5
%11 = load i32, i32* %6
%12 = icmp slt i32 %10, %11
br i1 %12, label %13, label %33
13: ; preds = %9
%14 = load i8*, i8** %3
%15 = load i32, i32* %5
%16 = sext i32 %15 to i64
%17 = getelementptr inbounds i8, i8* %14, i64 %16
%18 = load i8, i8* %17
%19 = sext i8 %18 to i32
%20 = sub nsw i32 %19, 97
%21 = load i32, i32* %4
%22 = add nsw i32 %20, %21
%23 = srem i32 %22, 26
%24 = add nsw i32 %23, 97
%25 = trunc i32 %24 to i8
%26 = load i8*, i8** %3
%27 = load i32, i32* %5
%28 = sext i32 %27 to i64
%29 = getelementptr inbounds i8, i8* %26, i64 %28
store i8 %25, i8* %29
br label %30
30: ; preds = %13
%31 = load i32, i32* %5
%32 = add nsw i32 %31, 1
store i32 %32, i32* %5
br label %9
33: ; preds = %9
ret void
}

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