#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, int);
int strlen(char *);
int create_letter_distribution_diagram(char sentence[50], int letters[26][2]) {
  int counter = 0, lines, ascii = 97, acode, sort;
  for (lines = 0; lines < 26; lines++) {
    letters[lines][0] = ascii + lines;
    letters[lines][1] = 0;
  }
  while (counter < strlen(sentence)) {
    acode = sentence[counter];
    for (lines = 0; lines < 26; lines++) {
      if (acode == letters[lines][0] || acode == letters[lines][0] - 32) {
        letters[lines][1]++;
      }
    }
    counter++;
  }
  for (lines = 0; lines < 26; lines++) {
    for (counter = 0; counter < 26; counter++) {
      if (letters[lines][1] > letters[counter][1]) {
        sort = letters[lines][0];
        letters[lines][0] = letters[counter][0];
        letters[counter][0] = sort;
        sort = letters[lines][1];
        letters[lines][1] = letters[counter][1];
        letters[counter][1] = sort;
      } else if (letters[lines][1] == letters[counter][1]) {
        if (letters[lines][0] < letters[counter][0]) {
          sort = letters[lines][0];
          letters[lines][0] = letters[counter][0];
          letters[counter][0] = sort;
          sort = letters[lines][1];
          letters[lines][1] = letters[counter][1];
          letters[counter][1] = sort;
        }
      }
    }
  }
  for (lines = 0; lines < 26; lines++) {
    printf("%c: %d \n", letters[lines][0], letters[lines][1]);
  }
  return 0;
}


