void init_flag(char **flag, int imax, int jmax, float delx, float dely,
               int *ibound) {
  int i, j;
  float mx, my, x, y, rad1;
  mx = 20.0 / 41.0 * jmax * dely;
  my = mx;
  rad1 = 5.0 / 41.0 * jmax * dely;
  for (i = 1; i <= imax; i++) {
    for (j = 1; j <= jmax; j++) {
      x = (i - 0.5) * delx - mx;
      y = (j - 0.5) * dely - my;
      flag[i][j] = (x * x + y * y <= rad1 * rad1) ? 0x0000 : 0x0010;
    }
  }
  for (i = 0; i <= imax + 1; i++) {
    flag[i][0] = 0x0000;
    flag[i][jmax + 1] = 0x0000;
  }
  for (j = 1; j <= jmax; j++) {
    flag[0][j] = 0x0000;
    flag[imax + 1][j] = 0x0000;
  }
  *ibound = 0;
  for (i = 1; i <= imax; i++) {
    for (j = 1; j <= jmax; j++) {
      if (!(flag[i][j] & 0x0010)) {
        (*ibound)++;
        if (flag[i - 1][j] & 0x0010)
          flag[i][j] |= 0x0004;
        if (flag[i + 1][j] & 0x0010)
          flag[i][j] |= 0x0008;
        if (flag[i][j - 1] & 0x0010)
          flag[i][j] |= 0x0002;
        if (flag[i][j + 1] & 0x0010)
          flag[i][j] |= 0x0001;
      }
    }
  }
}


