#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 */
double fabs(int);
int /*<<< orphan*/ setcelltype(int *, int);
int sqrt(double);
void init_sphere(char *problem, int imax, int jmax, int kmax, int ***Flag,
                 int wl, int wr, int wf, int wh, int wt, int wb) {
  int i, j, k;
  double dx = 0, dy = 0, dz = 0;
  double mx = imax * 0.5;
  double my = jmax * 0.5;
  double mz = kmax * 0.5;
  for (i = 1; i < imax + 1; i++) {
    for (k = 1; k < kmax + 1; k++) {
      for (j = 1; j < jmax + 1; j++) {
        dx = fabs(i + 0.5 - mx);
        dy = fabs(j + 0.5 - my);
        dz = fabs(k + 0.5 - mz);
        if (1 == 1 && dx <= 3 && dy <= 3 * 1.1 && dz <= 3) {
          setcelltype(&Flag[i][j][k], 0);
        } else if (1 == 3 && sqrt(dx * dx + dy * dy + dz * dz) <= 3) {
          setcelltype(&Flag[i][j][k], 0);
        } else if (j < 10) {
          setcelltype(&Flag[i][j][k], 0);
        } else {
          setcelltype(&Flag[i][j][k], 1);
        }
      }
    }
  }
}


x86 assembly (clang, -O0):
<init_sphere>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
mov    0x30(%rbp),%eax
mov    0x28(%rbp),%eax
mov    0x20(%rbp),%eax
mov    0x18(%rbp),%eax
mov    0x10(%rbp),%eax
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    %ecx,-0x14(%rbp)
mov    %r8,-0x20(%rbp)
mov    %r9d,-0x24(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x38(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x40(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x48(%rbp)
cvtsi2sdl -0xc(%rbp),%xmm0
movsd  0xe8f(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
cvtsi2sdl -0x10(%rbp),%xmm0
movsd  0xe79(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
cvtsi2sdl -0x14(%rbp),%xmm0
movsd  0xe63(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movl   $0x1,-0x28(%rbp)
mov    -0x28(%rbp),%eax
mov    -0xc(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jge    135a <init_sphere+0x23a>
movl   $0x1,-0x30(%rbp)
mov    -0x30(%rbp),%eax
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jge    1347 <init_sphere+0x227>
movl   $0x1,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x10(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jge    1334 <init_sphere+0x214>
cvtsi2sdl -0x28(%rbp),%xmm0
movsd  0xe05(%rip),%xmm1
addsd  %xmm1,%xmm0
subsd  -0x50(%rbp),%xmm0
cvttsd2si %xmm0,%edi
call   1040 <fabs@plt>
movsd  %xmm0,-0x38(%rbp)
cvtsi2sdl -0x2c(%rbp),%xmm0
movsd  0xde1(%rip),%xmm1
addsd  %xmm1,%xmm0
subsd  -0x58(%rbp),%xmm0
cvttsd2si %xmm0,%edi
call   1040 <fabs@plt>
movsd  %xmm0,-0x40(%rbp)
cvtsi2sdl -0x30(%rbp),%xmm0
movsd  0xdbd(%rip),%xmm1
addsd  %xmm1,%xmm0
subsd  -0x60(%rbp),%xmm0
cvttsd2si %xmm0,%edi
call   1040 <fabs@plt>
movsd  %xmm0,-0x48(%rbp)
movsd  0xda6(%rip),%xmm0
ucomisd -0x38(%rbp),%xmm0
jb     12be <init_sphere+0x19e>
movsd  0xd9b(%rip),%xmm0
ucomisd -0x40(%rbp),%xmm0
jb     12be <init_sphere+0x19e>
movsd  0xd80(%rip),%xmm0
ucomisd -0x48(%rbp),%xmm0
jb     12be <init_sphere+0x19e>
mov    -0x20(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,8),%rdi
movslq -0x30(%rbp),%rax
shl    $0x2,%rax
add    %rax,%rdi
xor    %esi,%esi
call   1030 <setcelltype@plt>
jmp    1321 <init_sphere+0x201>
cmpl   $0xa,-0x2c(%rbp)
jge    12f3 <init_sphere+0x1d3>
mov    -0x20(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,8),%rdi
movslq -0x30(%rbp),%rax
shl    $0x2,%rax
add    %rax,%rdi
xor    %esi,%esi
call   1030 <setcelltype@plt>
jmp    131c <init_sphere+0x1fc>
mov    -0x20(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,8),%rdi
movslq -0x30(%rbp),%rax
shl    $0x2,%rax
add    %rax,%rdi
mov    $0x1,%esi
call   1030 <setcelltype@plt>
jmp    1321 <init_sphere+0x201>
jmp    1326 <init_sphere+0x206>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    11dd <init_sphere+0xbd>
jmp    1339 <init_sphere+0x219>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    11c5 <init_sphere+0xa5>
jmp    134c <init_sphere+0x22c>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    11ad <init_sphere+0x8d>
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<init_sphere>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x58,%rsp
mov    %r8,0x18(%rsp)
mov    %rcx,0x8(%rsp)
mov    %rdx,0x10(%rsp)
test   %esi,%esi
jle    12f6 <init_sphere+0x1d6>
mov    %rsi,%rax
mov    %rsi,%rdx
cvtsi2sd %edx,%xmm0
movsd  0xea9(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,0x20(%rsp)
mov    0x10(%rsp),%rcx
xorps  %xmm0,%xmm0
cvtsi2sd %ecx,%xmm0
mov    0x8(%rsp),%rax
cvtsi2sd %eax,%xmm2
mulsd  %xmm1,%xmm0
movsd  %xmm0,0x40(%rsp)
mulsd  %xmm1,%xmm2
movsd  %xmm2,0x30(%rsp)
lea    0x1(%rcx),%r14d
add    $0x1,%eax
mov    %rax,0x38(%rsp)
add    $0x1,%edx
mov    %rdx,0x28(%rsp)
mov    $0x1,%r15d
jmp    11bf <init_sphere+0x9f>
cs nopw 0x0(%rax,%rax,1)
add    $0x1,%r15
cmp    0x28(%rsp),%r15
je     12f6 <init_sphere+0x1d6>
cmpl   $0x0,0x8(%rsp)
jle    11b0 <init_sphere+0x90>
xorps  %xmm0,%xmm0
cvtsi2sd %r15d,%xmm0
addsd  0xe2a(%rip),%xmm0
subsd  0x20(%rsp),%xmm0
cvttsd2si %xmm0,%ebp
mov    $0x1,%r12d
jmp    11fb <init_sphere+0xdb>
nopl   0x0(%rax,%rax,1)
add    $0x1,%r12
cmp    0x38(%rsp),%r12
je     11b0 <init_sphere+0x90>
cmpl   $0x0,0x10(%rsp)
jle    11f0 <init_sphere+0xd0>
xorps  %xmm0,%xmm0
cvtsi2sd %r12d,%xmm0
addsd  0xdee(%rip),%xmm0
subsd  0x30(%rsp),%xmm0
cvttsd2si %xmm0,%ebx
mov    $0x1,%r13d
jmp    1243 <init_sphere+0x123>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    $0x1,%esi
call   1030 <setcelltype@plt>
add    $0x1,%r13
cmp    %r13,%r14
je     11f0 <init_sphere+0xd0>
mov    %ebp,%edi
call   1040 <fabs@plt>
movsd  %xmm0,0x50(%rsp)
xorps  %xmm0,%xmm0
cvtsi2sd %r13d,%xmm0
addsd  0xda0(%rip),%xmm0
subsd  0x40(%rsp),%xmm0
cvttsd2si %xmm0,%edi
call   1040 <fabs@plt>
movsd  %xmm0,0x48(%rsp)
mov    %ebx,%edi
call   1040 <fabs@plt>
movsd  0xd84(%rip),%xmm1
ucomisd 0x50(%rsp),%xmm1
jb     12d0 <init_sphere+0x1b0>
movsd  0xd7c(%rip),%xmm1
ucomisd 0x48(%rsp),%xmm1
jb     12d0 <init_sphere+0x1b0>
movsd  0xd64(%rip),%xmm1
ucomisd %xmm0,%xmm1
jb     12d0 <init_sphere+0x1b0>
mov    0x18(%rsp),%rax
mov    (%rax,%r15,8),%rax
lea    0x0(,%r12,4),%rdi
add    (%rax,%r13,8),%rdi
xor    %esi,%esi
jmp    1235 <init_sphere+0x115>
cs nopw 0x0(%rax,%rax,1)
mov    0x18(%rsp),%rax
mov    (%rax,%r15,8),%rax
lea    0x0(,%r12,4),%rdi
add    (%rax,%r13,8),%rdi
cmp    $0x9,%r13
ja     1230 <init_sphere+0x110>
xor    %esi,%esi
jmp    1235 <init_sphere+0x115>
add    $0x58,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define void @init_sphere(i8* nocapture readnone %0, i32 %1, i32 %2, i32 %3, i32*** nocapture %4, i32 %5, i32 %6, i32 %7, i32 %8, i32 %9, i32 %10) {
%12 = sitofp i32 %1 to double
%13 = fmul double %12, 5.000000e-01
%14 = sitofp i32 %2 to double
%15 = fmul double %14, 5.000000e-01
%16 = sitofp i32 %3 to double
%17 = fmul double %16, 5.000000e-01
%18 = icmp slt i32 %1, 1
br i1 %18, label %85, label %19
19: ; preds = %11
%20 = icmp slt i32 %3, 1
%21 = icmp slt i32 %2, 1
%22 = add i32 %2, 1
%23 = add i32 %3, 1
%24 = add nuw i32 %1, 1
%25 = zext i32 %24 to i64
%26 = zext i32 %23 to i64
%27 = zext i32 %22 to i64
br label %28
28: ; preds = %19, %82
%29 = phi i64 [ 1, %19 ], [ %83, %82 ]
br i1 %20, label %82, 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 = fsub double %33, %13
%35 = fptosi double %34 to i32
%36 = getelementptr inbounds i32**, i32*** %4, i64 %29
br label %37
37: ; preds = %30, %79
%38 = phi i64 [ 1, %30 ], [ %80, %79 ]
br i1 %21, label %79, label %39
39: ; preds = %37
%40 = trunc i64 %38 to i32
%41 = sitofp i32 %40 to double
%42 = fadd double %41, 5.000000e-01
%43 = fsub double %42, %17
%44 = fptosi double %43 to i32
br label %45
45: ; preds = %39, %76
%46 = phi i64 [ 1, %39 ], [ %77, %76 ]
%47 = tail call double @fabs(i32 %35)
%48 = trunc i64 %46 to i32
%49 = sitofp i32 %48 to double
%50 = fadd double %49, 5.000000e-01
%51 = fsub double %50, %15
%52 = fptosi double %51 to i32
%53 = tail call double @fabs(i32 %52)
%54 = tail call double @fabs(i32 %44)
%55 = fcmp ole double %47, 3.000000e+00
%56 = fcmp ole double %53, 0x400A666666666667
%57 = select i1 %55, i1 %56, i1 false
%58 = fcmp ole double %54, 3.000000e+00
%59 = select i1 %57, i1 %58, i1 false
br i1 %59, label %60, label %66
60: ; preds = %45
%61 = load i32**, i32*** %36
%62 = getelementptr inbounds i32*, i32** %61, i64 %46
%63 = load i32*, i32** %62
%64 = getelementptr inbounds i32, i32* %63, i64 %38
%65 = tail call i32 @setcelltype(i32* %64, i32 0)
br label %76
66: ; preds = %45
%67 = icmp ult i64 %46, 10
%68 = load i32**, i32*** %36
%69 = getelementptr inbounds i32*, i32** %68, i64 %46
%70 = load i32*, i32** %69
%71 = getelementptr inbounds i32, i32* %70, i64 %38
br i1 %67, label %72, label %74
72: ; preds = %66
%73 = tail call i32 @setcelltype(i32* %71, i32 0)
br label %76
74: ; preds = %66
%75 = tail call i32 @setcelltype(i32* %71, i32 1)
br label %76
76: ; preds = %60, %74, %72
%77 = add nuw nsw i64 %46, 1
%78 = icmp eq i64 %77, %27
br i1 %78, label %79, label %45
79: ; preds = %76, %37
%80 = add nuw nsw i64 %38, 1
%81 = icmp eq i64 %80, %26
br i1 %81, label %82, label %37
82: ; preds = %79, %28
%83 = add nuw nsw i64 %29, 1
%84 = icmp eq i64 %83, %25
br i1 %84, label %85, label %28
85: ; preds = %82, %11
ret void
}