#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*/ memset(void *, char, int);
int strlen(char *);
void letter_pair_frequency(char *text, float histogram[]) {
  int i, index, x, y;
  float max = 1;
  memset((void *)histogram, '\0', 128 * 128 * sizeof(float));
  for (i = strlen(text) - 4; i >= 0; i--) {
    x = (int)text[i];
    if ((x >= 0) && (x < 128)) {
      if ((x != 10) && (x != 13)) {
        y = (int)text[i + 1];
        if ((y >= 0) && (y < 128)) {
          if ((y != 10) && (y != 13)) {
            index = (y * 128) + x;
            histogram[index] += 1.0f;
            if (histogram[index] > max) {
              max = histogram[index];
            }
          }
        }
        y = (int)text[i + 2];
        if ((y >= 0) && (y < 128)) {
          if ((y != 10) && (y != 13)) {
            index = (y * 128) + x;
            histogram[index] += 0.5f;
            if (histogram[index] > max) {
              max = histogram[index];
            }
          }
        }
        y = (int)text[i + 3];
        if ((y >= 0) && (y < 128)) {
          if ((y != 10) && (y != 13)) {
            index = (y * 128) + x;
            histogram[index] += 0.2f;
            if (histogram[index] > max) {
              max = histogram[index];
            }
          }
        }
      }
    }
  }
  for (i = 0; i < 128 * 128; i++) {
    if (histogram[i] > 0) {
      histogram[i] /= max;
    }
  }
}


