#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*/ fgets(char *, int, int /*<<< orphan*/);
int /*<<< orphan*/ printf(char *, char, int);
int /*<<< orphan*/ stdin;
int strlen(char *);
int main() {
  char s[1001], a = 'A';
  fgets(s, 1001, stdin);
  int l = strlen(s), i, j;
  while (a != 'Z') {
    for (i = 0; i < l; i++) {
      if (s[i] == a)
        s[i] += 32;
    }
    a++;
  }
  a = 'a';
  while (a != 'z') {
    j = 0;
    for (i = 0; i < l; i++) {
      if (s[i] == a)
        j++;
    }
    if (j != 0) {
      printf("\n%c - %d", a, j);
    }
    a++;
  }
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x400,%rsp
movl   $0x0,-0x4(%rbp)
movb   $0x41,-0x3f1(%rbp)
lea    -0x3f0(%rbp),%rdi
mov    0x2e91(%rip),%rax
mov    (%rax),%edx
mov    $0x3e9,%esi
call   1050 <fgets@plt>
lea    -0x3f0(%rbp),%rdi
call   1030 <strlen@plt>
mov    %eax,-0x3f8(%rbp)
movsbl -0x3f1(%rbp),%eax
cmp    $0x5a,%eax
je     1204 <main+0xd4>
movl   $0x0,-0x3fc(%rbp)
mov    -0x3fc(%rbp),%eax
cmp    -0x3f8(%rbp),%eax
jge    11f1 <main+0xc1>
movslq -0x3fc(%rbp),%rax
movsbl -0x3f0(%rbp,%rax,1),%eax
ff
movsbl -0x3f1(%rbp),%ecx
cmp    %ecx,%eax
jne    11d8 <main+0xa8>
movslq -0x3fc(%rbp),%rax
movsbl -0x3f0(%rbp,%rax,1),%ecx
ff
add    $0x20,%ecx
mov    %cl,-0x3f0(%rbp,%rax,1)
jmp    11dd <main+0xad>
mov    -0x3fc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3fc(%rbp)
jmp    118f <main+0x5f>
mov    -0x3f1(%rbp),%al
add    $0x1,%al
mov    %al,-0x3f1(%rbp)
jmp    1175 <main+0x45>
movb   $0x61,-0x3f1(%rbp)
movsbl -0x3f1(%rbp),%eax
cmp    $0x7a,%eax
je     12c2 <main+0x192>
movl   $0x0,-0x400(%rbp)
movl   $0x0,-0x3fc(%rbp)
mov    -0x3fc(%rbp),%eax
cmp    -0x3f8(%rbp),%eax
jge    1287 <main+0x157>
movslq -0x3fc(%rbp),%rax
movsbl -0x3f0(%rbp,%rax,1),%eax
ff
movsbl -0x3f1(%rbp),%ecx
cmp    %ecx,%eax
jne    126e <main+0x13e>
mov    -0x400(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x400(%rbp)
jmp    1273 <main+0x143>
mov    -0x3fc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3fc(%rbp)
jmp    122f <main+0xff>
cmpl   $0x0,-0x400(%rbp)
je     12af <main+0x17f>
mov    -0x3f1(%rbp),%al
mov    -0x400(%rbp),%edx
lea    0xd59(%rip),%rdi
movsbl %al,%esi
call   1040 <printf@plt>
mov    -0x3f1(%rbp),%al
add    $0x1,%al
mov    %al,-0x3f1(%rbp)
jmp    120b <main+0xdb>
xor    %eax,%eax
add    $0x400,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x3f8,%rsp
mov    0x2ea0(%rip),%rax
mov    (%rax),%edx
mov    %rsp,%rbx
mov    %rbx,%rdi
mov    $0x3e9,%esi
call   1050 <fgets@plt>
mov    %rbx,%rdi
call   1030 <strlen@plt>
mov    %eax,%ebx
mov    %ebx,%eax
and    $0xfffffff0,%eax
mov    $0x41,%cl
jmp    117c <main+0x4c>
nopl   (%rax)
add    $0x1,%cl
cmp    $0x5a,%cl
je     1337 <main+0x207>
test   %ebx,%ebx
jle    1170 <main+0x40>
lea    0x20(%rcx),%edx
cmp    $0x10,%ebx
jae    1190 <main+0x60>
xor    %esi,%esi
jmp    132d <main+0x1fd>
nop
movzbl %cl,%esi
movd   %esi,%xmm0
punpcklbw %xmm0,%xmm0
pshuflw $0x0,%xmm0,%xmm0
xor    %esi,%esi
jmp    11bd <main+0x8d>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    $0x10,%rsi
cmp    %rsi,%rax
je     1310 <main+0x1e0>
movq   (%rsp,%rsi,1),%xmm1
pcmpeqb %xmm0,%xmm1
movd   %xmm1,%edi
test   $0x1,%dil
je     11d3 <main+0xa3>
mov    %dl,(%rsp,%rsi,1)
movdqa %xmm1,%xmm2
pslld  $0x8,%xmm2
movd   %xmm2,%edi
shr    $0x10,%edi
test   $0x1,%dil
je     11ed <main+0xbd>
mov    %dl,0x1(%rsp,%rsi,1)
pextrw $0x1,%xmm1,%edi
test   $0x1,%dil
je     11fc <main+0xcc>
mov    %dl,0x2(%rsp,%rsi,1)
movdqa %xmm1,%xmm2
psllq  $0x18,%xmm2
pextrw $0x3,%xmm2,%edi
test   $0x1,%dil
je     1214 <main+0xe4>
mov    %dl,0x3(%rsp,%rsi,1)
pextrw $0x2,%xmm1,%edi
test   $0x1,%dil
je     1223 <main+0xf3>
mov    %dl,0x4(%rsp,%rsi,1)
movdqa %xmm1,%xmm2
pslldq $0x5,%xmm2
pextrw $0x5,%xmm2,%edi
test   $0x1,%dil
je     123b <main+0x10b>
mov    %dl,0x5(%rsp,%rsi,1)
pextrw $0x3,%xmm1,%edi
test   $0x1,%dil
je     124a <main+0x11a>
mov    %dl,0x6(%rsp,%rsi,1)
pslldq $0x7,%xmm1
pextrw $0x7,%xmm1,%edi
test   $0x1,%dil
je     125e <main+0x12e>
mov    %dl,0x7(%rsp,%rsi,1)
movq   0x8(%rsp,%rsi,1),%xmm1
pcmpeqb %xmm0,%xmm1
movd   %xmm1,%edi
test   $0x1,%dil
je     1276 <main+0x146>
mov    %dl,0x8(%rsp,%rsi,1)
movdqa %xmm1,%xmm2
pslld  $0x8,%xmm2
movd   %xmm2,%edi
shr    $0x10,%edi
test   $0x1,%dil
je     1290 <main+0x160>
mov    %dl,0x9(%rsp,%rsi,1)
pextrw $0x1,%xmm1,%edi
test   $0x1,%dil
je     129f <main+0x16f>
mov    %dl,0xa(%rsp,%rsi,1)
movdqa %xmm1,%xmm2
psllq  $0x18,%xmm2
pextrw $0x3,%xmm2,%edi
test   $0x1,%dil
je     12b7 <main+0x187>
mov    %dl,0xb(%rsp,%rsi,1)
pextrw $0x2,%xmm1,%edi
test   $0x1,%dil
je     12c6 <main+0x196>
mov    %dl,0xc(%rsp,%rsi,1)
movdqa %xmm1,%xmm2
pslldq $0x5,%xmm2
pextrw $0x5,%xmm2,%edi
test   $0x1,%dil
je     12de <main+0x1ae>
mov    %dl,0xd(%rsp,%rsi,1)
pextrw $0x3,%xmm1,%edi
test   $0x1,%dil
je     12ed <main+0x1bd>
mov    %dl,0xe(%rsp,%rsi,1)
pslldq $0x7,%xmm1
pextrw $0x7,%xmm1,%edi
test   $0x1,%dil
je     11b0 <main+0x80>
mov    %dl,0xf(%rsp,%rsi,1)
jmp    11b0 <main+0x80>
nopw   0x0(%rax,%rax,1)
mov    %rax,%rsi
cmp    %rbx,%rax
jne    132d <main+0x1fd>
jmp    1170 <main+0x40>
nopl   (%rax)
add    $0x1,%rsi
cmp    %rsi,%rbx
je     1170 <main+0x40>
cmp    %cl,(%rsp,%rsi,1)
jne    1320 <main+0x1f0>
mov    %dl,(%rsp,%rsi,1)
jmp    1320 <main+0x1f0>
mov    %ebx,%r15d
and    $0xfffffff8,%r15d
lea    -0x8(%r15),%r12
mov    %r12,%r13
shr    $0x3,%r13
add    $0x1,%r13
mov    %r13,%rbp
and    $0xfffffffffffffffe,%rbp
mov    $0x61,%r14b
movdqa 0xca1(%rip),%xmm5
jmp    137e <main+0x24e>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
add    $0x1,%r14b
cmp    $0x7a,%r14b
je     14db <main+0x3ab>
test   %ebx,%ebx
jle    1370 <main+0x240>
cmp    $0x8,%ebx
jae    1390 <main+0x260>
xor    %eax,%eax
xor    %edx,%edx
jmp    1490 <main+0x360>
movzbl %r14b,%eax
movd   %eax,%xmm0
punpcklbw %xmm0,%xmm0
pshuflw $0x0,%xmm0,%xmm1
pxor   %xmm0,%xmm0
test   %r12,%r12
je     14c9 <main+0x399>
mov    %rbp,%rcx
xor    %eax,%eax
pxor   %xmm2,%xmm2
nopw   0x0(%rax,%rax,1)
movd   0x4(%rsp,%rax,1),%xmm3
movdqa (%rsp,%rax,1),%xmm4
pcmpeqb %xmm1,%xmm4
punpcklbw %xmm4,%xmm4
punpcklwd %xmm4,%xmm4
pand   %xmm5,%xmm4
paddd  %xmm0,%xmm4
pcmpeqb %xmm1,%xmm3
punpcklbw %xmm3,%xmm3
punpcklwd %xmm3,%xmm3
pand   %xmm5,%xmm3
paddd  %xmm2,%xmm3
movq   0x8(%rsp,%rax,1),%xmm0
movd   0xc(%rsp,%rax,1),%xmm2
pcmpeqb %xmm1,%xmm0
punpcklbw %xmm0,%xmm0
punpcklwd %xmm0,%xmm0
pand   %xmm5,%xmm0
paddd  %xmm4,%xmm0
pcmpeqb %xmm1,%xmm2
punpcklbw %xmm2,%xmm2
punpcklwd %xmm2,%xmm2
pand   %xmm5,%xmm2
paddd  %xmm3,%xmm2
add    $0x10,%rax
add    $0xfffffffffffffffe,%rcx
jne    13c0 <main+0x290>
test   $0x1,%r13b
je     146a <main+0x33a>
movq   (%rsp,%rax,1),%xmm3
movd   0x4(%rsp,%rax,1),%xmm4
pcmpeqb %xmm1,%xmm3
punpcklbw %xmm3,%xmm3
punpcklwd %xmm3,%xmm3
pand   %xmm5,%xmm3
paddd  %xmm3,%xmm0
pcmpeqb %xmm1,%xmm4
punpcklbw %xmm4,%xmm4
punpcklwd %xmm4,%xmm4
pand   %xmm5,%xmm4
paddd  %xmm4,%xmm2
paddd  %xmm2,%xmm0
pshufd $0xee,%xmm0,%xmm1
paddd  %xmm0,%xmm1
pshufd $0x55,%xmm1,%xmm0
paddd  %xmm1,%xmm0
movd   %xmm0,%edx
mov    %r15,%rax
cmp    %rbx,%r15
je     14a4 <main+0x374>
nopl   0x0(%rax)
xor    %ecx,%ecx
cmp    %r14b,(%rsp,%rax,1)
sete   %cl
add    %ecx,%edx
add    $0x1,%rax
cmp    %rax,%rbx
jne    1490 <main+0x360>
test   %edx,%edx
je     1370 <main+0x240>
movsbl %r14b,%esi
lea    0xb59(%rip),%rdi
call   1040 <printf@plt>
movdqa 0xb3c(%rip),%xmm5
jmp    1370 <main+0x240>
xor    %eax,%eax
pxor   %xmm2,%xmm2
test   $0x1,%r13b
jne    1437 <main+0x307>
jmp    146a <main+0x33a>
xor    %eax,%eax
add    $0x3f8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@stdin = global i32 0
@.str = [9 x i8] c"\0A%c - %d\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca [1001 x i8]
%3 = alloca i8
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
store i32 0, i32* %1
store i8 65, i8* %3
%7 = getelementptr inbounds [1001 x i8], [1001 x i8]* %2, i64 0, i64 0
%8 = load i32, i32* @stdin
%9 = call i32 @fgets(i8* %7, i32 1001, i32 %8)
%10 = getelementptr inbounds [1001 x i8], [1001 x i8]* %2, i64 0, i64 0
%11 = call i32 @strlen(i8* %10)
store i32 %11, i32* %4
br label %12
12: ; preds = %42, %0
%13 = load i8, i8* %3
%14 = sext i8 %13 to i32
%15 = icmp ne i32 %14, 90
br i1 %15, label %16, label %45
16: ; preds = %12
store i32 0, i32* %5
br label %17
17: ; preds = %39, %16
%18 = load i32, i32* %5
%19 = load i32, i32* %4
%20 = icmp slt i32 %18, %19
br i1 %20, label %21, label %42
21: ; preds = %17
%22 = load i32, i32* %5
%23 = sext i32 %22 to i64
%24 = getelementptr inbounds [1001 x i8], [1001 x i8]* %2, i64 0, i64 %23
%25 = load i8, i8* %24
%26 = sext i8 %25 to i32
%27 = load i8, i8* %3
%28 = sext i8 %27 to i32
%29 = icmp eq i32 %26, %28
br i1 %29, label %30, label %38
30: ; preds = %21
%31 = load i32, i32* %5
%32 = sext i32 %31 to i64
%33 = getelementptr inbounds [1001 x i8], [1001 x i8]* %2, i64 0, i64 %32
%34 = load i8, i8* %33
%35 = sext i8 %34 to i32
%36 = add nsw i32 %35, 32
%37 = trunc i32 %36 to i8
store i8 %37, i8* %33
br label %38
38: ; preds = %30, %21
br label %39
39: ; preds = %38
%40 = load i32, i32* %5
%41 = add nsw i32 %40, 1
store i32 %41, i32* %5
br label %17
42: ; preds = %17
%43 = load i8, i8* %3
%44 = add i8 %43, 1
store i8 %44, i8* %3
br label %12
45: ; preds = %12
store i8 97, i8* %3
br label %46
46: ; preds = %78, %45
%47 = load i8, i8* %3
%48 = sext i8 %47 to i32
%49 = icmp ne i32 %48, 122
br i1 %49, label %50, label %81
50: ; preds = %46
store i32 0, i32* %6
store i32 0, i32* %5
br label %51
51: ; preds = %68, %50
%52 = load i32, i32* %5
%53 = load i32, i32* %4
%54 = icmp slt i32 %52, %53
br i1 %54, label %55, label %71
55: ; preds = %51
%56 = load i32, i32* %5
%57 = sext i32 %56 to i64
%58 = getelementptr inbounds [1001 x i8], [1001 x i8]* %2, i64 0, i64 %57
%59 = load i8, i8* %58
%60 = sext i8 %59 to i32
%61 = load i8, i8* %3
%62 = sext i8 %61 to i32
%63 = icmp eq i32 %60, %62
br i1 %63, label %64, label %67
64: ; preds = %55
%65 = load i32, i32* %6
%66 = add nsw i32 %65, 1
store i32 %66, i32* %6
br label %67
67: ; preds = %64, %55
br label %68
68: ; preds = %67
%69 = load i32, i32* %5
%70 = add nsw i32 %69, 1
store i32 %70, i32* %5
br label %51
71: ; preds = %51
%72 = load i32, i32* %6
%73 = icmp ne i32 %72, 0
br i1 %73, label %74, label %78
74: ; preds = %71
%75 = load i8, i8* %3
%76 = load i32, i32* %6
%77 = call i32 @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0), i8 signext %75, i32 %76)
br label %78
78: ; preds = %74, %71
%79 = load i8, i8* %3
%80 = add i8 %79, 1
store i8 %80, i8* %3
br label %46
81: ; preds = %46
ret i32 0
}

