#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 str2lowcase(char *str, char *out, int buf_len) {
  int len = strlen(str);
  int a = 0;
  if (len >= buf_len) {
    printf("buf is to low\n");
    return;
  }
  for (; a < len; a++) {
    if (str[a] >= 'A' && str[a] <= 'Z') {
      out[a] = str[a] + 32;
    } else {
      out[a] = str[a];
    }
  }
}


x86 assembly (clang, -O0):
<str2lowcase>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    -0x8(%rbp),%rdi
call   1030 <strlen@plt>
mov    %eax,-0x18(%rbp)
movl   $0x0,-0x1c(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0x14(%rbp),%eax
jl     1163 <str2lowcase+0x43>
lea    0xea7(%rip),%rdi
call   1040 <printf@plt>
jmp    11e8 <str2lowcase+0xc8>
jmp    1168 <str2lowcase+0x48>
mov    -0x1c(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    11e8 <str2lowcase+0xc8>
mov    -0x8(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x41,%eax
jl     11bf <str2lowcase+0x9f>
mov    -0x8(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x5a,%eax
jg     11bf <str2lowcase+0x9f>
mov    -0x8(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
add    $0x20,%eax
mov    %al,%dl
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
jmp    11d5 <str2lowcase+0xb5>
mov    -0x8(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
jmp    11da <str2lowcase+0xba>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1168 <str2lowcase+0x48>
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<str2lowcase>:
push   %rbp
push   %r14
push   %rbx
mov    %edx,%ebp
mov    %rsi,%r14
mov    %rdi,%rbx
call   1040 <strlen@plt>
cmp    %ebp,%eax
jge    11e2 <str2lowcase+0xc2>
test   %eax,%eax
jle    11dd <str2lowcase+0xbd>
mov    %eax,%ecx
cmp    $0x8,%eax
jb     1162 <str2lowcase+0x42>
lea    (%rbx,%rcx,1),%rdx
cmp    %r14,%rdx
jbe    11f2 <str2lowcase+0xd2>
lea    (%r14,%rcx,1),%rdx
cmp    %rbx,%rdx
jbe    11f2 <str2lowcase+0xd2>
xor    %eax,%eax
mov    %rax,%rdx
not    %rdx
test   $0x1,%cl
je     118c <str2lowcase+0x6c>
movzbl (%rbx,%rax,1),%esi
lea    -0x41(%rsi),%edi
lea    0x20(%rsi),%ebp
cmp    $0x1a,%dil
movzbl %bpl,%edi
cmovae %esi,%edi
mov    %dil,(%r14,%rax,1)
or     $0x1,%rax
add    %rcx,%rdx
je     11dd <str2lowcase+0xbd>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movzbl (%rbx,%rax,1),%edx
lea    -0x41(%rdx),%esi
lea    0x20(%rdx),%edi
cmp    $0x1a,%sil
movzbl %dil,%esi
cmovae %edx,%esi
mov    %sil,(%r14,%rax,1)
movzbl 0x1(%rbx,%rax,1),%edx
lea    -0x41(%rdx),%esi
lea    0x20(%rdx),%edi
cmp    $0x1a,%sil
movzbl %dil,%esi
cmovae %edx,%esi
mov    %sil,0x1(%r14,%rax,1)
add    $0x2,%rax
cmp    %rax,%rcx
jne    11a0 <str2lowcase+0x80>
pop    %rbx
pop    %r14
pop    %rbp
ret
lea    0xe77(%rip),%rdi
pop    %rbx
pop    %r14
pop    %rbp
jmp    1030 <puts@plt>
cmp    $0x20,%eax
jae    11fe <str2lowcase+0xde>
xor    %eax,%eax
jmp    13b0 <str2lowcase+0x290>
mov    %ecx,%eax
and    $0xffffffe0,%eax
lea    -0x20(%rax),%rdx
mov    %rdx,%rsi
shr    $0x5,%rsi
add    $0x1,%rsi
test   %rdx,%rdx
je     1322 <str2lowcase+0x202>
mov    %rsi,%rdi
and    $0xfffffffffffffffe,%rdi
xor    %edx,%edx
movdqa 0xdd4(%rip),%xmm0
movdqa 0xddc(%rip),%xmm1
movdqa 0xde4(%rip),%xmm2
nopl   0x0(%rax)
movdqu (%rbx,%rdx,1),%xmm3
movdqu 0x10(%rbx,%rdx,1),%xmm4
movdqa %xmm3,%xmm5
paddb  %xmm0,%xmm5
movdqa %xmm4,%xmm6
paddb  %xmm0,%xmm6
movdqa %xmm5,%xmm7
pminub %xmm1,%xmm7
pcmpeqb %xmm5,%xmm7
movdqa %xmm6,%xmm5
pminub %xmm1,%xmm5
pcmpeqb %xmm6,%xmm5
movdqa %xmm7,%xmm6
pandn  %xmm3,%xmm6
paddb  %xmm2,%xmm3
pand   %xmm7,%xmm3
por    %xmm6,%xmm3
movdqa %xmm5,%xmm6
pandn  %xmm4,%xmm6
paddb  %xmm2,%xmm4
pand   %xmm5,%xmm4
por    %xmm6,%xmm4
movdqu %xmm3,(%r14,%rdx,1)
movdqu %xmm4,0x10(%r14,%rdx,1)
movdqu 0x20(%rbx,%rdx,1),%xmm3
movdqu 0x30(%rbx,%rdx,1),%xmm4
movdqa %xmm3,%xmm5
paddb  %xmm0,%xmm5
movdqa %xmm4,%xmm6
paddb  %xmm0,%xmm6
movdqa %xmm5,%xmm7
pminub %xmm1,%xmm7
pcmpeqb %xmm5,%xmm7
movdqa %xmm6,%xmm5
pminub %xmm1,%xmm5
pcmpeqb %xmm6,%xmm5
movdqa %xmm7,%xmm6
pandn  %xmm3,%xmm6
paddb  %xmm2,%xmm3
pand   %xmm7,%xmm3
por    %xmm6,%xmm3
movdqa %xmm5,%xmm6
pandn  %xmm4,%xmm6
paddb  %xmm2,%xmm4
pand   %xmm5,%xmm4
por    %xmm6,%xmm4
movdqu %xmm3,0x20(%r14,%rdx,1)
movdqu %xmm4,0x30(%r14,%rdx,1)
add    $0x40,%rdx
add    $0xfffffffffffffffe,%rdi
jne    1240 <str2lowcase+0x120>
jmp    1324 <str2lowcase+0x204>
xor    %edx,%edx
test   $0x1,%sil
je     139e <str2lowcase+0x27e>
movdqu (%rbx,%rdx,1),%xmm0
movdqu 0x10(%rbx,%rdx,1),%xmm1
movdqa 0xcc3(%rip),%xmm2
movdqa %xmm0,%xmm3
paddb  %xmm2,%xmm3
paddb  %xmm1,%xmm2
movdqa 0xcbf(%rip),%xmm4
movdqa %xmm3,%xmm5
pminub %xmm4,%xmm5
pcmpeqb %xmm3,%xmm5
pminub %xmm2,%xmm4
pcmpeqb %xmm2,%xmm4
movdqa 0xcb3(%rip),%xmm2
movdqa %xmm5,%xmm3
pandn  %xmm0,%xmm3
paddb  %xmm2,%xmm0
paddb  %xmm1,%xmm2
pand   %xmm5,%xmm0
por    %xmm3,%xmm0
pand   %xmm4,%xmm2
pandn  %xmm1,%xmm4
por    %xmm2,%xmm4
movdqu %xmm0,(%r14,%rdx,1)
movdqu %xmm4,0x10(%r14,%rdx,1)
cmp    %rcx,%rax
je     11dd <str2lowcase+0xbd>
test   $0x18,%cl
je     1164 <str2lowcase+0x44>
mov    %rax,%rdx
mov    %ecx,%eax
and    $0xfffffff8,%eax
movdqa 0xc70(%rip),%xmm0
movdqa 0xc78(%rip),%xmm1
movdqa 0xc80(%rip),%xmm2
movq   (%rbx,%rdx,1),%xmm3
movdqa %xmm3,%xmm4
paddb  %xmm0,%xmm4
movdqa %xmm4,%xmm5
pmaxub %xmm1,%xmm5
pcmpeqb %xmm4,%xmm5
movdqa %xmm5,%xmm4
pand   %xmm3,%xmm4
paddb  %xmm2,%xmm3
pandn  %xmm3,%xmm5
por    %xmm4,%xmm5
movq   %xmm5,(%r14,%rdx,1)
add    $0x8,%rdx
cmp    %rdx,%rax
jne    13d0 <str2lowcase+0x2b0>
cmp    %rcx,%rax
je     11dd <str2lowcase+0xbd>
jmp    1164 <str2lowcase+0x44>

LLVM IR (-O0):
@.str = [15 x i8] c"buf is to low\0A\00"
define void @str2lowcase(i8* %0, i8* %1, i32 %2) {
%4 = alloca i8*
%5 = alloca i8*
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
store i8* %0, i8** %4
store i8* %1, i8** %5
store i32 %2, i32* %6
%9 = load i8*, i8** %4
%10 = call i32 @strlen(i8* %9)
store i32 %10, i32* %7
store i32 0, i32* %8
%11 = load i32, i32* %7
%12 = load i32, i32* %6
%13 = icmp sge i32 %11, %12
br i1 %13, label %14, label %16
14: ; preds = %3
%15 = call i32 @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str, i64 0, i64 0))
br label %64
16: ; preds = %3
br label %17
17: ; preds = %61, %16
%18 = load i32, i32* %8
%19 = load i32, i32* %7
%20 = icmp slt i32 %18, %19
br i1 %20, label %21, label %64
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
%27 = sext i8 %26 to i32
%28 = icmp sge i32 %27, 65
br i1 %28, label %29, label %50
29: ; preds = %21
%30 = load i8*, i8** %4
%31 = load i32, i32* %8
%32 = sext i32 %31 to i64
%33 = getelementptr inbounds i8, i8* %30, i64 %32
%34 = load i8, i8* %33
%35 = sext i8 %34 to i32
%36 = icmp sle i32 %35, 90
br i1 %36, label %37, label %50
37: ; preds = %29
%38 = load i8*, i8** %4
%39 = load i32, i32* %8
%40 = sext i32 %39 to i64
%41 = getelementptr inbounds i8, i8* %38, i64 %40
%42 = load i8, i8* %41
%43 = sext i8 %42 to i32
%44 = add nsw i32 %43, 32
%45 = trunc i32 %44 to i8
%46 = load i8*, i8** %5
%47 = load i32, i32* %8
%48 = sext i32 %47 to i64
%49 = getelementptr inbounds i8, i8* %46, i64 %48
store i8 %45, i8* %49
br label %60
50: ; preds = %29, %21
%51 = load i8*, i8** %4
%52 = load i32, i32* %8
%53 = sext i32 %52 to i64
%54 = getelementptr inbounds i8, i8* %51, i64 %53
%55 = load i8, i8* %54
%56 = load i8*, i8** %5
%57 = load i32, i32* %8
%58 = sext i32 %57 to i64
%59 = getelementptr inbounds i8, i8* %56, i64 %58
store i8 %55, i8* %59
br label %60
60: ; preds = %50, %37
br label %61
61: ; preds = %60
%62 = load i32, i32* %8
%63 = add nsw i32 %62, 1
store i32 %63, i32* %8
br label %17
64: ; preds = %14, %17
ret void
}

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