double ho_recognize_font_1_shin(const double *array_in) {
  int count_edges;
  int count_notches;
  double return_value = 0.0;
  count_edges =
      (array_in[33]) * 10.0 + (array_in[32]) * 10.0 + (array_in[31]) * 10;
  count_notches =
      (array_in[45]) * 10.0 + (array_in[44]) * 10.0 + (array_in[43]) * 10;
  if ((array_in[68]))
    return_value += 0.3;
  if ((array_in[15]))
    return_value += 0.3;
  if ((array_in[43]))
    return_value += 0.1;
  if ((array_in[45]))
    return_value += 0.1;
  if ((array_in[31]))
    return_value += 0.1;
  if ((array_in[33]))
    return_value += 0.1;
  if (count_edges == 3)
    return_value += 0.2;
  if (count_notches == 2)
    return_value += 0.2;
  if ((array_in[65]))
    return_value += 0.2;
  if ((array_in[64]))
    return_value += 0.2;
  if ((array_in[47]))
    return_value -= 0.2;
  if (!(array_in[45]) && !(array_in[44]))
    return_value -= 0.2;
  if (count_edges != 3)
    return_value -= 0.1;
  return return_value;
}


x86 assembly (clang, -O0):
<ho_recognize_font_1_shin>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x18(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x108(%rax),%xmm1
mov    -0x8(%rbp),%rax
movsd  0xed8(%rip),%xmm0
mulsd  0x100(%rax),%xmm0
movsd  0xec8(%rip),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  0xf8(%rax),%xmm0
movsd  0xeac(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x168(%rax),%xmm1
mov    -0x8(%rbp),%rax
movsd  0xe85(%rip),%xmm0
mulsd  0x160(%rax),%xmm0
movsd  0xe75(%rip),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  0x158(%rax),%xmm0
movsd  0xe59(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x10(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x220(%rax),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    11da <ho_recognize_font_1_shin+0xda>
jp     11da <ho_recognize_font_1_shin+0xda>
jmp    11ec <ho_recognize_font_1_shin+0xec>
movsd  0xe26(%rip),%xmm0
addsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x18(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x78(%rax),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    120d <ho_recognize_font_1_shin+0x10d>
jp     120d <ho_recognize_font_1_shin+0x10d>
jmp    121f <ho_recognize_font_1_shin+0x11f>
movsd  0xdf3(%rip),%xmm0
addsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x18(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x158(%rax),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1243 <ho_recognize_font_1_shin+0x143>
jp     1243 <ho_recognize_font_1_shin+0x143>
jmp    1255 <ho_recognize_font_1_shin+0x155>
movsd  0xdc5(%rip),%xmm0
addsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x18(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x168(%rax),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1279 <ho_recognize_font_1_shin+0x179>
jp     1279 <ho_recognize_font_1_shin+0x179>
jmp    128b <ho_recognize_font_1_shin+0x18b>
movsd  0xd8f(%rip),%xmm0
addsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x18(%rbp)
mov    -0x8(%rbp),%rax
movsd  0xf8(%rax),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    12af <ho_recognize_font_1_shin+0x1af>
jp     12af <ho_recognize_font_1_shin+0x1af>
jmp    12c1 <ho_recognize_font_1_shin+0x1c1>
movsd  0xd59(%rip),%xmm0
addsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x18(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x108(%rax),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    12e5 <ho_recognize_font_1_shin+0x1e5>
jp     12e5 <ho_recognize_font_1_shin+0x1e5>
jmp    12f7 <ho_recognize_font_1_shin+0x1f7>
movsd  0xd23(%rip),%xmm0
addsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x18(%rbp)
cmpl   $0x3,-0xc(%rbp)
jne    1313 <ho_recognize_font_1_shin+0x213>
movsd  0xd0f(%rip),%xmm0
addsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x18(%rbp)
cmpl   $0x2,-0x10(%rbp)
jne    132f <ho_recognize_font_1_shin+0x22f>
movsd  0xcf3(%rip),%xmm0
addsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x18(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x208(%rax),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1353 <ho_recognize_font_1_shin+0x253>
jp     1353 <ho_recognize_font_1_shin+0x253>
jmp    1365 <ho_recognize_font_1_shin+0x265>
movsd  0xcbd(%rip),%xmm0
addsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x18(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x200(%rax),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1389 <ho_recognize_font_1_shin+0x289>
jp     1389 <ho_recognize_font_1_shin+0x289>
jmp    139b <ho_recognize_font_1_shin+0x29b>
movsd  0xc87(%rip),%xmm0
addsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x18(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x178(%rax),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    13bf <ho_recognize_font_1_shin+0x2bf>
jp     13bf <ho_recognize_font_1_shin+0x2bf>
jmp    13d5 <ho_recognize_font_1_shin+0x2d5>
movsd  -0x18(%rbp),%xmm0
movsd  0xc4c(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x168(%rax),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1429 <ho_recognize_font_1_shin+0x329>
jp     1429 <ho_recognize_font_1_shin+0x329>
mov    -0x8(%rbp),%rax
movsd  0x160(%rax),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1429 <ho_recognize_font_1_shin+0x329>
jp     1429 <ho_recognize_font_1_shin+0x329>
movsd  -0x18(%rbp),%xmm0
movsd  0xbf8(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
cmpl   $0x3,-0xc(%rbp)
je     1449 <ho_recognize_font_1_shin+0x349>
movsd  -0x18(%rbp),%xmm0
movsd  0xbd0(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<ho_recognize_font_1_shin>:
movsd  0xf8(%rdi),%xmm4
movsd  0x108(%rdi),%xmm0
movsd  0x160(%rdi),%xmm8
movapd %xmm8,%xmm1
movhpd 0x100(%rdi),%xmm1
movsd  0x168(%rdi),%xmm9
movapd 0xec9(%rip),%xmm2
mulpd  %xmm2,%xmm1
movapd %xmm9,%xmm5
unpcklpd %xmm0,%xmm5
mulpd  %xmm2,%xmm5
addpd  %xmm1,%xmm5
movsd  0x158(%rdi),%xmm6
movapd %xmm6,%xmm1
unpcklpd %xmm4,%xmm1
mulpd  %xmm2,%xmm1
addpd  %xmm5,%xmm1
cvttpd2dq %xmm1,%xmm5
xorpd  %xmm10,%xmm10
movsd  0x220(%rdi),%xmm1
cmpneqsd %xmm10,%xmm1
movsd  0xe9d(%rip),%xmm7
andpd  %xmm7,%xmm1
movsd  0x78(%rdi),%xmm3
cmpneqsd %xmm10,%xmm3
movapd %xmm3,%xmm2
andnpd %xmm1,%xmm2
addsd  %xmm7,%xmm1
andpd  %xmm1,%xmm3
orpd   %xmm2,%xmm3
movsd  0xe7a(%rip),%xmm7
cmpneqsd %xmm10,%xmm6
movapd %xmm6,%xmm1
andnpd %xmm3,%xmm1
addsd  %xmm7,%xmm3
andpd  %xmm3,%xmm6
orpd   %xmm1,%xmm6
ucomisd %xmm9,%xmm10
movapd %xmm6,%xmm1
addsd  %xmm7,%xmm1
jne    11dd <ho_recognize_font_1_shin+0xdd>
jp     11dd <ho_recognize_font_1_shin+0xdd>
movapd %xmm6,%xmm1
movapd %xmm1,%xmm2
addsd  %xmm7,%xmm2
cmpneqsd %xmm10,%xmm4
movapd %xmm4,%xmm3
andnpd %xmm1,%xmm3
andpd  %xmm2,%xmm4
orpd   %xmm3,%xmm4
movapd %xmm4,%xmm1
addsd  %xmm7,%xmm1
cmpneqsd %xmm10,%xmm0
movapd %xmm0,%xmm2
andnpd %xmm4,%xmm2
andpd  %xmm1,%xmm0
orpd   %xmm2,%xmm0
pcmpeqd 0xdef(%rip),%xmm5
movsd  0xe07(%rip),%xmm4
pshufd $0x50,%xmm5,%xmm1
movmskpd %xmm1,%eax
test   $0x2,%al
je     123a <ho_recognize_font_1_shin+0x13a>
addsd  %xmm4,%xmm0
test   $0x1,%al
je     1242 <ho_recognize_font_1_shin+0x142>
addsd  %xmm4,%xmm0
ucomisd %xmm9,%xmm10
movsd  0x208(%rdi),%xmm1
cmpneqsd %xmm10,%xmm1
movapd %xmm1,%xmm2
andnpd %xmm0,%xmm2
addsd  %xmm4,%xmm0
andpd  %xmm1,%xmm0
orpd   %xmm2,%xmm0
movapd %xmm0,%xmm1
addsd  %xmm4,%xmm1
movsd  0x200(%rdi),%xmm2
cmpneqsd %xmm10,%xmm2
movapd %xmm2,%xmm3
andnpd %xmm0,%xmm3
andpd  %xmm1,%xmm2
orpd   %xmm3,%xmm2
movsd  0xda1(%rip),%xmm3
movsd  0x178(%rdi),%xmm0
cmpneqsd %xmm10,%xmm0
movapd %xmm0,%xmm1
andnpd %xmm2,%xmm1
addsd  %xmm3,%xmm2
andpd  %xmm2,%xmm0
orpd   %xmm1,%xmm0
jne    12df <ho_recognize_font_1_shin+0x1df>
jp     12df <ho_recognize_font_1_shin+0x1df>
cmpneqsd %xmm10,%xmm8
movapd %xmm8,%xmm1
andpd  %xmm0,%xmm1
addsd  %xmm3,%xmm0
andnpd %xmm0,%xmm8
orpd   %xmm1,%xmm8
movapd %xmm8,%xmm0
test   $0x2,%al
jne    12eb <ho_recognize_font_1_shin+0x1eb>
addsd  0xd55(%rip),%xmm0
ret

LLVM IR (-O0):
define double @ho_recognize_font_1_shin(double* %0) {
%2 = alloca double*
%3 = alloca i32
%4 = alloca i32
%5 = alloca double
store double* %0, double** %2
store double 0.000000e+00, double* %5
%6 = load double*, double** %2
%7 = getelementptr inbounds double, double* %6, i64 33
%8 = load double, double* %7
%9 = load double*, double** %2
%10 = getelementptr inbounds double, double* %9, i64 32
%11 = load double, double* %10
%12 = fmul double %11, 1.000000e+01
%13 = call double @llvm.fmuladd.f64(double %8, double 1.000000e+01, double %12)
%14 = load double*, double** %2
%15 = getelementptr inbounds double, double* %14, i64 31
%16 = load double, double* %15
%17 = call double @llvm.fmuladd.f64(double %16, double 1.000000e+01, double %13)
%18 = fptosi double %17 to i32
store i32 %18, i32* %3
%19 = load double*, double** %2
%20 = getelementptr inbounds double, double* %19, i64 45
%21 = load double, double* %20
%22 = load double*, double** %2
%23 = getelementptr inbounds double, double* %22, i64 44
%24 = load double, double* %23
%25 = fmul double %24, 1.000000e+01
%26 = call double @llvm.fmuladd.f64(double %21, double 1.000000e+01, double %25)
%27 = load double*, double** %2
%28 = getelementptr inbounds double, double* %27, i64 43
%29 = load double, double* %28
%30 = call double @llvm.fmuladd.f64(double %29, double 1.000000e+01, double %26)
%31 = fptosi double %30 to i32
store i32 %31, i32* %4
%32 = load double*, double** %2
%33 = getelementptr inbounds double, double* %32, i64 68
%34 = load double, double* %33
%35 = fcmp une double %34, 0.000000e+00
br i1 %35, label %36, label %39
36: ; preds = %1
%37 = load double, double* %5
%38 = fadd double %37, 3.000000e-01
store double %38, double* %5
br label %39
39: ; preds = %36, %1
%40 = load double*, double** %2
%41 = getelementptr inbounds double, double* %40, i64 15
%42 = load double, double* %41
%43 = fcmp une double %42, 0.000000e+00
br i1 %43, label %44, label %47
44: ; preds = %39
%45 = load double, double* %5
%46 = fadd double %45, 3.000000e-01
store double %46, double* %5
br label %47
47: ; preds = %44, %39
%48 = load double*, double** %2
%49 = getelementptr inbounds double, double* %48, i64 43
%50 = load double, double* %49
%51 = fcmp une double %50, 0.000000e+00
br i1 %51, label %52, label %55
52: ; preds = %47
%53 = load double, double* %5
%54 = fadd double %53, 1.000000e-01
store double %54, double* %5
br label %55
55: ; preds = %52, %47
%56 = load double*, double** %2
%57 = getelementptr inbounds double, double* %56, i64 45
%58 = load double, double* %57
%59 = fcmp une double %58, 0.000000e+00
br i1 %59, label %60, label %63
60: ; preds = %55
%61 = load double, double* %5
%62 = fadd double %61, 1.000000e-01
store double %62, double* %5
br label %63
63: ; preds = %60, %55
%64 = load double*, double** %2
%65 = getelementptr inbounds double, double* %64, i64 31
%66 = load double, double* %65
%67 = fcmp une double %66, 0.000000e+00
br i1 %67, label %68, label %71
68: ; preds = %63
%69 = load double, double* %5
%70 = fadd double %69, 1.000000e-01
store double %70, double* %5
br label %71
71: ; preds = %68, %63
%72 = load double*, double** %2
%73 = getelementptr inbounds double, double* %72, i64 33
%74 = load double, double* %73
%75 = fcmp une double %74, 0.000000e+00
br i1 %75, label %76, label %79
76: ; preds = %71
%77 = load double, double* %5
%78 = fadd double %77, 1.000000e-01
store double %78, double* %5
br label %79
79: ; preds = %76, %71
%80 = load i32, i32* %3
%81 = icmp eq i32 %80, 3
br i1 %81, label %82, label %85
82: ; preds = %79
%83 = load double, double* %5
%84 = fadd double %83, 2.000000e-01
store double %84, double* %5
br label %85
85: ; preds = %82, %79
%86 = load i32, i32* %4
%87 = icmp eq i32 %86, 2
br i1 %87, label %88, label %91
88: ; preds = %85
%89 = load double, double* %5
%90 = fadd double %89, 2.000000e-01
store double %90, double* %5
br label %91
91: ; preds = %88, %85
%92 = load double*, double** %2
%93 = getelementptr inbounds double, double* %92, i64 65
%94 = load double, double* %93
%95 = fcmp une double %94, 0.000000e+00
br i1 %95, label %96, label %99
96: ; preds = %91
%97 = load double, double* %5
%98 = fadd double %97, 2.000000e-01
store double %98, double* %5
br label %99
99: ; preds = %96, %91
%100 = load double*, double** %2
%101 = getelementptr inbounds double, double* %100, i64 64
%102 = load double, double* %101
%103 = fcmp une double %102, 0.000000e+00
br i1 %103, label %104, label %107
104: ; preds = %99
%105 = load double, double* %5
%106 = fadd double %105, 2.000000e-01
store double %106, double* %5
br label %107
107: ; preds = %104, %99
%108 = load double*, double** %2
%109 = getelementptr inbounds double, double* %108, i64 47
%110 = load double, double* %109
%111 = fcmp une double %110, 0.000000e+00
br i1 %111, label %112, label %115
112: ; preds = %107
%113 = load double, double* %5
%114 = fsub double %113, 2.000000e-01
store double %114, double* %5
br label %115
115: ; preds = %112, %107
%116 = load double*, double** %2
%117 = getelementptr inbounds double, double* %116, i64 45
%118 = load double, double* %117
%119 = fcmp une double %118, 0.000000e+00
br i1 %119, label %128, label %120
120: ; preds = %115
%121 = load double*, double** %2
%122 = getelementptr inbounds double, double* %121, i64 44
%123 = load double, double* %122
%124 = fcmp une double %123, 0.000000e+00
br i1 %124, label %128, label %125
125: ; preds = %120
%126 = load double, double* %5
%127 = fsub double %126, 2.000000e-01
store double %127, double* %5
br label %128
128: ; preds = %125, %120, %115
%129 = load i32, i32* %3
%130 = icmp ne i32 %129, 3
br i1 %130, label %131, label %134
131: ; preds = %128
%132 = load double, double* %5
%133 = fsub double %132, 1.000000e-01
store double %133, double* %5
br label %134
134: ; preds = %131, %128
%135 = load double, double* %5
ret double %135
}

LLVM IR (-O2):
define double @ho_recognize_font_1_shin(double* nocapture %0) {
%2 = getelementptr inbounds double, double* %0, i64 33
%3 = load double, double* %2
%4 = getelementptr inbounds double, double* %0, i64 32
%5 = load double, double* %4
%6 = getelementptr inbounds double, double* %0, i64 31
%7 = load double, double* %6
%8 = getelementptr inbounds double, double* %0, i64 45
%9 = load double, double* %8
%10 = getelementptr inbounds double, double* %0, i64 44
%11 = load double, double* %10
%12 = insertelement <2 x double> poison, double %11, i64 0
%13 = insertelement <2 x double> %12, double %5, i64 1
%14 = fmul <2 x double> %13, <double 1.000000e+01, double 1.000000e+01>
%15 = insertelement <2 x double> poison, double %9, i64 0
%16 = insertelement <2 x double> %15, double %3, i64 1
%17 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %16, <2 x double> <double 1.000000e+01, double 1.000000e+01>, <2 x double> %14)
%18 = getelementptr inbounds double, double* %0, i64 43
%19 = load double, double* %18
%20 = insertelement <2 x double> poison, double %19, i64 0
%21 = insertelement <2 x double> %20, double %7, i64 1
%22 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %21, <2 x double> <double 1.000000e+01, double 1.000000e+01>, <2 x double> %17)
%23 = fptosi <2 x double> %22 to <2 x i32>
%24 = getelementptr inbounds double, double* %0, i64 68
%25 = load double, double* %24
%26 = fcmp une double %25, 0.000000e+00
%27 = select i1 %26, double 3.000000e-01, double 0.000000e+00
%28 = getelementptr inbounds double, double* %0, i64 15
%29 = load double, double* %28
%30 = fcmp une double %29, 0.000000e+00
%31 = fadd double %27, 3.000000e-01
%32 = select i1 %30, double %31, double %27
%33 = fcmp une double %19, 0.000000e+00
%34 = fadd double %32, 1.000000e-01
%35 = select i1 %33, double %34, double %32
%36 = fcmp une double %9, 0.000000e+00
%37 = fadd double %35, 1.000000e-01
%38 = select i1 %36, double %37, double %35
%39 = fcmp une double %7, 0.000000e+00
%40 = fadd double %38, 1.000000e-01
%41 = select i1 %39, double %40, double %38
%42 = fcmp une double %3, 0.000000e+00
%43 = fadd double %41, 1.000000e-01
%44 = select i1 %42, double %43, double %41
%45 = fadd double %44, 2.000000e-01
%46 = icmp eq <2 x i32> %23, <i32 2, i32 3>
%47 = extractelement <2 x i1> %46, i64 1
%48 = select i1 %47, double %45, double %44
%49 = fadd double %48, 2.000000e-01
%50 = extractelement <2 x i1> %46, i64 0
%51 = select i1 %50, double %49, double %48
%52 = getelementptr inbounds double, double* %0, i64 65
%53 = load double, double* %52
%54 = fcmp une double %53, 0.000000e+00
%55 = fadd double %51, 2.000000e-01
%56 = select i1 %54, double %55, double %51
%57 = getelementptr inbounds double, double* %0, i64 64
%58 = load double, double* %57
%59 = fcmp une double %58, 0.000000e+00
%60 = fadd double %56, 2.000000e-01
%61 = select i1 %59, double %60, double %56
%62 = getelementptr inbounds double, double* %0, i64 47
%63 = load double, double* %62
%64 = fcmp une double %63, 0.000000e+00
%65 = fadd double %61, -2.000000e-01
%66 = select i1 %64, double %65, double %61
%67 = fcmp une double %11, 0.000000e+00
%68 = select i1 %36, i1 true, i1 %67
%69 = fadd double %66, -2.000000e-01
%70 = select i1 %68, double %66, double %69
%71 = fadd double %70, -1.000000e-01
%72 = select i1 %47, double %70, double %71
ret double %72
}