LLVM IR (-O2):
@stdin = global i32 0
@.str = [9 x i8] c"\0A%c - %d\00"
define i32 @main() {
%1 = alloca [1001 x i8]
%2 = getelementptr inbounds [1001 x i8], [1001 x i8]* %1, i64 0, i64 0
%3 = load i32, i32* @stdin
%4 = call i32 @fgets(i8* %2, i32 1001, i32 %3)
%5 = call i32 @strlen(i8* %2)
%6 = icmp sgt i32 %5, 0
%7 = zext i32 %5 to i64
%8 = icmp ult i32 %5, 16
%9 = and i64 %7, 4294967280
%10 = icmp eq i64 %9, %7
br label %11
11: ; preds = %0, %136
%12 = phi i8 [ 65, %0 ], [ %137, %136 ]
br i1 %6, label %13, label %136
13: ; preds = %11
%14 = add nuw i8 %12, 32
br i1 %8, label %112, label %15
15: ; preds = %13
%16 = insertelement <8 x i8> poison, i8 %12, i64 0
%17 = shufflevector <8 x i8> %16, <8 x i8> poison, <8 x i32> zeroinitializer
%18 = insertelement <8 x i8> poison, i8 %12, i64 0
%19 = shufflevector <8 x i8> %18, <8 x i8> poison, <8 x i32> zeroinitializer
br label %20
20: ; preds = %108, %15
%21 = phi i64 [ 0, %15 ], [ %109, %108 ]
%22 = or i64 %21, 8
%23 = getelementptr inbounds [1001 x i8], [1001 x i8]* %1, i64 0, i64 %21
%24 = bitcast i8* %23 to <8 x i8>*
%25 = load <8 x i8>, <8 x i8>* %24
%26 = getelementptr inbounds i8, i8* %23, i64 8
%27 = bitcast i8* %26 to <8 x i8>*
%28 = load <8 x i8>, <8 x i8>* %27
%29 = icmp eq <8 x i8> %25, %17
%30 = icmp eq <8 x i8> %28, %19
%31 = extractelement <8 x i1> %29, i64 0
br i1 %31, label %32, label %34
32: ; preds = %20
%33 = getelementptr inbounds [1001 x i8], [1001 x i8]* %1, i64 0, i64 %21
store i8 %14, i8* %33
br label %34
34: ; preds = %32, %20
%35 = extractelement <8 x i1> %29, i64 1
br i1 %35, label %36, label %39
36: ; preds = %34
%37 = or i64 %21, 1
%38 = getelementptr inbounds [1001 x i8], [1001 x i8]* %1, i64 0, i64 %37
store i8 %14, i8* %38
br label %39
39: ; preds = %36, %34
%40 = extractelement <8 x i1> %29, i64 2
br i1 %40, label %41, label %44
41: ; preds = %39
%42 = or i64 %21, 2
%43 = getelementptr inbounds [1001 x i8], [1001 x i8]* %1, i64 0, i64 %42
store i8 %14, i8* %43
br label %44
44: ; preds = %41, %39
%45 = extractelement <8 x i1> %29, i64 3
br i1 %45, label %46, label %49
46: ; preds = %44
%47 = or i64 %21, 3
%48 = getelementptr inbounds [1001 x i8], [1001 x i8]* %1, i64 0, i64 %47
store i8 %14, i8* %48
br label %49
49: ; preds = %46, %44
%50 = extractelement <8 x i1> %29, i64 4
br i1 %50, label %51, label %54
51: ; preds = %49
%52 = or i64 %21, 4
%53 = getelementptr inbounds [1001 x i8], [1001 x i8]* %1, i64 0, i64 %52
store i8 %14, i8* %53
br label %54
54: ; preds = %51, %49
%55 = extractelement <8 x i1> %29, i64 5
br i1 %55, label %56, label %59
56: ; preds = %54
%57 = or i64 %21, 5
%58 = getelementptr inbounds [1001 x i8], [1001 x i8]* %1, i64 0, i64 %57
store i8 %14, i8* %58
br label %59
59: ; preds = %56, %54
%60 = extractelement <8 x i1> %29, i64 6
br i1 %60, label %61, label %64
61: ; preds = %59
%62 = or i64 %21, 6
%63 = getelementptr inbounds [1001 x i8], [1001 x i8]* %1, i64 0, i64 %62
store i8 %14, i8* %63
br label %64
64: ; preds = %61, %59
%65 = extractelement <8 x i1> %29, i64 7
br i1 %65, label %66, label %69
66: ; preds = %64
%67 = or i64 %21, 7
%68 = getelementptr inbounds [1001 x i8], [1001 x i8]* %1, i64 0, i64 %67
store i8 %14, i8* %68
br label %69
69: ; preds = %66, %64
%70 = extractelement <8 x i1> %30, i64 0
br i1 %70, label %71, label %73
71: ; preds = %69
%72 = getelementptr inbounds [1001 x i8], [1001 x i8]* %1, i64 0, i64 %22
store i8 %14, i8* %72
br label %73
73: ; preds = %71, %69
%74 = extractelement <8 x i1> %30, i64 1
br i1 %74, label %75, label %78
75: ; preds = %73
%76 = or i64 %21, 9
%77 = getelementptr inbounds [1001 x i8], [1001 x i8]* %1, i64 0, i64 %76
store i8 %14, i8* %77
br label %78
78: ; preds = %75, %73
%79 = extractelement <8 x i1> %30, i64 2
br i1 %79, label %80, label %83
80: ; preds = %78
%81 = or i64 %21, 10
%82 = getelementptr inbounds [1001 x i8], [1001 x i8]* %1, i64 0, i64 %81
store i8 %14, i8* %82
br label %83
83: ; preds = %80, %78
%84 = extractelement <8 x i1> %30, i64 3
br i1 %84, label %85, label %88
85: ; preds = %83
%86 = or i64 %21, 11
%87 = getelementptr inbounds [1001 x i8], [1001 x i8]* %1, i64 0, i64 %86
store i8 %14, i8* %87
br label %88
88: ; preds = %85, %83
%89 = extractelement <8 x i1> %30, i64 4
br i1 %89, label %90, label %93
90: ; preds = %88
%91 = or i64 %21, 12
%92 = getelementptr inbounds [1001 x i8], [1001 x i8]* %1, i64 0, i64 %91
store i8 %14, i8* %92
br label %93
93: ; preds = %90, %88
%94 = extractelement <8 x i1> %30, i64 5
br i1 %94, label %95, label %98
95: ; preds = %93
%96 = or i64 %21, 13
%97 = getelementptr inbounds [1001 x i8], [1001 x i8]* %1, i64 0, i64 %96
store i8 %14, i8* %97
br label %98
98: ; preds = %95, %93
%99 = extractelement <8 x i1> %30, i64 6
br i1 %99, label %100, label %103
100: ; preds = %98
%101 = or i64 %21, 14
%102 = getelementptr inbounds [1001 x i8], [1001 x i8]* %1, i64 0, i64 %101
store i8 %14, i8* %102
br label %103
103: ; preds = %100, %98
%104 = extractelement <8 x i1> %30, i64 7
br i1 %104, label %105, label %108
105: ; preds = %103
%106 = or i64 %21, 15
%107 = getelementptr inbounds [1001 x i8], [1001 x i8]* %1, i64 0, i64 %106
store i8 %14, i8* %107
br label %108
108: ; preds = %105, %103
%109 = add nuw i64 %21, 16
%110 = icmp eq i64 %109, %9
br i1 %110, label %111, label %20
111: ; preds = %108
br i1 %10, label %136, label %112
112: ; preds = %13, %111
%113 = phi i64 [ 0, %13 ], [ %9, %111 ]
br label %127
114: ; preds = %136
%115 = zext i32 %5 to i64
%116 = and i64 %7, 4294967288
%117 = add nsw i64 %116, -8
%118 = lshr exact i64 %117, 3
%119 = add nuw nsw i64 %118, 1
%120 = icmp ult i32 %5, 8
%121 = and i64 %7, 4294967288
%122 = and i64 %119, 1
%123 = icmp eq i64 %117, 0
%124 = and i64 %119, 4611686018427387902
%125 = icmp eq i64 %122, 0
%126 = icmp eq i64 %121, %7
br label %139
127: ; preds = %112, %133
%128 = phi i64 [ %134, %133 ], [ %113, %112 ]
%129 = getelementptr inbounds [1001 x i8], [1001 x i8]* %1, i64 0, i64 %128
%130 = load i8, i8* %129
%131 = icmp eq i8 %130, %12
br i1 %131, label %132, label %133
132: ; preds = %127
store i8 %14, i8* %129
br label %133
133: ; preds = %127, %132
%134 = add nuw nsw i64 %128, 1
%135 = icmp eq i64 %134, %7
br i1 %135, label %136, label %127
136: ; preds = %133, %111, %11
%137 = add nuw nsw i8 %12, 1
%138 = icmp eq i8 %137, 90
br i1 %138, label %114, label %11
139: ; preds = %114, %222
%140 = phi i8 [ 97, %114 ], [ %223, %222 ]
br i1 %6, label %141, label %222
141: ; preds = %139
br i1 %120, label %204, label %142
142: ; preds = %141
%143 = insertelement <4 x i8> poison, i8 %140, i64 0
%144 = shufflevector <4 x i8> %143, <4 x i8> poison, <4 x i32> zeroinitializer
%145 = insertelement <4 x i8> poison, i8 %140, i64 0
%146 = shufflevector <4 x i8> %145, <4 x i8> poison, <4 x i32> zeroinitializer
br i1 %123, label %180, label %147
147: ; preds = %142, %147
%148 = phi i64 [ %177, %147 ], [ 0, %142 ]
%149 = phi <4 x i32> [ %175, %147 ], [ zeroinitializer, %142 ]
%150 = phi <4 x i32> [ %176, %147 ], [ zeroinitializer, %142 ]
%151 = phi i64 [ %178, %147 ], [ 0, %142 ]
%152 = getelementptr inbounds [1001 x i8], [1001 x i8]* %1, i64 0, i64 %148
%153 = bitcast i8* %152 to <4 x i8>*
%154 = load <4 x i8>, <4 x i8>* %153
%155 = getelementptr inbounds i8, i8* %152, i64 4
%156 = bitcast i8* %155 to <4 x i8>*
%157 = load <4 x i8>, <4 x i8>* %156
%158 = icmp eq <4 x i8> %154, %144
%159 = icmp eq <4 x i8> %157, %146
%160 = zext <4 x i1> %158 to <4 x i32>
%161 = zext <4 x i1> %159 to <4 x i32>
%162 = add <4 x i32> %149, %160
%163 = add <4 x i32> %150, %161
%164 = or i64 %148, 8
%165 = getelementptr inbounds [1001 x i8], [1001 x i8]* %1, i64 0, i64 %164
%166 = bitcast i8* %165 to <4 x i8>*
%167 = load <4 x i8>, <4 x i8>* %166
%168 = getelementptr inbounds i8, i8* %165, i64 4
%169 = bitcast i8* %168 to <4 x i8>*
%170 = load <4 x i8>, <4 x i8>* %169
%171 = icmp eq <4 x i8> %167, %144
%172 = icmp eq <4 x i8> %170, %146
%173 = zext <4 x i1> %171 to <4 x i32>
%174 = zext <4 x i1> %172 to <4 x i32>
%175 = add <4 x i32> %162, %173
%176 = add <4 x i32> %163, %174
%177 = add nuw i64 %148, 16
%178 = add i64 %151, 2
%179 = icmp eq i64 %178, %124
br i1 %179, label %180, label %147
180: ; preds = %147, %142
%181 = phi <4 x i32> [ undef, %142 ], [ %175, %147 ]
%182 = phi <4 x i32> [ undef, %142 ], [ %176, %147 ]
%183 = phi i64 [ 0, %142 ], [ %177, %147 ]
%184 = phi <4 x i32> [ zeroinitializer, %142 ], [ %175, %147 ]
%185 = phi <4 x i32> [ zeroinitializer, %142 ], [ %176, %147 ]
br i1 %125, label %199, label %186
186: ; preds = %180
%187 = getelementptr inbounds [1001 x i8], [1001 x i8]* %1, i64 0, i64 %183
%188 = bitcast i8* %187 to <4 x i8>*
%189 = load <4 x i8>, <4 x i8>* %188
%190 = getelementptr inbounds i8, i8* %187, i64 4
%191 = bitcast i8* %190 to <4 x i8>*
%192 = load <4 x i8>, <4 x i8>* %191
%193 = icmp eq <4 x i8> %189, %144
%194 = icmp eq <4 x i8> %192, %146
%195 = zext <4 x i1> %193 to <4 x i32>
%196 = zext <4 x i1> %194 to <4 x i32>
%197 = add <4 x i32> %184, %195
%198 = add <4 x i32> %185, %196
br label %199
199: ; preds = %180, %186
%200 = phi <4 x i32> [ %181, %180 ], [ %197, %186 ]
%201 = phi <4 x i32> [ %182, %180 ], [ %198, %186 ]
%202 = add <4 x i32> %201, %200
%203 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %202)
br i1 %126, label %217, label %204
204: ; preds = %141, %199
%205 = phi i64 [ 0, %141 ], [ %121, %199 ]
%206 = phi i32 [ 0, %141 ], [ %203, %199 ]
br label %207
207: ; preds = %204, %207
%208 = phi i64 [ %215, %207 ], [ %205, %204 ]
%209 = phi i32 [ %214, %207 ], [ %206, %204 ]
%210 = getelementptr inbounds [1001 x i8], [1001 x i8]* %1, i64 0, i64 %208
%211 = load i8, i8* %210
%212 = icmp eq i8 %211, %140
%213 = zext i1 %212 to i32
%214 = add nuw nsw i32 %209, %213
%215 = add nuw nsw i64 %208, 1
%216 = icmp eq i64 %215, %115
br i1 %216, label %217, label %207
217: ; preds = %207, %199
%218 = phi i32 [ %203, %199 ], [ %214, %207 ]
%219 = icmp eq i32 %218, 0
br i1 %219, label %222, label %220
220: ; preds = %217
%221 = call i32 @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0), i8 signext %140, i32 %218)
br label %222
222: ; preds = %139, %220, %217
%223 = add nuw nsw i8 %140, 1
%224 = icmp eq i8 %223, 122
br i1 %224, label %225, label %139
225: ; preds = %222
ret i32 0
}