x86 assembly (clang, -O0):
<letter_pair_frequency>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movss  0xec8(%rip),%xmm0
movss  %xmm0,-0x24(%rbp)
mov    -0x10(%rbp),%rdi
xor    %esi,%esi
mov    $0x10000,%edx
call   1040 <memset@plt>
mov    -0x8(%rbp),%rdi
call   1030 <strlen@plt>
sub    $0x4,%eax
mov    %eax,-0x14(%rbp)
cmpl   $0x0,-0x14(%rbp)
jl     1385 <letter_pair_frequency+0x265>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    %eax,-0x1c(%rbp)
cmpl   $0x0,-0x1c(%rbp)
jl     1372 <letter_pair_frequency+0x252>
cmpl   $0x80,-0x1c(%rbp)
jge    1372 <letter_pair_frequency+0x252>
cmpl   $0xa,-0x1c(%rbp)
je     136d <letter_pair_frequency+0x24d>
cmpl   $0xd,-0x1c(%rbp)
je     136d <letter_pair_frequency+0x24d>
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
mov    %eax,-0x20(%rbp)
cmpl   $0x0,-0x20(%rbp)
jl     1238 <letter_pair_frequency+0x118>
cmpl   $0x80,-0x20(%rbp)
jge    1238 <letter_pair_frequency+0x118>
cmpl   $0xa,-0x20(%rbp)
je     1233 <letter_pair_frequency+0x113>
cmpl   $0xd,-0x20(%rbp)
je     1233 <letter_pair_frequency+0x113>
mov    -0x20(%rbp),%eax
shl    $0x7,%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
movss  0xe05(%rip),%xmm0
addss  (%rax,%rcx,4),%xmm0
movss  %xmm0,(%rax,%rcx,4)
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
ucomiss -0x24(%rbp),%xmm0
jbe    122e <letter_pair_frequency+0x10e>
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x24(%rbp)
jmp    1233 <letter_pair_frequency+0x113>
jmp    1238 <letter_pair_frequency+0x118>
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
mov    %eax,-0x20(%rbp)
cmpl   $0x0,-0x20(%rbp)
jl     12d0 <letter_pair_frequency+0x1b0>
cmpl   $0x80,-0x20(%rbp)
jge    12d0 <letter_pair_frequency+0x1b0>
cmpl   $0xa,-0x20(%rbp)
je     12cb <letter_pair_frequency+0x1ab>
cmpl   $0xd,-0x20(%rbp)
je     12cb <letter_pair_frequency+0x1ab>
mov    -0x20(%rbp),%eax
shl    $0x7,%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
movss  0xd71(%rip),%xmm0
addss  (%rax,%rcx,4),%xmm0
movss  %xmm0,(%rax,%rcx,4)
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
ucomiss -0x24(%rbp),%xmm0
jbe    12c6 <letter_pair_frequency+0x1a6>
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x24(%rbp)
jmp    12cb <letter_pair_frequency+0x1ab>
jmp    12d0 <letter_pair_frequency+0x1b0>
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
mov    %eax,-0x20(%rbp)
cmpl   $0x0,-0x20(%rbp)
jl     1368 <letter_pair_frequency+0x248>
cmpl   $0x80,-0x20(%rbp)
jge    1368 <letter_pair_frequency+0x248>
cmpl   $0xa,-0x20(%rbp)
je     1363 <letter_pair_frequency+0x243>
cmpl   $0xd,-0x20(%rbp)
je     1363 <letter_pair_frequency+0x243>
mov    -0x20(%rbp),%eax
shl    $0x7,%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
movss  0xcdd(%rip),%xmm0
addss  (%rax,%rcx,4),%xmm0
movss  %xmm0,(%rax,%rcx,4)
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
ucomiss -0x24(%rbp),%xmm0
jbe    135e <letter_pair_frequency+0x23e>
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x24(%rbp)
jmp    1363 <letter_pair_frequency+0x243>
jmp    1368 <letter_pair_frequency+0x248>
jmp    136d <letter_pair_frequency+0x24d>
jmp    1372 <letter_pair_frequency+0x252>
jmp    1377 <letter_pair_frequency+0x257>
mov    -0x14(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x14(%rbp)
jmp    115c <letter_pair_frequency+0x3c>
movl   $0x0,-0x14(%rbp)
cmpl   $0x4000,-0x14(%rbp)
jge    13e0 <letter_pair_frequency+0x2c0>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jbe    13cd <letter_pair_frequency+0x2ad>
movss  -0x24(%rbp),%xmm1
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
divss  %xmm1,%xmm0
movss  %xmm0,(%rax,%rcx,4)
jmp    13d2 <letter_pair_frequency+0x2b2>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    138c <letter_pair_frequency+0x26c>
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<letter_pair_frequency>:
push   %r14
push   %rbx
push   %rax
mov    %rsi,%rbx
mov    %rdi,%r14
mov    %rsi,%rdi
xor    %esi,%esi
mov    $0x10000,%edx
call   1040 <memset@plt>
mov    %r14,%rdi
call   1030 <strlen@plt>
cmp    $0x4,%eax
jl     1234 <letter_pair_frequency+0x114>
add    $0xfffffffc,%eax
add    $0x1,%rax
movss  0xea7(%rip),%xmm1
movss  0xea3(%rip),%xmm2
movss  0xe9f(%rip),%xmm3
movaps %xmm1,%xmm0
jmp    117a <letter_pair_frequency+0x5a>
xchg   %ax,%ax
add    $0xffffffffffffffff,%rax
jle    123c <letter_pair_frequency+0x11c>
movsbl -0x1(%r14,%rax,1),%ecx
test   %ecx,%ecx
js     1170 <letter_pair_frequency+0x50>
cmp    $0xa,%cl
je     1170 <letter_pair_frequency+0x50>
cmp    $0xd,%cl
je     1170 <letter_pair_frequency+0x50>
movsbl (%r14,%rax,1),%edx
test   %edx,%edx
js     11c0 <letter_pair_frequency+0xa0>
cmp    $0xa,%dl
je     11c0 <letter_pair_frequency+0xa0>
cmp    $0xd,%dl
je     11c0 <letter_pair_frequency+0xa0>
shl    $0x7,%edx
add    %ecx,%edx
movss  (%rbx,%rdx,4),%xmm4
addss  %xmm1,%xmm4
movss  %xmm4,(%rbx,%rdx,4)
ucomiss %xmm0,%xmm4
jbe    11c0 <letter_pair_frequency+0xa0>
movaps %xmm4,%xmm0
nopl   0x0(%rax)
movsbl 0x1(%r14,%rax,1),%edx
test   %edx,%edx
js     11f0 <letter_pair_frequency+0xd0>
cmp    $0xa,%dl
je     11f0 <letter_pair_frequency+0xd0>
cmp    $0xd,%dl
je     11f0 <letter_pair_frequency+0xd0>
shl    $0x7,%edx
add    %ecx,%edx
movss  (%rbx,%rdx,4),%xmm4
addss  %xmm2,%xmm4
movss  %xmm4,(%rbx,%rdx,4)
ucomiss %xmm0,%xmm4
jbe    11f0 <letter_pair_frequency+0xd0>
movaps %xmm4,%xmm0
nop
movsbl 0x2(%r14,%rax,1),%edx
test   %edx,%edx
js     1170 <letter_pair_frequency+0x50>
cmp    $0xa,%dl
je     1170 <letter_pair_frequency+0x50>
cmp    $0xd,%dl
je     1170 <letter_pair_frequency+0x50>
shl    $0x7,%edx
add    %ecx,%edx
movss  (%rbx,%rdx,4),%xmm4
addss  %xmm3,%xmm4
movss  %xmm4,(%rbx,%rdx,4)
ucomiss %xmm0,%xmm4
jbe    1170 <letter_pair_frequency+0x50>
movaps %xmm4,%xmm0
jmp    1170 <letter_pair_frequency+0x50>
movss  0xdc4(%rip),%xmm0
xor    %eax,%eax
xorps  %xmm1,%xmm1
jmp    125c <letter_pair_frequency+0x13c>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
add    $0x4,%rax
cmp    $0x4000,%rax
je     12c8 <letter_pair_frequency+0x1a8>
movups (%rbx,%rax,4),%xmm2
ucomiss %xmm1,%xmm2
jbe    1271 <letter_pair_frequency+0x151>
movaps %xmm2,%xmm3
divss  %xmm0,%xmm3
movss  %xmm3,(%rbx,%rax,4)
xorps  %xmm3,%xmm3
cmpltps %xmm2,%xmm3
pextrw $0x2,%xmm3,%ecx
test   $0x1,%cl
je     1293 <letter_pair_frequency+0x173>
movaps %xmm2,%xmm4
shufps $0x55,%xmm2,%xmm4
divss  %xmm0,%xmm4
movss  %xmm4,0x4(%rbx,%rax,4)
pextrw $0x4,%xmm3,%ecx
test   $0x1,%cl
je     12ae <letter_pair_frequency+0x18e>
movaps %xmm2,%xmm4
unpckhpd %xmm2,%xmm4
divss  %xmm0,%xmm4
movss  %xmm4,0x8(%rbx,%rax,4)
pextrw $0x6,%xmm3,%ecx
test   $0x1,%cl
je     1250 <letter_pair_frequency+0x130>
shufps $0xff,%xmm2,%xmm2
divss  %xmm0,%xmm2
movss  %xmm2,0xc(%rbx,%rax,4)
jmp    1250 <letter_pair_frequency+0x130>
add    $0x8,%rsp
pop    %rbx
pop    %r14
ret

LLVM IR (-O0):
define void @letter_pair_frequency(i8* %0, float* %1) {
%3 = alloca i8*
%4 = alloca float*
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca float
store i8* %0, i8** %3
store float* %1, float** %4
store float 1.000000e+00, float* %9
%10 = load float*, float** %4
%11 = bitcast float* %10 to i8*
%12 = call i32 @memset(i8* %11, i8 signext 0, i32 65536)
%13 = load i8*, i8** %3
%14 = call i32 @strlen(i8* %13)
%15 = sub nsw i32 %14, 4
store i32 %15, i32* %5
br label %16
16: ; preds = %175, %2
%17 = load i32, i32* %5
%18 = icmp sge i32 %17, 0
br i1 %18, label %19, label %178
19: ; preds = %16
%20 = load i8*, i8** %3
%21 = load i32, i32* %5
%22 = sext i32 %21 to i64
%23 = getelementptr inbounds i8, i8* %20, i64 %22
%24 = load i8, i8* %23
%25 = sext i8 %24 to i32
store i32 %25, i32* %7
%26 = load i32, i32* %7
%27 = icmp sge i32 %26, 0
br i1 %27, label %28, label %174
28: ; preds = %19
%29 = load i32, i32* %7
%30 = icmp slt i32 %29, 128
br i1 %30, label %31, label %174
31: ; preds = %28
%32 = load i32, i32* %7
%33 = icmp ne i32 %32, 10
br i1 %33, label %34, label %173
34: ; preds = %31
%35 = load i32, i32* %7
%36 = icmp ne i32 %35, 13
br i1 %36, label %37, label %173
37: ; preds = %34
%38 = load i8*, i8** %3
%39 = load i32, i32* %5
%40 = add nsw i32 %39, 1
%41 = sext i32 %40 to i64
%42 = getelementptr inbounds i8, i8* %38, i64 %41
%43 = load i8, i8* %42
%44 = sext i8 %43 to i32
store i32 %44, i32* %8
%45 = load i32, i32* %8
%46 = icmp sge i32 %45, 0
br i1 %46, label %47, label %82
47: ; preds = %37
%48 = load i32, i32* %8
%49 = icmp slt i32 %48, 128
br i1 %49, label %50, label %82
50: ; preds = %47
%51 = load i32, i32* %8
%52 = icmp ne i32 %51, 10
br i1 %52, label %53, label %81
53: ; preds = %50
%54 = load i32, i32* %8
%55 = icmp ne i32 %54, 13
br i1 %55, label %56, label %81
56: ; preds = %53
%57 = load i32, i32* %8
%58 = mul nsw i32 %57, 128
%59 = load i32, i32* %7
%60 = add nsw i32 %58, %59
store i32 %60, i32* %6
%61 = load float*, float** %4
%62 = load i32, i32* %6
%63 = sext i32 %62 to i64
%64 = getelementptr inbounds float, float* %61, i64 %63
%65 = load float, float* %64
%66 = fadd float %65, 1.000000e+00
store float %66, float* %64
%67 = load float*, float** %4
%68 = load i32, i32* %6
%69 = sext i32 %68 to i64
%70 = getelementptr inbounds float, float* %67, i64 %69
%71 = load float, float* %70
%72 = load float, float* %9
%73 = fcmp ogt float %71, %72
br i1 %73, label %74, label %80
74: ; preds = %56
%75 = load float*, float** %4
%76 = load i32, i32* %6
%77 = sext i32 %76 to i64
%78 = getelementptr inbounds float, float* %75, i64 %77
%79 = load float, float* %78
store float %79, float* %9
br label %80
80: ; preds = %74, %56
br label %81
81: ; preds = %80, %53, %50
br label %82
82: ; preds = %81, %47, %37
%83 = load i8*, i8** %3
%84 = load i32, i32* %5
%85 = add nsw i32 %84, 2
%86 = sext i32 %85 to i64
%87 = getelementptr inbounds i8, i8* %83, i64 %86
%88 = load i8, i8* %87
%89 = sext i8 %88 to i32
store i32 %89, i32* %8
%90 = load i32, i32* %8
%91 = icmp sge i32 %90, 0
br i1 %91, label %92, label %127
92: ; preds = %82
%93 = load i32, i32* %8
%94 = icmp slt i32 %93, 128
br i1 %94, label %95, label %127
95: ; preds = %92
%96 = load i32, i32* %8
%97 = icmp ne i32 %96, 10
br i1 %97, label %98, label %126
98: ; preds = %95
%99 = load i32, i32* %8
%100 = icmp ne i32 %99, 13
br i1 %100, label %101, label %126
101: ; preds = %98
%102 = load i32, i32* %8
%103 = mul nsw i32 %102, 128
%104 = load i32, i32* %7
%105 = add nsw i32 %103, %104
store i32 %105, i32* %6
%106 = load float*, float** %4
%107 = load i32, i32* %6
%108 = sext i32 %107 to i64
%109 = getelementptr inbounds float, float* %106, i64 %108
%110 = load float, float* %109
%111 = fadd float %110, 5.000000e-01
store float %111, float* %109
%112 = load float*, float** %4
%113 = load i32, i32* %6
%114 = sext i32 %113 to i64
%115 = getelementptr inbounds float, float* %112, i64 %114
%116 = load float, float* %115
%117 = load float, float* %9
%118 = fcmp ogt float %116, %117
br i1 %118, label %119, label %125
119: ; preds = %101
%120 = load float*, float** %4
%121 = load i32, i32* %6
%122 = sext i32 %121 to i64
%123 = getelementptr inbounds float, float* %120, i64 %122
%124 = load float, float* %123
store float %124, float* %9
br label %125
125: ; preds = %119, %101
br label %126
126: ; preds = %125, %98, %95
br label %127
127: ; preds = %126, %92, %82
%128 = load i8*, i8** %3
%129 = load i32, i32* %5
%130 = add nsw i32 %129, 3
%131 = sext i32 %130 to i64
%132 = getelementptr inbounds i8, i8* %128, i64 %131
%133 = load i8, i8* %132
%134 = sext i8 %133 to i32
store i32 %134, i32* %8
%135 = load i32, i32* %8
%136 = icmp sge i32 %135, 0
br i1 %136, label %137, label %172
137: ; preds = %127
%138 = load i32, i32* %8
%139 = icmp slt i32 %138, 128
br i1 %139, label %140, label %172
140: ; preds = %137
%141 = load i32, i32* %8
%142 = icmp ne i32 %141, 10
br i1 %142, label %143, label %171
143: ; preds = %140
%144 = load i32, i32* %8
%145 = icmp ne i32 %144, 13
br i1 %145, label %146, label %171
146: ; preds = %143
%147 = load i32, i32* %8
%148 = mul nsw i32 %147, 128
%149 = load i32, i32* %7
%150 = add nsw i32 %148, %149
store i32 %150, i32* %6
%151 = load float*, float** %4
%152 = load i32, i32* %6
%153 = sext i32 %152 to i64
%154 = getelementptr inbounds float, float* %151, i64 %153
%155 = load float, float* %154
%156 = fadd float %155, 0x3FC99999A0000000
store float %156, float* %154
%157 = load float*, float** %4
%158 = load i32, i32* %6
%159 = sext i32 %158 to i64
%160 = getelementptr inbounds float, float* %157, i64 %159
%161 = load float, float* %160
%162 = load float, float* %9
%163 = fcmp ogt float %161, %162
br i1 %163, label %164, label %170
164: ; preds = %146
%165 = load float*, float** %4
%166 = load i32, i32* %6
%167 = sext i32 %166 to i64
%168 = getelementptr inbounds float, float* %165, i64 %167
%169 = load float, float* %168
store float %169, float* %9
br label %170
170: ; preds = %164, %146
br label %171
171: ; preds = %170, %143, %140
br label %172
172: ; preds = %171, %137, %127
br label %173
173: ; preds = %172, %34, %31
br label %174
174: ; preds = %173, %28, %19
br label %175
175: ; preds = %174
%176 = load i32, i32* %5
%177 = add nsw i32 %176, -1
store i32 %177, i32* %5
br label %16
178: ; preds = %16
store i32 0, i32* %5
br label %179
179: ; preds = %198, %178
%180 = load i32, i32* %5
%181 = icmp slt i32 %180, 16384
br i1 %181, label %182, label %201
182: ; preds = %179
%183 = load float*, float** %4
%184 = load i32, i32* %5
%185 = sext i32 %184 to i64
%186 = getelementptr inbounds float, float* %183, i64 %185
%187 = load float, float* %186
%188 = fcmp ogt float %187, 0.000000e+00
br i1 %188, label %189, label %197
189: ; preds = %182
%190 = load float, float* %9
%191 = load float*, float** %4
%192 = load i32, i32* %5
%193 = sext i32 %192 to i64
%194 = getelementptr inbounds float, float* %191, i64 %193
%195 = load float, float* %194
%196 = fdiv float %195, %190
store float %196, float* %194
br label %197
197: ; preds = %189, %182
br label %198
198: ; preds = %197
%199 = load i32, i32* %5
%200 = add nsw i32 %199, 1
store i32 %200, i32* %5
br label %179
201: ; preds = %179
ret void
}

LLVM IR (-O2):
define void @letter_pair_frequency(i8* %0, float* %1) {
%3 = bitcast float* %1 to i8*
%4 = tail call i32 @memset(i8* %3, i8 signext 0, i32 65536)
%5 = tail call i32 @strlen(i8* %0)
%6 = icmp sgt i32 %5, 3
br i1 %6, label %7, label %10
7: ; preds = %2
%8 = add nsw i32 %5, -4
%9 = zext i32 %8 to i64
br label %47
10: ; preds = %105, %2
%11 = phi float [ 1.000000e+00, %2 ], [ %106, %105 ]
br label %12
12: ; preds = %44, %10
%13 = phi i64 [ 0, %10 ], [ %45, %44 ]
%14 = getelementptr inbounds float, float* %1, i64 %13
%15 = bitcast float* %14 to <4 x float>*
%16 = load <4 x float>, <4 x float>* %15
%17 = fcmp ogt <4 x float> %16, zeroinitializer
%18 = extractelement <4 x i1> %17, i64 0
br i1 %18, label %19, label %23
19: ; preds = %12
%20 = extractelement <4 x float> %16, i64 0
%21 = fdiv float %20, %11
%22 = getelementptr inbounds float, float* %1, i64 %13
store float %21, float* %22
br label %23
23: ; preds = %19, %12
%24 = extractelement <4 x i1> %17, i64 1
br i1 %24, label %25, label %30
25: ; preds = %23
%26 = or i64 %13, 1
%27 = extractelement <4 x float> %16, i64 1
%28 = fdiv float %27, %11
%29 = getelementptr inbounds float, float* %1, i64 %26
store float %28, float* %29
br label %30
30: ; preds = %25, %23
%31 = extractelement <4 x i1> %17, i64 2
br i1 %31, label %32, label %37
32: ; preds = %30
%33 = or i64 %13, 2
%34 = extractelement <4 x float> %16, i64 2
%35 = fdiv float %34, %11
%36 = getelementptr inbounds float, float* %1, i64 %33
store float %35, float* %36
br label %37
37: ; preds = %32, %30
%38 = extractelement <4 x i1> %17, i64 3
br i1 %38, label %39, label %44
39: ; preds = %37
%40 = or i64 %13, 3
%41 = extractelement <4 x float> %16, i64 3
%42 = fdiv float %41, %11
%43 = getelementptr inbounds float, float* %1, i64 %40
store float %42, float* %43
br label %44
44: ; preds = %39, %37
%45 = add nuw i64 %13, 4
%46 = icmp eq i64 %45, 16384
br i1 %46, label %109, label %12
47: ; preds = %7, %105
%48 = phi i64 [ %9, %7 ], [ %107, %105 ]
%49 = phi float [ 1.000000e+00, %7 ], [ %106, %105 ]
%50 = getelementptr inbounds i8, i8* %0, i64 %48
%51 = load i8, i8* %50
%52 = sext i8 %51 to i32
%53 = icmp sgt i8 %51, -1
br i1 %53, label %54, label %105
54: ; preds = %47
switch i8 %51, label %55 [
i8 13, label %105
i8 10, label %105
]
55: ; preds = %54
%56 = add nuw nsw i64 %48, 1
%57 = getelementptr inbounds i8, i8* %0, i64 %56
%58 = load i8, i8* %57
%59 = sext i8 %58 to i32
%60 = icmp sgt i8 %58, -1
br i1 %60, label %61, label %71
61: ; preds = %55
switch i8 %58, label %62 [
i8 13, label %71
i8 10, label %71
]
62: ; preds = %61
%63 = shl nsw i32 %59, 7
%64 = add nsw i32 %63, %52
%65 = zext i32 %64 to i64
%66 = getelementptr inbounds float, float* %1, i64 %65
%67 = load float, float* %66
%68 = fadd float %67, 1.000000e+00
store float %68, float* %66
%69 = fcmp ogt float %68, %49
br i1 %69, label %70, label %71
70: ; preds = %62
br label %71
71: ; preds = %61, %61, %70, %62, %55
%72 = phi float [ %68, %70 ], [ %49, %62 ], [ %49, %61 ], [ %49, %55 ], [ %49, %61 ]
%73 = add nuw nsw i64 %48, 2
%74 = getelementptr inbounds i8, i8* %0, i64 %73
%75 = load i8, i8* %74
%76 = sext i8 %75 to i32
%77 = icmp sgt i8 %75, -1
br i1 %77, label %78, label %88
78: ; preds = %71
switch i8 %75, label %79 [
i8 13, label %88
i8 10, label %88
]
79: ; preds = %78
%80 = shl nsw i32 %76, 7
%81 = add nsw i32 %80, %52
%82 = zext i32 %81 to i64
%83 = getelementptr inbounds float, float* %1, i64 %82
%84 = load float, float* %83
%85 = fadd float %84, 5.000000e-01
store float %85, float* %83
%86 = fcmp ogt float %85, %72
br i1 %86, label %87, label %88
87: ; preds = %79
br label %88
88: ; preds = %78, %78, %87, %79, %71
%89 = phi float [ %85, %87 ], [ %72, %79 ], [ %72, %78 ], [ %72, %71 ], [ %72, %78 ]
%90 = add nuw nsw i64 %48, 3
%91 = getelementptr inbounds i8, i8* %0, i64 %90
%92 = load i8, i8* %91
%93 = sext i8 %92 to i32
%94 = icmp sgt i8 %92, -1
br i1 %94, label %95, label %105
95: ; preds = %88
switch i8 %92, label %96 [
i8 13, label %105
i8 10, label %105
]
96: ; preds = %95
%97 = shl nsw i32 %93, 7
%98 = add nsw i32 %97, %52
%99 = zext i32 %98 to i64
%100 = getelementptr inbounds float, float* %1, i64 %99
%101 = load float, float* %100
%102 = fadd float %101, 0x3FC99999A0000000
store float %102, float* %100
%103 = fcmp ogt float %102, %89
br i1 %103, label %104, label %105
104: ; preds = %96
br label %105
105: ; preds = %95, %95, %54, %54, %47, %88, %96, %104
%106 = phi float [ %102, %104 ], [ %89, %96 ], [ %89, %95 ], [ %89, %88 ], [ %49, %54 ], [ %49, %47 ], [ %49, %54 ], [ %89, %95 ]
%107 = add nsw i64 %48, -1
%108 = icmp sgt i64 %48, 0
br i1 %108, label %47, label %10
109: ; preds = %44
ret void
}