#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 */
scalar_t__ rounding(double);
void hist_Eq(unsigned char *pImagedata, long width, long height) {
  static double s_hist_eq[256] = {0.0};
  static double sum_of_hist[256] = {0.0};
  long i, j, k, n, state_hst[256] = {0};
  unsigned char a;
  n = width * height;
  for (i = 0; i < height; i++) {
    for (j = 0; j < width; j++) {
      a = pImagedata[i * width + j];
      state_hst[a] = state_hst[a] + 1;
    }
  }
  for (i = 0; i < 256; i++)
    s_hist_eq[i] = (double)state_hst[i] / (double)n;
  sum_of_hist[0] = s_hist_eq[0];
  for (i = 1; i < 256; i++) {
    sum_of_hist[i] = sum_of_hist[i - 1] + s_hist_eq[i];
  }
  for (i = 0; i < height; i++) {
    for (j = 0; j < width; j++) {
      a = pImagedata[i * width + j];
      pImagedata[i * width + j] =
          (unsigned char)rounding(sum_of_hist[a] * 255.0);
    }
  }
}


x86 assembly (clang, -O0):
<hist_Eq>:
push   %rbp
mov    %rsp,%rbp
sub    $0x850,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
lea    -0x840(%rbp),%rdi
xor    %esi,%esi
mov    $0x800,%edx
call   1030 <memset@plt>
mov    -0x10(%rbp),%rax
imul   -0x18(%rbp),%rax
mov    %rax,-0x38(%rbp)
movq   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%rax
cmp    -0x18(%rbp),%rax
jge    11e6 <hist_Eq+0xc6>
movq   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%rax
cmp    -0x10(%rbp),%rax
jge    11d0 <hist_Eq+0xb0>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%rcx
imul   -0x10(%rbp),%rcx
add    -0x28(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x841(%rbp)
movzbl -0x841(%rbp),%eax
mov    -0x840(%rbp,%rax,8),%rcx
ff
add    $0x1,%rcx
movzbl -0x841(%rbp),%eax
mov    %rcx,-0x840(%rbp,%rax,8)
ff
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    1175 <hist_Eq+0x55>
jmp    11d5 <hist_Eq+0xb5>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
jmp    115f <hist_Eq+0x3f>
movq   $0x0,-0x20(%rbp)
cmpq   $0x100,-0x20(%rbp)
jge    1235 <hist_Eq+0x115>
mov    -0x20(%rbp),%rax
cvtsi2sdq -0x840(%rbp,%rax,8),%xmm0
f7 ff ff
cvtsi2sdq -0x38(%rbp),%xmm1
divsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rcx
lea    0x2e21(%rip),%rax
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
jmp    11ee <hist_Eq+0xce>
movsd  0x2e03(%rip),%xmm0
movsd  %xmm0,0x35fb(%rip)
movq   $0x1,-0x20(%rbp)
cmpq   $0x100,-0x20(%rbp)
jge    12a0 <hist_Eq+0x180>
mov    -0x20(%rbp),%rcx
sub    $0x1,%rcx
lea    0x35d6(%rip),%rax
movsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rcx
lea    0x2dc6(%rip),%rax
addsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rcx
lea    0x35b6(%rip),%rax
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
jmp    124d <hist_Eq+0x12d>
movq   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%rax
cmp    -0x18(%rbp),%rax
jge    1345 <hist_Eq+0x225>
movq   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%rax
cmp    -0x10(%rbp),%rax
jge    132f <hist_Eq+0x20f>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%rcx
imul   -0x10(%rbp),%rcx
add    -0x28(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x841(%rbp)
movzbl -0x841(%rbp),%eax
mov    %eax,%ecx
movsd  0xd09(%rip),%xmm0
lea    0x3542(%rip),%rax
mulsd  (%rax,%rcx,8),%xmm0
call   1040 <rounding@plt>
mov    %al,%dl
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%rcx
imul   -0x10(%rbp),%rcx
add    -0x28(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    12be <hist_Eq+0x19e>
jmp    1334 <hist_Eq+0x214>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
jmp    12a8 <hist_Eq+0x188>
add    $0x850,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<hist_Eq>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x808,%rsp
mov    %rdx,%r14
mov    %rsi,%r15
mov    %rdi,%rbx
mov    %rsp,%rdi
mov    $0x800,%edx
xor    %esi,%esi
call   1030 <memset@plt>
mov    %r14,%r8
imul   %r15,%r8
test   %r14,%r14
jle    11c7 <hist_Eq+0xa7>
mov    %r15,%rcx
and    $0xfffffffffffffffe,%rcx
lea    0x1(%rbx),%rdx
xor    %eax,%eax
jmp    117c <hist_Eq+0x5c>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    $0x1,%rax
add    %r15,%rdx
cmp    %r14,%rax
je     11c7 <hist_Eq+0xa7>
test   %r15,%r15
jle    1170 <hist_Eq+0x50>
xor    %edi,%edi
cmp    $0x1,%r15
je     11ac <hist_Eq+0x8c>
nopl   0x0(%rax)
movzbl -0x1(%rdx,%rdi,1),%ebp
addq   $0x1,(%rsp,%rbp,8)
movzbl (%rdx,%rdi,1),%ebp
addq   $0x1,(%rsp,%rbp,8)
add    $0x2,%rdi
cmp    %rdi,%rcx
jne    1190 <hist_Eq+0x70>
test   $0x1,%r15b
je     1170 <hist_Eq+0x50>
mov    %rax,%rsi
imul   %r15,%rsi
add    %rsi,%rdi
movzbl (%rbx,%rdi,1),%esi
addq   $0x1,(%rsp,%rsi,8)
jmp    1170 <hist_Eq+0x50>
cvtsi2sd %r8,%xmm0
unpcklpd %xmm0,%xmm0
xor    %ecx,%ecx
lea    0x2e67(%rip),%rax
nopl   0x0(%rax)
movdqa (%rsp,%rcx,8),%xmm1
movq   %xmm1,%rdx
xorps  %xmm2,%xmm2
cvtsi2sd %rdx,%xmm2
pshufd $0xee,%xmm1,%xmm1
movq   %xmm1,%rdx
xorps  %xmm1,%xmm1
cvtsi2sd %rdx,%xmm1
movdqa 0x10(%rsp,%rcx,8),%xmm3
unpcklpd %xmm1,%xmm2
divpd  %xmm0,%xmm2
movapd %xmm2,(%rax,%rcx,8)
movq   %xmm3,%rdx
xorps  %xmm1,%xmm1
cvtsi2sd %rdx,%xmm1
pshufd $0xee,%xmm3,%xmm2
movq   %xmm2,%rdx
xorps  %xmm2,%xmm2
cvtsi2sd %rdx,%xmm2
unpcklpd %xmm2,%xmm1
divpd  %xmm0,%xmm1
movapd %xmm1,0x10(%rax,%rcx,8)
add    $0x4,%rcx
cmp    $0x100,%rcx
jne    11e0 <hist_Eq+0xc0>
movsd  0x2de7(%rip),%xmm0
movsd  %xmm0,0x35df(%rip)
xor    %ecx,%ecx
lea    0x35d6(%rip),%r12
nopw   0x0(%rax,%rax,1)
addsd  0x8(%rax,%rcx,8),%xmm0
movsd  %xmm0,0x8(%r12,%rcx,8)
addsd  0x10(%rax,%rcx,8),%xmm0
movsd  %xmm0,0x10(%r12,%rcx,8)
addsd  0x18(%rax,%rcx,8),%xmm0
movsd  %xmm0,0x18(%r12,%rcx,8)
add    $0x3,%rcx
cmp    $0xff,%rcx
jne    1270 <hist_Eq+0x150>
test   %r14,%r14
jle    1309 <hist_Eq+0x1e9>
xor    %r13d,%r13d
movsd  0xd4c(%rip),%xmm1
jmp    12cc <hist_Eq+0x1ac>
cs nopw 0x0(%rax,%rax,1)
add    $0x1,%r13
add    %r15,%rbx
cmp    %r14,%r13
je     1309 <hist_Eq+0x1e9>
test   %r15,%r15
jle    12c0 <hist_Eq+0x1a0>
xor    %ebp,%ebp
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movzbl (%rbx,%rbp,1),%eax
movsd  (%r12,%rax,8),%xmm0
mulsd  %xmm1,%xmm0
call   1040 <rounding@plt>
movsd  0xd05(%rip),%xmm1
mov    %al,(%rbx,%rbp,1)
add    $0x1,%rbp
cmp    %rbp,%r15
jne    12e0 <hist_Eq+0x1c0>
jmp    12c0 <hist_Eq+0x1a0>
add    $0x808,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@hist_Eq.s_hist_eq = internal global [256 x double] zeroinitializer
@hist_Eq.sum_of_hist = internal global [256 x double] zeroinitializer
define void @hist_Eq(i8* %0, i64 %1, i64 %2) {
%4 = alloca i8*
%5 = alloca i64
%6 = alloca i64
%7 = alloca i64
%8 = alloca i64
%9 = alloca i64
%10 = alloca i64
%11 = alloca [256 x i64]
%12 = alloca i8
store i8* %0, i8** %4
store i64 %1, i64* %5
store i64 %2, i64* %6
%13 = bitcast [256 x i64]* %11 to i8*
%14 = load i64, i64* %5
%15 = load i64, i64* %6
%16 = mul nsw i64 %14, %15
store i64 %16, i64* %10
store i64 0, i64* %7
br label %17
17: ; preds = %47, %3
%18 = load i64, i64* %7
%19 = load i64, i64* %6
%20 = icmp slt i64 %18, %19
br i1 %20, label %21, label %50
21: ; preds = %17
store i64 0, i64* %8
br label %22
22: ; preds = %43, %21
%23 = load i64, i64* %8
%24 = load i64, i64* %5
%25 = icmp slt i64 %23, %24
br i1 %25, label %26, label %46
26: ; preds = %22
%27 = load i8*, i8** %4
%28 = load i64, i64* %7
%29 = load i64, i64* %5
%30 = mul nsw i64 %28, %29
%31 = load i64, i64* %8
%32 = add nsw i64 %30, %31
%33 = getelementptr inbounds i8, i8* %27, i64 %32
%34 = load i8, i8* %33
store i8 %34, i8* %12
%35 = load i8, i8* %12
%36 = zext i8 %35 to i64
%37 = getelementptr inbounds [256 x i64], [256 x i64]* %11, i64 0, i64 %36
%38 = load i64, i64* %37
%39 = add nsw i64 %38, 1
%40 = load i8, i8* %12
%41 = zext i8 %40 to i64
%42 = getelementptr inbounds [256 x i64], [256 x i64]* %11, i64 0, i64 %41
store i64 %39, i64* %42
br label %43
43: ; preds = %26
%44 = load i64, i64* %8
%45 = add nsw i64 %44, 1
store i64 %45, i64* %8
br label %22
46: ; preds = %22
br label %47
47: ; preds = %46
%48 = load i64, i64* %7
%49 = add nsw i64 %48, 1
store i64 %49, i64* %7
br label %17
50: ; preds = %17
store i64 0, i64* %7
br label %51
51: ; preds = %64, %50
%52 = load i64, i64* %7
%53 = icmp slt i64 %52, 256
br i1 %53, label %54, label %67
54: ; preds = %51
%55 = load i64, i64* %7
%56 = getelementptr inbounds [256 x i64], [256 x i64]* %11, i64 0, i64 %55
%57 = load i64, i64* %56
%58 = sitofp i64 %57 to double
%59 = load i64, i64* %10
%60 = sitofp i64 %59 to double
%61 = fdiv double %58, %60
%62 = load i64, i64* %7
%63 = getelementptr inbounds [256 x double], [256 x double]* @hist_Eq.s_hist_eq, i64 0, i64 %62
store double %61, double* %63
br label %64
64: ; preds = %54
%65 = load i64, i64* %7
%66 = add nsw i64 %65, 1
store i64 %66, i64* %7
br label %51
67: ; preds = %51
%68 = load double, double* getelementptr inbounds ([256 x double], [256 x double]* @hist_Eq.s_hist_eq, i64 0, i64 0)
store double %68, double* getelementptr inbounds ([256 x double], [256 x double]* @hist_Eq.sum_of_hist, i64 0, i64 0)
store i64 1, i64* %7
br label %69
69: ; preds = %83, %67
%70 = load i64, i64* %7
%71 = icmp slt i64 %70, 256
br i1 %71, label %72, label %86
72: ; preds = %69
%73 = load i64, i64* %7
%74 = sub nsw i64 %73, 1
%75 = getelementptr inbounds [256 x double], [256 x double]* @hist_Eq.sum_of_hist, i64 0, i64 %74
%76 = load double, double* %75
%77 = load i64, i64* %7
%78 = getelementptr inbounds [256 x double], [256 x double]* @hist_Eq.s_hist_eq, i64 0, i64 %77
%79 = load double, double* %78
%80 = fadd double %76, %79
%81 = load i64, i64* %7
%82 = getelementptr inbounds [256 x double], [256 x double]* @hist_Eq.sum_of_hist, i64 0, i64 %81
store double %80, double* %82
br label %83
83: ; preds = %72
%84 = load i64, i64* %7
%85 = add nsw i64 %84, 1
store i64 %85, i64* %7
br label %69
86: ; preds = %69
store i64 0, i64* %7
br label %87
87: ; preds = %123, %86
%88 = load i64, i64* %7
%89 = load i64, i64* %6
%90 = icmp slt i64 %88, %89
br i1 %90, label %91, label %126
91: ; preds = %87
store i64 0, i64* %8
br label %92
92: ; preds = %119, %91
%93 = load i64, i64* %8
%94 = load i64, i64* %5
%95 = icmp slt i64 %93, %94
br i1 %95, label %96, label %122
96: ; preds = %92
%97 = load i8*, i8** %4
%98 = load i64, i64* %7
%99 = load i64, i64* %5
%100 = mul nsw i64 %98, %99
%101 = load i64, i64* %8
%102 = add nsw i64 %100, %101
%103 = getelementptr inbounds i8, i8* %97, i64 %102
%104 = load i8, i8* %103
store i8 %104, i8* %12
%105 = load i8, i8* %12
%106 = zext i8 %105 to i64
%107 = getelementptr inbounds [256 x double], [256 x double]* @hist_Eq.sum_of_hist, i64 0, i64 %106
%108 = load double, double* %107
%109 = fmul double %108, 2.550000e+02
%110 = call i64 @rounding(double %109)
%111 = trunc i64 %110 to i8
%112 = load i8*, i8** %4
%113 = load i64, i64* %7
%114 = load i64, i64* %5
%115 = mul nsw i64 %113, %114
%116 = load i64, i64* %8
%117 = add nsw i64 %115, %116
%118 = getelementptr inbounds i8, i8* %112, i64 %117
store i8 %111, i8* %118
br label %119
119: ; preds = %96
%120 = load i64, i64* %8
%121 = add nsw i64 %120, 1
store i64 %121, i64* %8
br label %92
122: ; preds = %92
br label %123
123: ; preds = %122
%124 = load i64, i64* %7
%125 = add nsw i64 %124, 1
store i64 %125, i64* %7
br label %87
126: ; preds = %87
ret void
}

LLVM IR (-O2):
@hist_Eq.s_hist_eq = internal unnamed_addr global [256 x double] zeroinitializer
@hist_Eq.sum_of_hist = internal unnamed_addr global [256 x double] zeroinitializer
define void @hist_Eq(i8* nocapture %0, i64 %1, i64 %2) {
%4 = alloca [256 x i64]
%5 = bitcast [256 x i64]* %4 to i8*
%6 = mul nsw i64 %2, %1
%7 = icmp sgt i64 %2, 0
br i1 %7, label %8, label %18
8: ; preds = %3
%9 = icmp sgt i64 %1, 0
%10 = and i64 %1, 1
%11 = icmp eq i64 %1, 1
%12 = and i64 %1, -2
%13 = icmp eq i64 %10, 0
br label %14
14: ; preds = %8, %72
%15 = phi i64 [ 0, %8 ], [ %73, %72 ]
br i1 %9, label %16, label %72
16: ; preds = %14
%17 = mul nsw i64 %15, %1
br i1 %11, label %62, label %41
18: ; preds = %72, %3
%19 = sitofp i64 %6 to double
%20 = insertelement <2 x double> poison, double %19, i64 0
%21 = shufflevector <2 x double> %20, <2 x double> poison, <2 x i32> zeroinitializer
br label %22
22: ; preds = %22, %18
%23 = phi i64 [ 0, %18 ], [ %39, %22 ]
%24 = getelementptr inbounds [256 x i64], [256 x i64]* %4, i64 0, i64 %23
%25 = bitcast i64* %24 to <2 x i64>*
%26 = load <2 x i64>, <2 x i64>* %25
%27 = sitofp <2 x i64> %26 to <2 x double>
%28 = fdiv <2 x double> %27, %21
%29 = getelementptr inbounds [256 x double], [256 x double]* @hist_Eq.s_hist_eq, i64 0, i64 %23
%30 = bitcast double* %29 to <2 x double>*
store <2 x double> %28, <2 x double>* %30
%31 = or i64 %23, 2
%32 = getelementptr inbounds [256 x i64], [256 x i64]* %4, i64 0, i64 %31
%33 = bitcast i64* %32 to <2 x i64>*
%34 = load <2 x i64>, <2 x i64>* %33
%35 = sitofp <2 x i64> %34 to <2 x double>
%36 = fdiv <2 x double> %35, %21
%37 = getelementptr inbounds [256 x double], [256 x double]* @hist_Eq.s_hist_eq, i64 0, i64 %31
%38 = bitcast double* %37 to <2 x double>*
store <2 x double> %36, <2 x double>* %38
%39 = add nuw nsw i64 %23, 4
%40 = icmp eq i64 %39, 256
br i1 %40, label %75, label %22
41: ; preds = %16, %41
%42 = phi i64 [ %59, %41 ], [ 0, %16 ]
%43 = phi i64 [ %60, %41 ], [ 0, %16 ]
%44 = add nsw i64 %42, %17
%45 = getelementptr inbounds i8, i8* %0, i64 %44
%46 = load i8, i8* %45
%47 = zext i8 %46 to i64
%48 = getelementptr inbounds [256 x i64], [256 x i64]* %4, i64 0, i64 %47
%49 = load i64, i64* %48
%50 = add nsw i64 %49, 1
store i64 %50, i64* %48
%51 = or i64 %42, 1
%52 = add nsw i64 %51, %17
%53 = getelementptr inbounds i8, i8* %0, i64 %52
%54 = load i8, i8* %53
%55 = zext i8 %54 to i64
%56 = getelementptr inbounds [256 x i64], [256 x i64]* %4, i64 0, i64 %55
%57 = load i64, i64* %56
%58 = add nsw i64 %57, 1
store i64 %58, i64* %56
%59 = add nuw nsw i64 %42, 2
%60 = add i64 %43, 2
%61 = icmp eq i64 %60, %12
br i1 %61, label %62, label %41
62: ; preds = %41, %16
%63 = phi i64 [ 0, %16 ], [ %59, %41 ]
br i1 %13, label %72, label %64
64: ; preds = %62
%65 = add nsw i64 %63, %17
%66 = getelementptr inbounds i8, i8* %0, i64 %65
%67 = load i8, i8* %66
%68 = zext i8 %67 to i64
%69 = getelementptr inbounds [256 x i64], [256 x i64]* %4, i64 0, i64 %68
%70 = load i64, i64* %69
%71 = add nsw i64 %70, 1
store i64 %71, i64* %69
br label %72
72: ; preds = %64, %62, %14
%73 = add nuw nsw i64 %15, 1
%74 = icmp eq i64 %73, %2
br i1 %74, label %18, label %14
75: ; preds = %22
%76 = load double, double* getelementptr inbounds ([256 x double], [256 x double]* @hist_Eq.s_hist_eq, i64 0, i64 0)
store double %76, double* getelementptr inbounds ([256 x double], [256 x double]* @hist_Eq.sum_of_hist, i64 0, i64 0)
br label %80
77: ; preds = %80
br i1 %7, label %78, label %119
78: ; preds = %77
%79 = icmp sgt i64 %1, 0
br label %99
80: ; preds = %80, %75
%81 = phi double [ %76, %75 ], [ %95, %80 ]
%82 = phi i64 [ 1, %75 ], [ %97, %80 ]
%83 = getelementptr inbounds [256 x double], [256 x double]* @hist_Eq.s_hist_eq, i64 0, i64 %82
%84 = load double, double* %83
%85 = fadd double %81, %84
%86 = getelementptr inbounds [256 x double], [256 x double]* @hist_Eq.sum_of_hist, i64 0, i64 %82
store double %85, double* %86
%87 = add nuw nsw i64 %82, 1
%88 = getelementptr inbounds [256 x double], [256 x double]* @hist_Eq.s_hist_eq, i64 0, i64 %87
%89 = load double, double* %88
%90 = fadd double %85, %89
%91 = getelementptr inbounds [256 x double], [256 x double]* @hist_Eq.sum_of_hist, i64 0, i64 %87
store double %90, double* %91
%92 = add nuw nsw i64 %82, 2
%93 = getelementptr inbounds [256 x double], [256 x double]* @hist_Eq.s_hist_eq, i64 0, i64 %92
%94 = load double, double* %93
%95 = fadd double %90, %94
%96 = getelementptr inbounds [256 x double], [256 x double]* @hist_Eq.sum_of_hist, i64 0, i64 %92
store double %95, double* %96
%97 = add nuw nsw i64 %82, 3
%98 = icmp eq i64 %97, 256
br i1 %98, label %77, label %80
99: ; preds = %78, %116
%100 = phi i64 [ 0, %78 ], [ %117, %116 ]
br i1 %79, label %101, label %116
101: ; preds = %99
%102 = mul nsw i64 %100, %1
br label %103
103: ; preds = %101, %103
%104 = phi i64 [ 0, %101 ], [ %114, %103 ]
%105 = add nsw i64 %104, %102
%106 = getelementptr inbounds i8, i8* %0, i64 %105
%107 = load i8, i8* %106
%108 = zext i8 %107 to i64
%109 = getelementptr inbounds [256 x double], [256 x double]* @hist_Eq.sum_of_hist, i64 0, i64 %108
%110 = load double, double* %109
%111 = fmul double %110, 2.550000e+02
%112 = tail call i64 @rounding(double %111)
%113 = trunc i64 %112 to i8
store i8 %113, i8* %106
%114 = add nuw nsw i64 %104, 1
%115 = icmp eq i64 %114, %1
br i1 %115, label %116, label %103
116: ; preds = %103, %99
%117 = add nuw nsw i64 %100, 1
%118 = icmp eq i64 %117, %2
br i1 %118, label %119, label %99
119: ; preds = %116, %77
ret void
}