#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 M_PI;
double pow(double, double);
void init_config_SC(double phi, int nx, int ny, int nz, double *pos, double *lx,
                    double *ly, double *lz) {
  int j;
  int ix, iy, iz;
  (*lx) = (*ly) = (*lz) = pow(4.0 * M_PI / phi / 3.0, 1.0 / 3.0);
  j = 0;
  for (ix = 0; ix < nx; ix++) {
    for (iy = 0; iy < ny; iy++) {
      for (iz = 0; iz < nz; iz++) {
        pos[j * 3 + 0] = (double)ix * (*lx);
        pos[j * 3 + 1] = (double)iy * (*ly);
        pos[j * 3 + 2] = (double)iz * (*lz);
        j++;
      }
    }
  }
  (*lx) *= (double)nx;
  (*ly) *= (double)ny;
  (*lz) *= (double)nz;
}


x86 assembly (clang, -O0):
<init_config_SC>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    0x10(%rbp),%rax
movsd  %xmm0,-0x8(%rbp)
mov    %edi,-0xc(%rbp)
mov    %esi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
movsd  0xed2(%rip),%xmm0
mov    0x2ea3(%rip),%rax
mulsd  (%rax),%xmm0
divsd  -0x8(%rbp),%xmm0
movsd  0xeb2(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0xe9e(%rip),%xmm1
call   1030 <pow@plt>
mov    0x10(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
movl   $0x0,-0x34(%rbp)
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    125c <init_config_SC+0x14c>
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    1249 <init_config_SC+0x139>
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1236 <init_config_SC+0x126>
cvtsi2sdl -0x38(%rbp),%xmm0
mov    -0x28(%rbp),%rax
mulsd  (%rax),%xmm0
mov    -0x20(%rbp),%rax
imul   $0x3,-0x34(%rbp),%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
cvtsi2sdl -0x3c(%rbp),%xmm0
mov    -0x30(%rbp),%rax
mulsd  (%rax),%xmm0
mov    -0x20(%rbp),%rax
imul   $0x3,-0x34(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
cvtsi2sdl -0x40(%rbp),%xmm0
mov    0x10(%rbp),%rax
mulsd  (%rax),%xmm0
mov    -0x20(%rbp),%rax
imul   $0x3,-0x34(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    11b3 <init_config_SC+0xa3>
jmp    123b <init_config_SC+0x12b>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    11a0 <init_config_SC+0x90>
jmp    124e <init_config_SC+0x13e>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    118d <init_config_SC+0x7d>
cvtsi2sdl -0xc(%rbp),%xmm0
mov    -0x28(%rbp),%rax
mulsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
cvtsi2sdl -0x10(%rbp),%xmm0
mov    -0x30(%rbp),%rax
mulsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
cvtsi2sdl -0x14(%rbp),%xmm0
mov    0x10(%rbp),%rax
mulsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<init_config_SC>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x58,%rsp
mov    %r9,%r15
mov    %r8,%rbx
mov    %rcx,0x10(%rsp)
mov    %edx,%r14d
mov    %esi,%ebp
mov    %edi,%r13d
mov    0x2eb0(%rip),%rax
movsd  (%rax),%xmm2
mulsd  0xebc(%rip),%xmm2
mov    0x90(%rsp),%r12
divsd  %xmm0,%xmm2
divsd  0xeb0(%rip),%xmm2
movsd  0xeb0(%rip),%xmm1
movapd %xmm2,%xmm0
call   1030 <pow@plt>
movsd  %xmm0,(%r12)
movsd  %xmm0,(%r15)
movsd  %xmm0,(%rbx)
mov    %r13d,0xc(%rsp)
test   %r13d,%r13d
jle    13d7 <init_config_SC+0x2c7>
lea    -0x1(%r14),%ecx
lea    (%rcx,%rcx,2),%rax
mov    0x10(%rsp),%rdx
lea    (%rdx,%rax,8),%rax
add    $0x18,%rax
mov    %rax,0x40(%rsp)
lea    0x8(%rbx),%rax
mov    %rax,0x38(%rsp)
lea    0x8(%r15),%rax
mov    %rax,0x30(%rsp)
lea    0x8(%r12),%rax
mov    %rax,0x28(%rsp)
mov    %rcx,0x50(%rsp)
lea    0x1(%rcx),%rax
mov    %rax,0x20(%rsp)
and    $0xfffffffffffffffe,%rax
mov    %rax,0x18(%rsp)
lea    0x10(%rdx),%rax
mov    %rax,0x48(%rsp)
xor    %eax,%eax
xorpd  %xmm0,%xmm0
movdqa 0xe35(%rip),%xmm8
movdqa 0xe3d(%rip),%xmm2
movsd  0xe1c(%rip),%xmm9
xor    %r11d,%r11d
mov    %ebp,0x8(%rsp)
jmp    1226 <init_config_SC+0x116>
cs nopw 0x0(%rax,%rax,1)
nop
addsd  %xmm9,%xmm0
mov    0x10(%rsp),%eax
add    $0x1,%eax
cmp    0xc(%rsp),%eax
je     13d3 <init_config_SC+0x2c3>
test   %ebp,%ebp
mov    %eax,0x10(%rsp)
jle    1210 <init_config_SC+0x100>
xor    %r8d,%r8d
xorpd  %xmm4,%xmm4
jmp    124e <init_config_SC+0x13e>
nopw   0x0(%rax,%rax,1)
addsd  %xmm9,%xmm4
add    $0x1,%r8d
cmp    %ebp,%r8d
je     1210 <init_config_SC+0x100>
test   %r14d,%r14d
jle    1240 <init_config_SC+0x130>
xor    %r9d,%r9d
movslq %r11d,%rcx
cmpl   $0x0,0x50(%rsp)
je     1360 <init_config_SC+0x250>
lea    0x0(,%rcx,8),%rax
lea    (%rax,%rax,2),%rdi
mov    %rdx,%rbp
lea    (%rdx,%rdi,1),%rax
add    0x40(%rsp),%rdi
cmp    0x38(%rsp),%rax
setb   %r13b
cmp    %rbx,%rdi
seta   %r10b
cmp    0x30(%rsp),%rax
setb   %dl
cmp    %r15,%rdi
seta   %sil
cmp    0x28(%rsp),%rax
setb   %al
cmp    %r12,%rdi
seta   %r11b
test   %r10b,%r13b
jne    136a <init_config_SC+0x25a>
and    %sil,%dl
jne    136a <init_config_SC+0x25a>
and    %r11b,%al
mov    %rbp,%rdx
jne    1365 <init_config_SC+0x255>
mov    0x18(%rsp),%rdi
lea    (%rdi,%rcx,1),%r11
lea    (%rcx,%rcx,2),%rax
lea    (%rdx,%rax,8),%rsi
mov    %rdi,%rcx
movdqa %xmm8,%xmm5
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movsd  (%rbx),%xmm6
mulsd  %xmm0,%xmm6
movsd  (%r15),%xmm7
mulsd  %xmm4,%xmm7
cvtdq2pd %xmm5,%xmm1
movsd  (%r12),%xmm3
unpcklpd %xmm3,%xmm3
mulpd  %xmm1,%xmm3
movapd %xmm3,%xmm1
unpcklpd %xmm6,%xmm1
movsd  %xmm7,%xmm3
unpcklpd %xmm7,%xmm6
movupd %xmm6,(%rsi)
movupd %xmm3,0x20(%rsi)
movupd %xmm1,0x10(%rsi)
paddd  %xmm2,%xmm5
add    $0x30,%rsi
add    $0xfffffffffffffffe,%rcx
jne    12f0 <init_config_SC+0x1e0>
mov    0x18(%rsp),%rax
mov    %eax,%r9d
cmp    %rax,0x20(%rsp)
mov    0x8(%rsp),%ebp
je     1240 <init_config_SC+0x130>
jmp    1374 <init_config_SC+0x264>
nopl   0x0(%rax,%rax,1)
mov    %rcx,%r11
jmp    1374 <init_config_SC+0x264>
mov    %rcx,%r11
jmp    1370 <init_config_SC+0x260>
mov    %rcx,%r11
mov    %rbp,%rdx
mov    0x8(%rsp),%ebp
lea    (%r11,%r11,2),%rax
mov    0x48(%rsp),%rcx
lea    (%rcx,%rax,8),%rcx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movsd  (%rbx),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,-0x10(%rcx)
movsd  (%r15),%xmm1
mulsd  %xmm4,%xmm1
xorps  %xmm3,%xmm3
cvtsi2sd %r9d,%xmm3
movsd  %xmm1,-0x8(%rcx)
mulsd  (%r12),%xmm3
movsd  %xmm3,(%rcx)
add    $0x1,%r11
add    $0x1,%r9d
add    $0x18,%rcx
cmp    %r9d,%r14d
jne    1390 <init_config_SC+0x280>
jmp    1240 <init_config_SC+0x130>
movsd  (%rbx),%xmm0
xorps  %xmm1,%xmm1
cvtsi2sdl 0xc(%rsp),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,(%rbx)
xorps  %xmm0,%xmm0
cvtsi2sd %ebp,%xmm0
mulsd  (%r15),%xmm0
xorps  %xmm1,%xmm1
cvtsi2sd %r14d,%xmm1
movsd  %xmm0,(%r15)
mulsd  (%r12),%xmm1
movsd  %xmm1,(%r12)
add    $0x58,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@M_PI = global double 0.000000e+00
define void @init_config_SC(double %0, i32 %1, i32 %2, i32 %3, double* %4, double* %5, double* %6, double* %7) {
%9 = alloca double
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca double*
%14 = alloca double*
%15 = alloca double*
%16 = alloca double*
%17 = alloca i32
%18 = alloca i32
%19 = alloca i32
%20 = alloca i32
store double %0, double* %9
store i32 %1, i32* %10
store i32 %2, i32* %11
store i32 %3, i32* %12
store double* %4, double** %13
store double* %5, double** %14
store double* %6, double** %15
store double* %7, double** %16
%21 = load double, double* @M_PI
%22 = fmul double 4.000000e+00, %21
%23 = load double, double* %9
%24 = fdiv double %22, %23
%25 = fdiv double %24, 3.000000e+00
%26 = call double @pow(double %25, double 0x3FD5555555555555)
%27 = load double*, double** %16
store double %26, double* %27
%28 = load double*, double** %15
store double %26, double* %28
%29 = load double*, double** %14
store double %26, double* %29
store i32 0, i32* %17
store i32 0, i32* %18
br label %30
30: ; preds = %88, %8
%31 = load i32, i32* %18
%32 = load i32, i32* %10
%33 = icmp slt i32 %31, %32
br i1 %33, label %34, label %91
34: ; preds = %30
store i32 0, i32* %19
br label %35
35: ; preds = %84, %34
%36 = load i32, i32* %19
%37 = load i32, i32* %11
%38 = icmp slt i32 %36, %37
br i1 %38, label %39, label %87
39: ; preds = %35
store i32 0, i32* %20
br label %40
40: ; preds = %80, %39
%41 = load i32, i32* %20
%42 = load i32, i32* %12
%43 = icmp slt i32 %41, %42
br i1 %43, label %44, label %83
44: ; preds = %40
%45 = load i32, i32* %18
%46 = sitofp i32 %45 to double
%47 = load double*, double** %14
%48 = load double, double* %47
%49 = fmul double %46, %48
%50 = load double*, double** %13
%51 = load i32, i32* %17
%52 = mul nsw i32 %51, 3
%53 = add nsw i32 %52, 0
%54 = sext i32 %53 to i64
%55 = getelementptr inbounds double, double* %50, i64 %54
store double %49, double* %55
%56 = load i32, i32* %19
%57 = sitofp i32 %56 to double
%58 = load double*, double** %15
%59 = load double, double* %58
%60 = fmul double %57, %59
%61 = load double*, double** %13
%62 = load i32, i32* %17
%63 = mul nsw i32 %62, 3
%64 = add nsw i32 %63, 1
%65 = sext i32 %64 to i64
%66 = getelementptr inbounds double, double* %61, i64 %65
store double %60, double* %66
%67 = load i32, i32* %20
%68 = sitofp i32 %67 to double
%69 = load double*, double** %16
%70 = load double, double* %69
%71 = fmul double %68, %70
%72 = load double*, double** %13
%73 = load i32, i32* %17
%74 = mul nsw i32 %73, 3
%75 = add nsw i32 %74, 2
%76 = sext i32 %75 to i64
%77 = getelementptr inbounds double, double* %72, i64 %76
store double %71, double* %77
%78 = load i32, i32* %17
%79 = add nsw i32 %78, 1
store i32 %79, i32* %17
br label %80
80: ; preds = %44
%81 = load i32, i32* %20
%82 = add nsw i32 %81, 1
store i32 %82, i32* %20
br label %40
83: ; preds = %40
br label %84
84: ; preds = %83
%85 = load i32, i32* %19
%86 = add nsw i32 %85, 1
store i32 %86, i32* %19
br label %35
87: ; preds = %35
br label %88
88: ; preds = %87
%89 = load i32, i32* %18
%90 = add nsw i32 %89, 1
store i32 %90, i32* %18
br label %30
91: ; preds = %30
%92 = load i32, i32* %10
%93 = sitofp i32 %92 to double
%94 = load double*, double** %14
%95 = load double, double* %94
%96 = fmul double %95, %93
store double %96, double* %94
%97 = load i32, i32* %11
%98 = sitofp i32 %97 to double
%99 = load double*, double** %15
%100 = load double, double* %99
%101 = fmul double %100, %98
store double %101, double* %99
%102 = load i32, i32* %12
%103 = sitofp i32 %102 to double
%104 = load double*, double** %16
%105 = load double, double* %104
%106 = fmul double %105, %103
store double %106, double* %104
ret void
}

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