x86 assembly (clang, -O0):
<create_letter_distribution_diagram>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movl   $0x0,-0x14(%rbp)
movl   $0x61,-0x1c(%rbp)
movl   $0x0,-0x18(%rbp)
cmpl   $0x1a,-0x18(%rbp)
jge    117e <create_letter_distribution_diagram+0x5e>
mov    -0x1c(%rbp),%edx
add    -0x18(%rbp),%edx
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    %edx,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
movl   $0x0,0x4(%rax,%rcx,8)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1145 <create_letter_distribution_diagram+0x25>
jmp    1183 <create_letter_distribution_diagram+0x63>
mov    -0x14(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x8(%rbp),%rdi
call   1030 <strlen@plt>
mov    %eax,%ecx
mov    -0x28(%rbp),%eax
cmp    %ecx,%eax
jge    1220 <create_letter_distribution_diagram+0x100>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    %eax,-0x20(%rbp)
movl   $0x0,-0x18(%rbp)
cmpl   $0x1a,-0x18(%rbp)
jge    1212 <create_letter_distribution_diagram+0xf2>
mov    -0x20(%rbp),%eax
mov    -0x10(%rbp),%rcx
movslq -0x18(%rbp),%rdx
cmp    (%rcx,%rdx,8),%eax
je     11ec <create_letter_distribution_diagram+0xcc>
mov    -0x20(%rbp),%eax
mov    -0x10(%rbp),%rcx
movslq -0x18(%rbp),%rdx
mov    (%rcx,%rdx,8),%ecx
sub    $0x20,%ecx
cmp    %ecx,%eax
jne    11ff <create_letter_distribution_diagram+0xdf>
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    0x4(%rax,%rcx,8),%edx
add    $0x1,%edx
mov    %edx,0x4(%rax,%rcx,8)
jmp    1204 <create_letter_distribution_diagram+0xe4>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    11b5 <create_letter_distribution_diagram+0x95>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1183 <create_letter_distribution_diagram+0x63>
movl   $0x0,-0x18(%rbp)
cmpl   $0x1a,-0x18(%rbp)
jge    139f <create_letter_distribution_diagram+0x27f>
movl   $0x0,-0x14(%rbp)
cmpl   $0x1a,-0x14(%rbp)
jge    138c <create_letter_distribution_diagram+0x26c>
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    0x4(%rax,%rcx,8),%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
cmp    0x4(%rcx,%rdx,8),%eax
jle    12cd <create_letter_distribution_diagram+0x1ad>
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    (%rax,%rcx,8),%eax
mov    %eax,-0x24(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,8),%edx
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    %edx,(%rax,%rcx,8)
mov    -0x24(%rbp),%edx
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    %edx,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    0x4(%rax,%rcx,8),%eax
mov    %eax,-0x24(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    0x4(%rax,%rcx,8),%edx
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    %edx,0x4(%rax,%rcx,8)
mov    -0x24(%rbp),%edx
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    %edx,0x4(%rax,%rcx,8)
jmp    1379 <create_letter_distribution_diagram+0x259>
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    0x4(%rax,%rcx,8),%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
cmp    0x4(%rcx,%rdx,8),%eax
jne    1374 <create_letter_distribution_diagram+0x254>
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    (%rax,%rcx,8),%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
cmp    (%rcx,%rdx,8),%eax
jge    136f <create_letter_distribution_diagram+0x24f>
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    (%rax,%rcx,8),%eax
mov    %eax,-0x24(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,8),%edx
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    %edx,(%rax,%rcx,8)
mov    -0x24(%rbp),%edx
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    %edx,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    0x4(%rax,%rcx,8),%eax
mov    %eax,-0x24(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    0x4(%rax,%rcx,8),%edx
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    %edx,0x4(%rax,%rcx,8)
mov    -0x24(%rbp),%edx
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    %edx,0x4(%rax,%rcx,8)
jmp    1374 <create_letter_distribution_diagram+0x254>
jmp    1379 <create_letter_distribution_diagram+0x259>
jmp    137e <create_letter_distribution_diagram+0x25e>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1238 <create_letter_distribution_diagram+0x118>
jmp    1391 <create_letter_distribution_diagram+0x271>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1227 <create_letter_distribution_diagram+0x107>
movl   $0x0,-0x18(%rbp)
cmpl   $0x1a,-0x18(%rbp)
jge    13e1 <create_letter_distribution_diagram+0x2c1>
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    (%rax,%rcx,8),%esi
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    0x4(%rax,%rcx,8),%edx
lea    0xc32(%rip),%rdi
call   1040 <printf@plt>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    13a6 <create_letter_distribution_diagram+0x286>
xor    %eax,%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<create_letter_distribution_diagram>:
push   %r15
push   %r14
push   %rbx
mov    %rsi,%rbx
mov    %rdi,%r14
movaps 0xece(%rip),%xmm0
movups %xmm0,(%rsi)
movaps 0xed4(%rip),%xmm0
movups %xmm0,0x10(%rsi)
movaps 0xed9(%rip),%xmm0
movups %xmm0,0x20(%rsi)
movaps 0xede(%rip),%xmm0
movups %xmm0,0x30(%rsi)
movaps 0xee3(%rip),%xmm0
movups %xmm0,0x40(%rsi)
movaps 0xee8(%rip),%xmm0
movups %xmm0,0x50(%rsi)
movaps 0xeed(%rip),%xmm0
movups %xmm0,0x60(%rsi)
movaps 0xef2(%rip),%xmm0
movups %xmm0,0x70(%rsi)
movaps 0xef7(%rip),%xmm0
movups %xmm0,0x80(%rsi)
movaps 0xef9(%rip),%xmm0
movups %xmm0,0x90(%rsi)
movaps 0xefb(%rip),%xmm0
movups %xmm0,0xa0(%rsi)
movaps 0xefd(%rip),%xmm0
movups %xmm0,0xb0(%rsi)
movaps 0xeff(%rip),%xmm0
movups %xmm0,0xc0(%rsi)
call   1030 <strlen@plt>
test   %eax,%eax
jle    1233 <create_letter_distribution_diagram+0x113>
xor    %r15d,%r15d
jmp    11f3 <create_letter_distribution_diagram+0xd3>
cs nopw 0x0(%rax,%rax,1)
add    $0x1,%r15
mov    %r14,%rdi
call   1030 <strlen@plt>
cltq
cmp    %rax,%r15
jge    1233 <create_letter_distribution_diagram+0x113>
movsbl (%r14,%r15,1),%eax
xor    %ecx,%ecx
jmp    120f <create_letter_distribution_diagram+0xef>
nopl   0x0(%rax)
addl   $0x1,0xc(%rbx,%rcx,8)
add    $0x2,%rcx
cmp    $0x1a,%rcx
je     11e0 <create_letter_distribution_diagram+0xc0>
mov    (%rbx,%rcx,8),%edx
cmp    %eax,%edx
je     121d <create_letter_distribution_diagram+0xfd>
add    $0xffffffe0,%edx
cmp    %eax,%edx
jne    1222 <create_letter_distribution_diagram+0x102>
addl   $0x1,0x4(%rbx,%rcx,8)
mov    0x8(%rbx,%rcx,8),%edx
cmp    %eax,%edx
je     1200 <create_letter_distribution_diagram+0xe0>
add    $0xffffffe0,%edx
cmp    %eax,%edx
jne    1205 <create_letter_distribution_diagram+0xe5>
jmp    1200 <create_letter_distribution_diagram+0xe0>
xor    %eax,%eax
jmp    124a <create_letter_distribution_diagram+0x12a>
nopw   0x0(%rax,%rax,1)
add    $0x1,%rax
cmp    $0x1a,%rax
je     1292 <create_letter_distribution_diagram+0x172>
xor    %ecx,%ecx
jmp    1270 <create_letter_distribution_diagram+0x150>
xchg   %ax,%ax
mov    (%rbx,%rax,8),%r8d
mov    (%rbx,%rcx,8),%edi
mov    %edi,(%rbx,%rax,8)
mov    %r8d,(%rbx,%rcx,8)
mov    %esi,0x4(%rbx,%rax,8)
mov    %edx,0x4(%rbx,%rcx,8)
add    $0x1,%rcx
cmp    $0x1a,%rcx
je     1240 <create_letter_distribution_diagram+0x120>
mov    0x4(%rbx,%rax,8),%edx
mov    0x4(%rbx,%rcx,8),%esi
cmp    %esi,%edx
jg     1250 <create_letter_distribution_diagram+0x130>
jne    1266 <create_letter_distribution_diagram+0x146>
mov    (%rbx,%rax,8),%esi
mov    (%rbx,%rcx,8),%edi
cmp    %edi,%esi
jge    1266 <create_letter_distribution_diagram+0x146>
mov    %edi,(%rbx,%rax,8)
mov    %esi,(%rbx,%rcx,8)
mov    %edx,%esi
jmp    125e <create_letter_distribution_diagram+0x13e>
xor    %r15d,%r15d
lea    0xe34(%rip),%r14
nopl   0x0(%rax)
mov    (%rbx,%r15,8),%esi
mov    0x4(%rbx,%r15,8),%edx
mov    %r14,%rdi
call   1040 <printf@plt>
add    $0x1,%r15
cmp    $0x1a,%r15
jne    12a0 <create_letter_distribution_diagram+0x180>
xor    %eax,%eax
pop    %rbx
pop    %r14
pop    %r15
ret

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

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