x86 assembly (clang, -O0):
<init_flag>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
movss  %xmm0,-0x14(%rbp)
movss  %xmm1,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
cvtsi2sdl -0x10(%rbp),%xmm1
movsd  0xedf(%rip),%xmm0
mulsd  %xmm1,%xmm0
movss  -0x18(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x2c(%rbp)
movss  -0x2c(%rbp),%xmm0
movss  %xmm0,-0x30(%rbp)
cvtsi2sdl -0x10(%rbp),%xmm1
movsd  0xea6(%rip),%xmm0
mulsd  %xmm1,%xmm0
movss  -0x18(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x3c(%rbp)
movl   $0x1,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0xc(%rbp),%eax
jg     1299 <init_flag+0x199>
movl   $0x1,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x10(%rbp),%eax
jg     1286 <init_flag+0x186>
cvtsi2sdl -0x24(%rbp),%xmm0
movsd  0xe69(%rip),%xmm1
subsd  %xmm1,%xmm0
movss  -0x14(%rbp),%xmm1
cvtss2sd %xmm1,%xmm2
movss  -0x2c(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x34(%rbp)
cvtsi2sdl -0x28(%rbp),%xmm0
movsd  0xe1e(%rip),%xmm1
subsd  %xmm1,%xmm0
movss  -0x18(%rbp),%xmm1
cvtss2sd %xmm1,%xmm2
movss  -0x30(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x38(%rbp)
movss  -0x34(%rbp),%xmm1
movss  -0x34(%rbp),%xmm2
movss  -0x38(%rbp),%xmm0
mulss  -0x38(%rbp),%xmm0
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
movss  -0x3c(%rbp),%xmm0
mulss  -0x3c(%rbp),%xmm0
mov    $0x10,%eax
xor    %ecx,%ecx
ucomiss %xmm1,%xmm0
cmovae %ecx,%eax
mov    %al,%dl
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x28(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    118e <init_flag+0x8e>
jmp    128b <init_flag+0x18b>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    117b <init_flag+0x7b>
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    -0xc(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jg     12e7 <init_flag+0x1e7>
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movb   $0x0,(%rax)
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x10(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    12a0 <init_flag+0x1a0>
movl   $0x1,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x10(%rbp),%eax
jg     1330 <init_flag+0x230>
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
movslq -0x28(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x28(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    12ee <init_flag+0x1ee>
mov    -0x20(%rbp),%rax
movl   $0x0,(%rax)
movl   $0x1,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0xc(%rbp),%eax
jg     14b2 <init_flag+0x3b2>
movl   $0x1,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x10(%rbp),%eax
jg     149f <init_flag+0x39f>
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
and    $0x10,%eax
cmp    $0x0,%eax
jne    148c <init_flag+0x38c>
mov    -0x20(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
mov    -0x8(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     13ca <init_flag+0x2ca>
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%edx
or     $0x4,%edx
mov    %dl,(%rax,%rcx,1)
mov    -0x8(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     1409 <init_flag+0x309>
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%edx
or     $0x8,%edx
mov    %dl,(%rax,%rcx,1)
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x28(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     1448 <init_flag+0x348>
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%edx
or     $0x2,%edx
mov    %dl,(%rax,%rcx,1)
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x28(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     1487 <init_flag+0x387>
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%edx
or     $0x1,%edx
mov    %dl,(%rax,%rcx,1)
jmp    148c <init_flag+0x38c>
jmp    1491 <init_flag+0x391>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1354 <init_flag+0x254>
jmp    14a4 <init_flag+0x3a4>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    1341 <init_flag+0x241>
pop    %rbp
ret

x86 assembly (clang, -O2):
<init_flag>:
push   %r15
push   %r14
push   %rbx
test   %esi,%esi
jle    11d4 <init_flag+0xd4>
cvtsi2sd %edx,%xmm3
cvtss2sd %xmm1,%xmm1
movsd  0xee3(%rip),%xmm2
mulsd  %xmm3,%xmm2
mulsd  %xmm1,%xmm2
cvtsd2ss %xmm2,%xmm2
mulsd  0xed7(%rip),%xmm3
mulsd  %xmm1,%xmm3
cvtsd2ss %xmm3,%xmm3
cvtss2sd %xmm0,%xmm0
cvtss2sd %xmm3,%xmm3
mulss  %xmm2,%xmm2
lea    0x1(%rdx),%r9d
lea    0x1(%rsi),%r8d
mov    $0x1,%r10d
movsd  0xeb5(%rip),%xmm4
jmp    1169 <init_flag+0x69>
nopl   (%rax)
add    $0x1,%r10
cmp    %r8,%r10
je     11d8 <init_flag+0xd8>
test   %edx,%edx
jle    1160 <init_flag+0x60>
xorps  %xmm5,%xmm5
cvtsi2sd %r10d,%xmm5
addsd  %xmm4,%xmm5
mulsd  %xmm0,%xmm5
addsd  %xmm3,%xmm5
cvtsd2ss %xmm5,%xmm5
mov    $0x1,%eax
nopw   0x0(%rax,%rax,1)
xorps  %xmm6,%xmm6
cvtsi2sd %eax,%xmm6
addsd  %xmm4,%xmm6
mulsd  %xmm1,%xmm6
addsd  %xmm3,%xmm6
cvtsd2ss %xmm6,%xmm6
mulss  %xmm6,%xmm6
movaps %xmm5,%xmm7
mulss  %xmm5,%xmm7
addss  %xmm6,%xmm7
ucomiss %xmm7,%xmm2
setb   %r11b
shl    $0x4,%r11b
mov    (%rdi,%r10,8),%rbx
mov    %r11b,(%rbx,%rax,1)
add    $0x1,%rax
cmp    %rax,%r9
jne    1190 <init_flag+0x90>
jmp    1160 <init_flag+0x60>
lea    0x1(%rsi),%r8d
cmp    $0xffffffff,%esi
jl     128a <init_flag+0x18a>
xor    %eax,%eax
test   %r8d,%r8d
mov    $0x0,%ebx
cmovg  %r8d,%ebx
movslq %edx,%r10
lea    0x1(%rbx),%r11
mov    %r11d,%r9d
and    $0x3,%r9d
cmp    $0x3,%ebx
jb     1263 <init_flag+0x163>
and    $0xfffffffc,%r11d
xor    %eax,%eax
nopl   0x0(%rax,%rax,1)
mov    (%rdi,%rax,8),%rbx
movb   $0x0,(%rbx)
mov    (%rdi,%rax,8),%rbx
movb   $0x0,0x1(%rbx,%r10,1)
mov    0x8(%rdi,%rax,8),%rbx
movb   $0x0,(%rbx)
mov    0x8(%rdi,%rax,8),%rbx
movb   $0x0,0x1(%rbx,%r10,1)
mov    0x10(%rdi,%rax,8),%rbx
movb   $0x0,(%rbx)
mov    0x10(%rdi,%rax,8),%rbx
movb   $0x0,0x1(%rbx,%r10,1)
mov    0x18(%rdi,%rax,8),%rbx
movb   $0x0,(%rbx)
mov    0x18(%rdi,%rax,8),%rbx
movb   $0x0,0x1(%rbx,%r10,1)
add    $0x4,%rax
cmp    %rax,%r11
jne    1210 <init_flag+0x110>
test   %r9,%r9
je     128a <init_flag+0x18a>
lea    (%rdi,%rax,8),%r11
xor    %ebx,%ebx
xchg   %ax,%ax
mov    (%r11,%rbx,8),%rax
movb   $0x0,(%rax)
mov    (%r11,%rbx,8),%rax
movb   $0x0,0x1(%rax,%r10,1)
add    $0x1,%rbx
cmp    %rbx,%r9
jne    1270 <init_flag+0x170>
test   %edx,%edx
jle    12f7 <init_flag+0x1f7>
movslq %r8d,%r10
mov    %edx,%r9d
mov    $0x1,%eax
cmp    $0x1,%edx
je     12e2 <init_flag+0x1e2>
mov    %r9d,%r11d
and    $0xfffffffe,%r11d
neg    %r11
mov    $0x1,%eax
nopl   (%rax)
mov    (%rdi),%rbx
movb   $0x0,(%rbx,%rax,1)
mov    (%rdi,%r10,8),%rbx
movb   $0x0,(%rbx,%rax,1)
mov    (%rdi),%rbx
movb   $0x0,0x1(%rbx,%rax,1)
mov    (%rdi,%r10,8),%rbx
movb   $0x0,0x1(%rbx,%rax,1)
lea    (%r11,%rax,1),%rbx
add    $0x2,%rbx
add    $0x2,%rax
cmp    $0x1,%rbx
jne    12b0 <init_flag+0x1b0>
test   $0x1,%r9b
je     12f7 <init_flag+0x1f7>
mov    (%rdi),%rbx
movb   $0x0,(%rbx,%rax,1)
mov    (%rdi,%r10,8),%rbx
movb   $0x0,(%rbx,%rax,1)
movl   $0x0,(%rcx)
test   %esi,%esi
jle    13d0 <init_flag+0x2d0>
lea    0x1(%rdx),%r11d
mov    %r8d,%r8d
mov    $0x1,%r14d
jmp    132c <init_flag+0x22c>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    %r9,%r14
cmp    %r8,%r9
je     13d0 <init_flag+0x2d0>
test   %edx,%edx
jle    13c0 <init_flag+0x2c0>
lea    0x1(%r14),%r9
mov    %r9d,%r10d
mov    $0x1,%esi
jmp    135f <init_flag+0x25f>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
add    $0x1,%rsi
mov    %rsi,%rax
mov    %rax,%rsi
cmp    %r11,%rax
je     1320 <init_flag+0x220>
mov    (%rdi,%r14,8),%rax
testb  $0x10,(%rax,%rsi,1)
jne    1350 <init_flag+0x250>
addl   $0x1,(%rcx)
mov    -0x8(%rdi,%r14,8),%rbx
testb  $0x10,(%rbx,%rsi,1)
je     137b <init_flag+0x27b>
orb    $0x4,(%rax,%rsi,1)
mov    (%rdi,%r10,8),%rax
testb  $0x10,(%rax,%rsi,1)
je     138d <init_flag+0x28d>
mov    (%rdi,%r14,8),%rax
orb    $0x8,(%rax,%rsi,1)
mov    (%rdi,%r14,8),%r15
testb  $0x10,-0x1(%rsi,%r15,1)
je     13a2 <init_flag+0x2a2>
orb    $0x2,(%r15,%rsi,1)
mov    (%rdi,%r14,8),%r15
lea    0x1(%rsi),%rax
mov    %eax,%ebx
testb  $0x10,(%r15,%rbx,1)
je     1357 <init_flag+0x257>
orb    $0x1,(%r15,%rsi,1)
jmp    1357 <init_flag+0x257>
cs nopw 0x0(%rax,%rax,1)
add    $0x1,%r14
mov    %r14,%r9
cmp    %r8,%r9
jne    132c <init_flag+0x22c>
pop    %rbx
pop    %r14
pop    %r15
ret

LLVM IR (-O0):
define void @init_flag(i8** %0, i32 %1, i32 %2, float %3, float %4, i32* %5) {
%7 = alloca i8**
%8 = alloca i32
%9 = alloca i32
%10 = alloca float
%11 = alloca float
%12 = alloca i32*
%13 = alloca i32
%14 = alloca i32
%15 = alloca float
%16 = alloca float
%17 = alloca float
%18 = alloca float
%19 = alloca float
store i8** %0, i8*** %7
store i32 %1, i32* %8
store i32 %2, i32* %9
store float %3, float* %10
store float %4, float* %11
store i32* %5, i32** %12
%20 = load i32, i32* %9
%21 = sitofp i32 %20 to double
%22 = fmul double 0x3FDF3831F3831F38, %21
%23 = load float, float* %11
%24 = fpext float %23 to double
%25 = fmul double %22, %24
%26 = fptrunc double %25 to float
store float %26, float* %15
%27 = load float, float* %15
store float %27, float* %16
%28 = load i32, i32* %9
%29 = sitofp i32 %28 to double
%30 = fmul double 0x3FBF3831F3831F38, %29
%31 = load float, float* %11
%32 = fpext float %31 to double
%33 = fmul double %30, %32
%34 = fptrunc double %33 to float
store float %34, float* %19
store i32 1, i32* %13
br label %35
35: ; preds = %90, %6
%36 = load i32, i32* %13
%37 = load i32, i32* %8
%38 = icmp sle i32 %36, %37
br i1 %38, label %39, label %93
39: ; preds = %35
store i32 1, i32* %14
br label %40
40: ; preds = %86, %39
%41 = load i32, i32* %14
%42 = load i32, i32* %9
%43 = icmp sle i32 %41, %42
br i1 %43, label %44, label %89
44: ; preds = %40
%45 = load i32, i32* %13
%46 = sitofp i32 %45 to double
%47 = fsub double %46, 5.000000e-01
%48 = load float, float* %10
%49 = fpext float %48 to double
%50 = load float, float* %15
%51 = fpext float %50 to double
%52 = fneg double %51
%53 = call double @llvm.fmuladd.f64(double %47, double %49, double %52)
%54 = fptrunc double %53 to float
store float %54, float* %17
%55 = load i32, i32* %14
%56 = sitofp i32 %55 to double
%57 = fsub double %56, 5.000000e-01
%58 = load float, float* %11
%59 = fpext float %58 to double
%60 = load float, float* %16
%61 = fpext float %60 to double
%62 = fneg double %61
%63 = call double @llvm.fmuladd.f64(double %57, double %59, double %62)
%64 = fptrunc double %63 to float
store float %64, float* %18
%65 = load float, float* %17
%66 = load float, float* %17
%67 = load float, float* %18
%68 = load float, float* %18
%69 = fmul float %67, %68
%70 = call float @llvm.fmuladd.f32(float %65, float %66, float %69)
%71 = load float, float* %19
%72 = load float, float* %19
%73 = fmul float %71, %72
%74 = fcmp ole float %70, %73
%75 = zext i1 %74 to i64
%76 = select i1 %74, i32 0, i32 16
%77 = trunc i32 %76 to i8
%78 = load i8**, i8*** %7
%79 = load i32, i32* %13
%80 = sext i32 %79 to i64
%81 = getelementptr inbounds i8*, i8** %78, i64 %80
%82 = load i8*, i8** %81
%83 = load i32, i32* %14
%84 = sext i32 %83 to i64
%85 = getelementptr inbounds i8, i8* %82, i64 %84
store i8 %77, i8* %85
br label %86
86: ; preds = %44
%87 = load i32, i32* %14
%88 = add nsw i32 %87, 1
store i32 %88, i32* %14
br label %40
89: ; preds = %40
br label %90
90: ; preds = %89
%91 = load i32, i32* %13
%92 = add nsw i32 %91, 1
store i32 %92, i32* %13
br label %35
93: ; preds = %35
store i32 0, i32* %13
br label %94
94: ; preds = %115, %93
%95 = load i32, i32* %13
%96 = load i32, i32* %8
%97 = add nsw i32 %96, 1
%98 = icmp sle i32 %95, %97
br i1 %98, label %99, label %118
99: ; preds = %94
%100 = load i8**, i8*** %7
%101 = load i32, i32* %13
%102 = sext i32 %101 to i64
%103 = getelementptr inbounds i8*, i8** %100, i64 %102
%104 = load i8*, i8** %103
%105 = getelementptr inbounds i8, i8* %104, i64 0
store i8 0, i8* %105
%106 = load i8**, i8*** %7
%107 = load i32, i32* %13
%108 = sext i32 %107 to i64
%109 = getelementptr inbounds i8*, i8** %106, i64 %108
%110 = load i8*, i8** %109
%111 = load i32, i32* %9
%112 = add nsw i32 %111, 1
%113 = sext i32 %112 to i64
%114 = getelementptr inbounds i8, i8* %110, i64 %113
store i8 0, i8* %114
br label %115
115: ; preds = %99
%116 = load i32, i32* %13
%117 = add nsw i32 %116, 1
store i32 %117, i32* %13
br label %94
118: ; preds = %94
store i32 1, i32* %14
br label %119
119: ; preds = %139, %118
%120 = load i32, i32* %14
%121 = load i32, i32* %9
%122 = icmp sle i32 %120, %121
br i1 %122, label %123, label %142
123: ; preds = %119
%124 = load i8**, i8*** %7
%125 = getelementptr inbounds i8*, i8** %124, i64 0
%126 = load i8*, i8** %125
%127 = load i32, i32* %14
%128 = sext i32 %127 to i64
%129 = getelementptr inbounds i8, i8* %126, i64 %128
store i8 0, i8* %129
%130 = load i8**, i8*** %7
%131 = load i32, i32* %8
%132 = add nsw i32 %131, 1
%133 = sext i32 %132 to i64
%134 = getelementptr inbounds i8*, i8** %130, i64 %133
%135 = load i8*, i8** %134
%136 = load i32, i32* %14
%137 = sext i32 %136 to i64
%138 = getelementptr inbounds i8, i8* %135, i64 %137
store i8 0, i8* %138
br label %139
139: ; preds = %123
%140 = load i32, i32* %14
%141 = add nsw i32 %140, 1
store i32 %141, i32* %14
br label %119
142: ; preds = %119
%143 = load i32*, i32** %12
store i32 0, i32* %143
store i32 1, i32* %13
br label %144
144: ; preds = %283, %142
%145 = load i32, i32* %13
%146 = load i32, i32* %8
%147 = icmp sle i32 %145, %146
br i1 %147, label %148, label %286
148: ; preds = %144
store i32 1, i32* %14
br label %149
149: ; preds = %279, %148
%150 = load i32, i32* %14
%151 = load i32, i32* %9
%152 = icmp sle i32 %150, %151
br i1 %152, label %153, label %282
153: ; preds = %149
%154 = load i8**, i8*** %7
%155 = load i32, i32* %13
%156 = sext i32 %155 to i64
%157 = getelementptr inbounds i8*, i8** %154, i64 %156
%158 = load i8*, i8** %157
%159 = load i32, i32* %14
%160 = sext i32 %159 to i64
%161 = getelementptr inbounds i8, i8* %158, i64 %160
%162 = load i8, i8* %161
%163 = sext i8 %162 to i32
%164 = and i32 %163, 16
%165 = icmp ne i32 %164, 0
br i1 %165, label %278, label %166
166: ; preds = %153
%167 = load i32*, i32** %12
%168 = load i32, i32* %167
%169 = add nsw i32 %168, 1
store i32 %169, i32* %167
%170 = load i8**, i8*** %7
%171 = load i32, i32* %13
%172 = sub nsw i32 %171, 1
%173 = sext i32 %172 to i64
%174 = getelementptr inbounds i8*, i8** %170, i64 %173
%175 = load i8*, i8** %174
%176 = load i32, i32* %14
%177 = sext i32 %176 to i64
%178 = getelementptr inbounds i8, i8* %175, i64 %177
%179 = load i8, i8* %178
%180 = sext i8 %179 to i32
%181 = and i32 %180, 16
%182 = icmp ne i32 %181, 0
br i1 %182, label %183, label %196
183: ; preds = %166
%184 = load i8**, i8*** %7
%185 = load i32, i32* %13
%186 = sext i32 %185 to i64
%187 = getelementptr inbounds i8*, i8** %184, i64 %186
%188 = load i8*, i8** %187
%189 = load i32, i32* %14
%190 = sext i32 %189 to i64
%191 = getelementptr inbounds i8, i8* %188, i64 %190
%192 = load i8, i8* %191
%193 = sext i8 %192 to i32
%194 = or i32 %193, 4
%195 = trunc i32 %194 to i8
store i8 %195, i8* %191
br label %196
196: ; preds = %183, %166
%197 = load i8**, i8*** %7
%198 = load i32, i32* %13
%199 = add nsw i32 %198, 1
%200 = sext i32 %199 to i64
%201 = getelementptr inbounds i8*, i8** %197, i64 %200
%202 = load i8*, i8** %201
%203 = load i32, i32* %14
%204 = sext i32 %203 to i64
%205 = getelementptr inbounds i8, i8* %202, i64 %204
%206 = load i8, i8* %205
%207 = sext i8 %206 to i32
%208 = and i32 %207, 16
%209 = icmp ne i32 %208, 0
br i1 %209, label %210, label %223
210: ; preds = %196
%211 = load i8**, i8*** %7
%212 = load i32, i32* %13
%213 = sext i32 %212 to i64
%214 = getelementptr inbounds i8*, i8** %211, i64 %213
%215 = load i8*, i8** %214
%216 = load i32, i32* %14
%217 = sext i32 %216 to i64
%218 = getelementptr inbounds i8, i8* %215, i64 %217
%219 = load i8, i8* %218
%220 = sext i8 %219 to i32
%221 = or i32 %220, 8
%222 = trunc i32 %221 to i8
store i8 %222, i8* %218
br label %223
223: ; preds = %210, %196
%224 = load i8**, i8*** %7
%225 = load i32, i32* %13
%226 = sext i32 %225 to i64
%227 = getelementptr inbounds i8*, i8** %224, i64 %226
%228 = load i8*, i8** %227
%229 = load i32, i32* %14
%230 = sub nsw i32 %229, 1
%231 = sext i32 %230 to i64
%232 = getelementptr inbounds i8, i8* %228, i64 %231
%233 = load i8, i8* %232
%234 = sext i8 %233 to i32
%235 = and i32 %234, 16
%236 = icmp ne i32 %235, 0
br i1 %236, label %237, label %250
237: ; preds = %223
%238 = load i8**, i8*** %7
%239 = load i32, i32* %13
%240 = sext i32 %239 to i64
%241 = getelementptr inbounds i8*, i8** %238, i64 %240
%242 = load i8*, i8** %241
%243 = load i32, i32* %14
%244 = sext i32 %243 to i64
%245 = getelementptr inbounds i8, i8* %242, i64 %244
%246 = load i8, i8* %245
%247 = sext i8 %246 to i32
%248 = or i32 %247, 2
%249 = trunc i32 %248 to i8
store i8 %249, i8* %245
br label %250
250: ; preds = %237, %223
%251 = load i8**, i8*** %7
%252 = load i32, i32* %13
%253 = sext i32 %252 to i64
%254 = getelementptr inbounds i8*, i8** %251, i64 %253
%255 = load i8*, i8** %254
%256 = load i32, i32* %14
%257 = add nsw i32 %256, 1
%258 = sext i32 %257 to i64
%259 = getelementptr inbounds i8, i8* %255, i64 %258
%260 = load i8, i8* %259
%261 = sext i8 %260 to i32
%262 = and i32 %261, 16
%263 = icmp ne i32 %262, 0
br i1 %263, label %264, label %277
264: ; preds = %250
%265 = load i8**, i8*** %7
%266 = load i32, i32* %13
%267 = sext i32 %266 to i64
%268 = getelementptr inbounds i8*, i8** %265, i64 %267
%269 = load i8*, i8** %268
%270 = load i32, i32* %14
%271 = sext i32 %270 to i64
%272 = getelementptr inbounds i8, i8* %269, i64 %271
%273 = load i8, i8* %272
%274 = sext i8 %273 to i32
%275 = or i32 %274, 1
%276 = trunc i32 %275 to i8
store i8 %276, i8* %272
br label %277
277: ; preds = %264, %250
br label %278
278: ; preds = %277, %153
br label %279
279: ; preds = %278
%280 = load i32, i32* %14
%281 = add nsw i32 %280, 1
store i32 %281, i32* %14
br label %149
282: ; preds = %149
br label %283
283: ; preds = %282
%284 = load i32, i32* %13
%285 = add nsw i32 %284, 1
store i32 %285, i32* %13
br label %144
286: ; preds = %144
ret void
}

LLVM IR (-O2):
define void @init_flag(i8** nocapture %0, i32 %1, i32 %2, float %3, float %4, i32* nocapture %5) {
%7 = sitofp i32 %2 to double
%8 = fpext float %4 to double
%9 = icmp slt i32 %1, 1
br i1 %9, label %10, label %12
10: ; preds = %6
%11 = add nsw i32 %1, 1
br label %37
12: ; preds = %6
%13 = fmul double %7, 0x3FBF3831F3831F38
%14 = fmul double %13, %8
%15 = fptrunc double %14 to float
%16 = fmul double %7, 0x3FDF3831F3831F38
%17 = fmul double %16, %8
%18 = fptrunc double %17 to float
%19 = icmp slt i32 %2, 1
%20 = fpext float %3 to double
%21 = fpext float %18 to double
%22 = fneg double %21
%23 = fmul float %15, %15
%24 = add i32 %2, 1
%25 = add nuw i32 %1, 1
%26 = zext i32 %25 to i64
%27 = zext i32 %24 to i64
br label %28
28: ; preds = %12, %66
%29 = phi i64 [ 1, %12 ], [ %67, %66 ]
br i1 %19, label %66, label %30
30: ; preds = %28
%31 = trunc i64 %29 to i32
%32 = sitofp i32 %31 to double
%33 = fadd double %32, -5.000000e-01
%34 = tail call double @llvm.fmuladd.f64(double %33, double %20, double %22)
%35 = fptrunc double %34 to float
%36 = getelementptr inbounds i8*, i8** %0, i64 %29
br label %51
37: ; preds = %66, %10
%38 = phi i32 [ %11, %10 ], [ %25, %66 ]
%39 = icmp slt i32 %1, -1
br i1 %39, label %82, label %40
40: ; preds = %37
%41 = add nsw i32 %2, 1
%42 = sext i32 %41 to i64
%43 = call i32 @llvm.smax.i32(i32 %38, i32 0)
%44 = add nuw i32 %43, 1
%45 = zext i32 %44 to i64
%46 = add nsw i64 %45, -1
%47 = and i64 %45, 3
%48 = icmp ult i64 %46, 3
br i1 %48, label %69, label %49
49: ; preds = %40
%50 = and i64 %45, 4294967292
br label %92
51: ; preds = %30, %51
%52 = phi i64 [ 1, %30 ], [ %64, %51 ]
%53 = trunc i64 %52 to i32
%54 = sitofp i32 %53 to double
%55 = fadd double %54, -5.000000e-01
%56 = tail call double @llvm.fmuladd.f64(double %55, double %8, double %22)
%57 = fptrunc double %56 to float
%58 = fmul float %57, %57
%59 = tail call float @llvm.fmuladd.f32(float %35, float %35, float %58)
%60 = fcmp ole float %59, %23
%61 = select i1 %60, i8 0, i8 16
%62 = load i8*, i8** %36
%63 = getelementptr inbounds i8, i8* %62, i64 %52
store i8 %61, i8* %63
%64 = add nuw nsw i64 %52, 1
%65 = icmp eq i64 %64, %27
br i1 %65, label %66, label %51
66: ; preds = %51, %28
%67 = add nuw nsw i64 %29, 1
%68 = icmp eq i64 %67, %26
br i1 %68, label %37, label %28
69: ; preds = %92, %40
%70 = phi i64 [ 0, %40 ], [ %114, %92 ]
%71 = icmp eq i64 %47, 0
br i1 %71, label %82, label %72
72: ; preds = %69, %72
%73 = phi i64 [ %79, %72 ], [ %70, %69 ]
%74 = phi i64 [ %80, %72 ], [ 0, %69 ]
%75 = getelementptr inbounds i8*, i8** %0, i64 %73
%76 = load i8*, i8** %75
store i8 0, i8* %76
%77 = load i8*, i8** %75
%78 = getelementptr inbounds i8, i8* %77, i64 %42
store i8 0, i8* %78
%79 = add nuw nsw i64 %73, 1
%80 = add i64 %74, 1
%81 = icmp eq i64 %80, %47
br i1 %81, label %82, label %72
82: ; preds = %69, %72, %37
%83 = icmp slt i32 %2, 1
br i1 %83, label %140, label %84
84: ; preds = %82
%85 = sext i32 %38 to i64
%86 = getelementptr inbounds i8*, i8** %0, i64 %85
%87 = zext i32 %2 to i64
%88 = and i64 %87, 1
%89 = icmp eq i32 %2, 1
br i1 %89, label %132, label %90
90: ; preds = %84
%91 = and i64 %87, 4294967294
br label %117
92: ; preds = %92, %49
%93 = phi i64 [ 0, %49 ], [ %114, %92 ]
%94 = phi i64 [ 0, %49 ], [ %115, %92 ]
%95 = getelementptr inbounds i8*, i8** %0, i64 %93
%96 = load i8*, i8** %95
store i8 0, i8* %96
%97 = load i8*, i8** %95
%98 = getelementptr inbounds i8, i8* %97, i64 %42
store i8 0, i8* %98
%99 = or i64 %93, 1
%100 = getelementptr inbounds i8*, i8** %0, i64 %99
%101 = load i8*, i8** %100
store i8 0, i8* %101
%102 = load i8*, i8** %100
%103 = getelementptr inbounds i8, i8* %102, i64 %42
store i8 0, i8* %103
%104 = or i64 %93, 2
%105 = getelementptr inbounds i8*, i8** %0, i64 %104
%106 = load i8*, i8** %105
store i8 0, i8* %106
%107 = load i8*, i8** %105
%108 = getelementptr inbounds i8, i8* %107, i64 %42
store i8 0, i8* %108
%109 = or i64 %93, 3
%110 = getelementptr inbounds i8*, i8** %0, i64 %109
%111 = load i8*, i8** %110
store i8 0, i8* %111
%112 = load i8*, i8** %110
%113 = getelementptr inbounds i8, i8* %112, i64 %42
store i8 0, i8* %113
%114 = add nuw nsw i64 %93, 4
%115 = add i64 %94, 4
%116 = icmp eq i64 %115, %50
br i1 %116, label %69, label %92
117: ; preds = %117, %90
%118 = phi i64 [ 1, %90 ], [ %129, %117 ]
%119 = phi i64 [ 0, %90 ], [ %130, %117 ]
%120 = load i8*, i8** %0
%121 = getelementptr inbounds i8, i8* %120, i64 %118
store i8 0, i8* %121
%122 = load i8*, i8** %86
%123 = getelementptr inbounds i8, i8* %122, i64 %118
store i8 0, i8* %123
%124 = add nuw nsw i64 %118, 1
%125 = load i8*, i8** %0
%126 = getelementptr inbounds i8, i8* %125, i64 %124
store i8 0, i8* %126
%127 = load i8*, i8** %86
%128 = getelementptr inbounds i8, i8* %127, i64 %124
store i8 0, i8* %128
%129 = add nuw nsw i64 %118, 2
%130 = add i64 %119, 2
%131 = icmp eq i64 %130, %91
br i1 %131, label %132, label %117
132: ; preds = %117, %84
%133 = phi i64 [ 1, %84 ], [ %129, %117 ]
%134 = icmp eq i64 %88, 0
br i1 %134, label %140, label %135
135: ; preds = %132
%136 = load i8*, i8** %0
%137 = getelementptr inbounds i8, i8* %136, i64 %133
store i8 0, i8* %137
%138 = load i8*, i8** %86
%139 = getelementptr inbounds i8, i8* %138, i64 %133
store i8 0, i8* %139
br label %140
140: ; preds = %135, %132, %82
store i32 0, i32* %5
br i1 %9, label %217, label %141
141: ; preds = %140
%142 = add i32 %2, 1
%143 = zext i32 %38 to i64
%144 = zext i32 %142 to i64
br label %145
145: ; preds = %141, %214
%146 = phi i64 [ 1, %141 ], [ %215, %214 ]
br i1 %83, label %147, label %149
147: ; preds = %145
%148 = add nuw nsw i64 %146, 1
br label %214
149: ; preds = %145
%150 = getelementptr inbounds i8*, i8** %0, i64 %146
%151 = add nsw i64 %146, -1
%152 = getelementptr inbounds i8*, i8** %0, i64 %151
%153 = add nuw nsw i64 %146, 1
%154 = and i64 %153, 4294967295
%155 = getelementptr inbounds i8*, i8** %0, i64 %154
br label %156
156: ; preds = %149, %211
%157 = phi i64 [ 1, %149 ], [ %212, %211 ]
%158 = load i8*, i8** %150
%159 = getelementptr inbounds i8, i8* %158, i64 %157
%160 = load i8, i8* %159
%161 = and i8 %160, 16
%162 = icmp eq i8 %161, 0
br i1 %162, label %165, label %163
163: ; preds = %156
%164 = add nuw nsw i64 %157, 1
br label %211
165: ; preds = %156
%166 = load i32, i32* %5
%167 = add nsw i32 %166, 1
store i32 %167, i32* %5
%168 = load i8*, i8** %152
%169 = getelementptr inbounds i8, i8* %168, i64 %157
%170 = load i8, i8* %169
%171 = and i8 %170, 16
%172 = icmp eq i8 %171, 0
br i1 %172, label %176, label %173
173: ; preds = %165
%174 = load i8, i8* %159
%175 = or i8 %174, 4
store i8 %175, i8* %159
br label %176
176: ; preds = %173, %165
%177 = load i8*, i8** %155
%178 = getelementptr inbounds i8, i8* %177, i64 %157
%179 = load i8, i8* %178
%180 = and i8 %179, 16
%181 = icmp eq i8 %180, 0
br i1 %181, label %187, label %182
182: ; preds = %176
%183 = load i8*, i8** %150
%184 = getelementptr inbounds i8, i8* %183, i64 %157
%185 = load i8, i8* %184
%186 = or i8 %185, 8
store i8 %186, i8* %184
br label %187
187: ; preds = %182, %176
%188 = load i8*, i8** %150
%189 = add nsw i64 %157, -1
%190 = getelementptr inbounds i8, i8* %188, i64 %189
%191 = load i8, i8* %190
%192 = and i8 %191, 16
%193 = icmp eq i8 %192, 0
br i1 %193, label %199, label %194
194: ; preds = %187
%195 = getelementptr inbounds i8, i8* %188, i64 %157
%196 = load i8, i8* %195
%197 = or i8 %196, 2
store i8 %197, i8* %195
%198 = load i8*, i8** %150
br label %199
199: ; preds = %194, %187
%200 = phi i8* [ %198, %194 ], [ %188, %187 ]
%201 = add nuw nsw i64 %157, 1
%202 = and i64 %201, 4294967295
%203 = getelementptr inbounds i8, i8* %200, i64 %202
%204 = load i8, i8* %203
%205 = and i8 %204, 16
%206 = icmp eq i8 %205, 0
br i1 %206, label %211, label %207
207: ; preds = %199
%208 = getelementptr inbounds i8, i8* %200, i64 %157
%209 = load i8, i8* %208
%210 = or i8 %209, 1
store i8 %210, i8* %208
br label %211
211: ; preds = %163, %207, %199
%212 = phi i64 [ %164, %163 ], [ %201, %207 ], [ %201, %199 ]
%213 = icmp eq i64 %212, %144
br i1 %213, label %214, label %156
214: ; preds = %211, %147
%215 = phi i64 [ %148, %147 ], [ %153, %211 ]
%216 = icmp eq i64 %215, %143
br i1 %216, label %217, label %145
217: ; preds = %214, %140
ret void
}