main() {
  static int atomnum, n, i, j, k, l, m, i1, i2, j1, j2;
  static double za0, za1, za2, za3;
  static double ka1, ka2, ka3, al, be, ga, c1, c2, c3, s2, s3;
  static double **xyz, rxyz[10], tvxyz[5][4];
  static double tvx[5], tvy[5], tvz[5];
  static double atvx[15], atvy[15], atvz[15];
  static double la1, la2, la3, ang1, ang2, ang3;
  static double r, dx, dy, dz;
  static char Name[100];
  scanf("%lf %lf %lf", &tvx[1], &tvy[1], &tvz[1]);
  scanf("%lf %lf %lf", &tvx[2], &tvy[2], &tvz[2]);
  scanf("%lf %lf %lf", &tvx[3], &tvy[3], &tvz[3]);
  scanf("%i", &atomnum);
  xyz = (double **)malloc(sizeof(double *) * (atomnum + 1));
  for (i = 0; i <= atomnum; i++) {
    xyz[i] = (double *)malloc(sizeof(double) * 4);
  }
  ATV(atvx, atvy, atvz, tvx, tvy, tvz);
  for (i = 1; i <= atomnum; i++) {
    scanf("%lf  %s %lf %lf %lf", &za0, &Name, &za1, &za2, &za3);
    xyz[i][0] = za0;
    xyz[i][1] = za1 * tvx[1] + za2 * tvx[2] + za3 * tvx[3];
    xyz[i][2] = za1 * tvy[1] + za2 * tvy[2] + za3 * tvy[3];
    xyz[i][3] = za1 * tvz[1] + za2 * tvz[2] + za3 * tvz[3];
    printf("%4d   %3s %16.12f  %16.12f  %16.12f\n", i, Name, xyz[i][1],
           xyz[i][2], xyz[i][3]);
  }
  for (i = 0; i <= atomnum; i++) {
    free(xyz[i]);
  }
  free(xyz);
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
movl   $0x0,-0x4(%rbp)
lea    0xea5(%rip),%rdi
lea    0x3093(%rip),%rsi
add    $0x8,%rsi
lea    0x30b8(%rip),%rdx
add    $0x8,%rdx
lea    0x30dd(%rip),%rcx
add    $0x8,%rcx
mov    $0x0,%al
call   1060 <scanf@plt>
lea    0xe76(%rip),%rdi
lea    0x3064(%rip),%rsi
add    $0x10,%rsi
lea    0x3089(%rip),%rdx
add    $0x10,%rdx
lea    0x30ae(%rip),%rcx
add    $0x10,%rcx
mov    $0x0,%al
call   1060 <scanf@plt>
lea    0xe47(%rip),%rdi
lea    0x3035(%rip),%rsi
add    $0x18,%rsi
lea    0x305a(%rip),%rdx
add    $0x18,%rdx
lea    0x307f(%rip),%rcx
add    $0x18,%rcx
mov    $0x0,%al
call   1060 <scanf@plt>
lea    0xe0d(%rip),%rdi
lea    0x2e66(%rip),%rsi
mov    $0x0,%al
call   1060 <scanf@plt>
mov    0x2e59(%rip),%eax
add    $0x1,%eax
movslq %eax,%rdi
shl    $0x3,%rdi
call   1050 <malloc@plt>
mov    %rax,0x2eeb(%rip)
movl   $0x0,0x2e41(%rip)
mov    0x2e3b(%rip),%eax
cmp    0x2e2d(%rip),%eax
jg     126c <main+0x11c>
mov    $0x20,%edi
call   1050 <malloc@plt>
mov    %rax,%rdx
mov    0x2ebb(%rip),%rax
movslq 0x2e14(%rip),%rcx
mov    %rdx,(%rax,%rcx,8)
mov    0x2e0a(%rip),%eax
add    $0x1,%eax
mov    %eax,0x2e01(%rip)
jmp    1227 <main+0xd7>
lea    0x301d(%rip),%rdi
lea    0x3096(%rip),%rsi
lea    0x310f(%rip),%rdx
lea    0x2f78(%rip),%rcx
lea    0x2fa1(%rip),%r8
lea    0x2fca(%rip),%r9
mov    $0x0,%al
call   1070 <ATV@plt>
movl   $0x1,0x2dc1(%rip)
mov    0x2dbb(%rip),%eax
cmp    0x2dad(%rip),%eax
jg     1481 <main+0x331>
lea    0xd43(%rip),%rdi
lea    0x2dc9(%rip),%rsi
lea    0x3192(%rip),%rdx
lea    0x2dc3(%rip),%rcx
lea    0x2dc4(%rip),%r8
lea    0x2dc5(%rip),%r9
mov    $0x0,%al
call   1060 <scanf@plt>
movsd  0x2d9e(%rip),%xmm0
mov    0x2e0f(%rip),%rax
movslq 0x2d68(%rip),%rcx
mov    (%rax,%rcx,8),%rax
movsd  %xmm0,(%rax)
movsd  0x2d88(%rip),%xmm1
movsd  0x2ef0(%rip),%xmm2
movsd  0x2d80(%rip),%xmm0
mulsd  0x2ee8(%rip),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0x2d70(%rip),%xmm0
movsd  0x2ed8(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x2db9(%rip),%rax
movslq 0x2d12(%rip),%rcx
mov    (%rax,%rcx,8),%rax
movsd  %xmm0,0x8(%rax)
movsd  0x2d31(%rip),%xmm1
movsd  0x2ec9(%rip),%xmm2
movsd  0x2d29(%rip),%xmm0
mulsd  0x2ec1(%rip),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0x2d19(%rip),%xmm0
movsd  0x2eb1(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x2d62(%rip),%rax
movslq 0x2cbb(%rip),%rcx
mov    (%rax,%rcx,8),%rax
movsd  %xmm0,0x10(%rax)
movsd  0x2cda(%rip),%xmm1
movsd  0x2ea2(%rip),%xmm2
movsd  0x2cd2(%rip),%xmm0
mulsd  0x2e9a(%rip),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0x2cc2(%rip),%xmm0
movsd  0x2e8a(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x2d0b(%rip),%rax
movslq 0x2c64(%rip),%rcx
mov    (%rax,%rcx,8),%rax
movsd  %xmm0,0x18(%rax)
mov    0x2c55(%rip),%esi
mov    0x2cee(%rip),%rax
movslq 0x2c47(%rip),%rcx
mov    (%rax,%rcx,8),%rax
movsd  0x8(%rax),%xmm0
mov    0x2cd7(%rip),%rax
movslq 0x2c30(%rip),%rcx
mov    (%rax,%rcx,8),%rax
movsd  0x10(%rax),%xmm1
mov    0x2cc0(%rip),%rax
movslq 0x2c19(%rip),%rcx
mov    (%rax,%rcx,8),%rax
movsd  0x18(%rax),%xmm2
lea    0xbb8(%rip),%rdi
lea    0x2ffa(%rip),%rdx
mov    $0x3,%al
call   1040 <printf@plt>
mov    0x2bf5(%rip),%eax
add    $0x1,%eax
mov    %eax,0x2bec(%rip)
jmp    12a7 <main+0x157>
movl   $0x0,0x2bdd(%rip)
mov    0x2bd7(%rip),%eax
cmp    0x2bc9(%rip),%eax
jg     14c8 <main+0x378>
mov    0x2c64(%rip),%rax
movslq 0x2bbd(%rip),%rcx
mov    (%rax,%rcx,8),%rdi
call   1030 <free@plt>
mov    0x2bae(%rip),%eax
add    $0x1,%eax
mov    %eax,0x2ba5(%rip)
jmp    148b <main+0x33b>
mov    0x2c39(%rip),%rdi
call   1030 <free@plt>
mov    -0x4(%rbp),%eax
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
lea    0xea9(%rip),%rbx
lea    0x2f2f(%rip),%rsi
lea    0x2f58(%rip),%rdx
lea    0x2f81(%rip),%rcx
xor    %r14d,%r14d
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <scanf@plt>
lea    0x2f15(%rip),%rsi
lea    0x2f3e(%rip),%rdx
lea    0x2f67(%rip),%rcx
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <scanf@plt>
lea    0x2efe(%rip),%rsi
lea    0x2f27(%rip),%rdx
lea    0x2f50(%rip),%rcx
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <scanf@plt>
lea    0xe37(%rip),%rdi
lea    0x2e90(%rip),%rsi
xor    %eax,%eax
call   1060 <scanf@plt>
mov    0x2e83(%rip),%ebx
lea    0x1(%rbx),%r15d
movslq %r15d,%rdi
shl    $0x3,%rdi
call   1050 <malloc@plt>
mov    %rax,0x2e94(%rip)
test   %ebx,%ebx
js     121a <main+0xca>
mov    %rax,%r12
mov    %r15d,%ebp
xor    %ebx,%ebx
mov    $0x20,%edi
call   1050 <malloc@plt>
mov    %rax,(%r12,%rbx,8)
add    $0x1,%rbx
cmp    %rbx,%rbp
jne    1200 <main+0xb0>
mov    %r15d,%r14d
mov    %r14d,0x2e43(%rip)
lea    0x2ef8(%rip),%rdi
lea    0x2f71(%rip),%rsi
lea    0x2fea(%rip),%rdx
lea    0x2e53(%rip),%rcx
lea    0x2e7c(%rip),%r8
lea    0x2ea5(%rip),%r9
xor    %eax,%eax
call   1070 <ATV@plt>
movl   $0x1,0x2e08(%rip)
mov    0x2dfe(%rip),%eax
test   %eax,%eax
jle    13a4 <main+0x254>
lea    0x2df7(%rip),%r15
lea    0x3028(%rip),%rbx
lea    0x2df1(%rip),%r12
lea    0x2df2(%rip),%r13
lea    0x2df3(%rip),%rbp
lea    0xd83(%rip),%r14
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
lea    0xd5c(%rip),%rdi
mov    %r15,%rsi
mov    %rbx,%rdx
mov    %r12,%rcx
mov    %r13,%r8
mov    %rbp,%r9
xor    %eax,%eax
call   1060 <scanf@plt>
movsd  0x2da3(%rip),%xmm0
mov    0x2dbc(%rip),%rax
movslq 0x2d91(%rip),%rsi
mov    (%rax,%rsi,8),%rax
movsd  %xmm0,(%rax)
movsd  0x2d8d(%rip),%xmm3
movsd  0x2d8d(%rip),%xmm4
movsd  0x2dad(%rip),%xmm0
mulsd  %xmm4,%xmm0
movsd  0x2d99(%rip),%xmm1
mulsd  %xmm3,%xmm1
addsd  %xmm0,%xmm1
movsd  0x2d71(%rip),%xmm2
movsd  0x2d91(%rip),%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x8(%rax)
movsd  0x2da4(%rip),%xmm1
mulsd  %xmm4,%xmm1
movsd  0x2d90(%rip),%xmm5
mulsd  %xmm3,%xmm5
addsd  %xmm1,%xmm5
movsd  0x2d90(%rip),%xmm1
mulsd  %xmm2,%xmm1
addsd  %xmm5,%xmm1
movsd  %xmm1,0x10(%rax)
mulsd  0x2da3(%rip),%xmm4
mulsd  0x2d93(%rip),%xmm3
addsd  %xmm4,%xmm3
mulsd  0x2d97(%rip),%xmm2
addsd  %xmm3,%xmm2
movsd  %xmm2,0x18(%rax)
mov    %r14,%rdi
mov    %rbx,%rdx
mov    $0x3,%al
call   1040 <printf@plt>
mov    0x2cd7(%rip),%ecx
lea    0x1(%rcx),%eax
mov    %eax,0x2cce(%rip)
mov    0x2cc4(%rip),%eax
cmp    %eax,%ecx
jl     12a0 <main+0x150>
test   %eax,%eax
js     13de <main+0x28e>
mov    0x2cd9(%rip),%rbx
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    %rax,%rbp
mov    (%rbx,%rax,8),%rdi
call   1030 <free@plt>
lea    0x1(%rbp),%rax
movslq 0x2c89(%rip),%rcx
cmp    %rcx,%rbp
jl     13c0 <main+0x270>
jmp    13e7 <main+0x297>
xor    %eax,%eax
mov    0x2ca1(%rip),%rbx
mov    %eax,0x2c77(%rip)
mov    %rbx,%rdi
call   1030 <free@plt>
xor    %eax,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@main.atomnum = internal global i32 0
@main.n = internal global i32 0
@main.i = internal global i32 0
@main.j = internal global i32 0
@main.k = internal global i32 0
@main.l = internal global i32 0
@main.m = internal global i32 0
@main.i1 = internal global i32 0
@main.i2 = internal global i32 0
@main.j1 = internal global i32 0
@main.j2 = internal global i32 0
@main.za0 = internal global double 0.000000e+00
@main.za1 = internal global double 0.000000e+00
@main.za2 = internal global double 0.000000e+00
@main.za3 = internal global double 0.000000e+00
@main.ka1 = internal global double 0.000000e+00
@main.ka2 = internal global double 0.000000e+00
@main.ka3 = internal global double 0.000000e+00
@main.al = internal global double 0.000000e+00
@main.be = internal global double 0.000000e+00
@main.ga = internal global double 0.000000e+00
@main.c1 = internal global double 0.000000e+00
@main.c2 = internal global double 0.000000e+00
@main.c3 = internal global double 0.000000e+00
@main.s2 = internal global double 0.000000e+00
@main.s3 = internal global double 0.000000e+00
@main.xyz = internal global double** null
@main.rxyz = internal global [10 x double] zeroinitializer
@main.tvxyz = internal global [5 x [4 x double]] zeroinitializer
@main.tvx = internal global [5 x double] zeroinitializer
@main.tvy = internal global [5 x double] zeroinitializer
@main.tvz = internal global [5 x double] zeroinitializer
@main.atvx = internal global [15 x double] zeroinitializer
@main.atvy = internal global [15 x double] zeroinitializer
@main.atvz = internal global [15 x double] zeroinitializer
@main.la1 = internal global double 0.000000e+00
@main.la2 = internal global double 0.000000e+00
@main.la3 = internal global double 0.000000e+00
@main.ang1 = internal global double 0.000000e+00
@main.ang2 = internal global double 0.000000e+00
@main.ang3 = internal global double 0.000000e+00
@main.r = internal global double 0.000000e+00
@main.dx = internal global double 0.000000e+00
@main.dy = internal global double 0.000000e+00
@main.dz = internal global double 0.000000e+00
@main.Name = internal global [100 x i8] zeroinitializer
@.str = [12 x i8] c"%lf %lf %lf\00"
@.str.1 = [3 x i8] c"%i\00"
@.str.2 = [20 x i8] c"%lf %s %lf %lf %lf\00"
@.str.3 = [37 x i8] c"%4d %3s %16.12f %16.12f %16.12f\0A\00"
define i32 @main() {
%1 = alloca i32
store i32 0, i32* %1
%2 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str, i64 0, i64 0), double* getelementptr inbounds ([5 x double], [5 x double]* @main.tvx, i64 0, i64 1), double* getelementptr inbounds ([5 x double], [5 x double]* @main.tvy, i64 0, i64 1), double* getelementptr inbounds ([5 x double], [5 x double]* @main.tvz, i64 0, i64 1))
%3 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str, i64 0, i64 0), double* getelementptr inbounds ([5 x double], [5 x double]* @main.tvx, i64 0, i64 2), double* getelementptr inbounds ([5 x double], [5 x double]* @main.tvy, i64 0, i64 2), double* getelementptr inbounds ([5 x double], [5 x double]* @main.tvz, i64 0, i64 2))
%4 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str, i64 0, i64 0), double* getelementptr inbounds ([5 x double], [5 x double]* @main.tvx, i64 0, i64 3), double* getelementptr inbounds ([5 x double], [5 x double]* @main.tvy, i64 0, i64 3), double* getelementptr inbounds ([5 x double], [5 x double]* @main.tvz, i64 0, i64 3))
%5 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* @main.atomnum)
%6 = load i32, i32* @main.atomnum
%7 = add nsw i32 %6, 1
%8 = sext i32 %7 to i64
%9 = mul i64 8, %8
%10 = call i8* @malloc(i64 %9)
%11 = bitcast i8* %10 to double**
store double** %11, double*** @main.xyz
store i32 0, i32* @main.i
br label %12
12: ; preds = %23, %0
%13 = load i32, i32* @main.i
%14 = load i32, i32* @main.atomnum
%15 = icmp sle i32 %13, %14
br i1 %15, label %16, label %26
16: ; preds = %12
%17 = call i8* @malloc(i64 32)
%18 = bitcast i8* %17 to double*
%19 = load double**, double*** @main.xyz
%20 = load i32, i32* @main.i
%21 = sext i32 %20 to i64
%22 = getelementptr inbounds double*, double** %19, i64 %21
store double* %18, double** %22
br label %23
23: ; preds = %16
%24 = load i32, i32* @main.i
%25 = add nsw i32 %24, 1
store i32 %25, i32* @main.i
br label %12
26: ; preds = %12
%27 = call i32 (double*, double*, double*, double*, double*, double*, ...) bitcast (i32 (...)* @ATV to i32 (double*, double*, double*, double*, double*, double*, ...)*)(double* getelementptr inbounds ([15 x double], [15 x double]* @main.atvx, i64 0, i64 0), double* getelementptr inbounds ([15 x double], [15 x double]* @main.atvy, i64 0, i64 0), double* getelementptr inbounds ([15 x double], [15 x double]* @main.atvz, i64 0, i64 0), double* getelementptr inbounds ([5 x double], [5 x double]* @main.tvx, i64 0, i64 0), double* getelementptr inbounds ([5 x double], [5 x double]* @main.tvy, i64 0, i64 0), double* getelementptr inbounds ([5 x double], [5 x double]* @main.tvz, i64 0, i64 0))
store i32 1, i32* @main.i
br label %28
28: ; preds = %109, %26
%29 = load i32, i32* @main.i
%30 = load i32, i32* @main.atomnum
%31 = icmp sle i32 %29, %30
br i1 %31, label %32, label %112
32: ; preds = %28
%33 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.2, i64 0, i64 0), double* @main.za0, [100 x i8]* @main.Name, double* @main.za1, double* @main.za2, double* @main.za3)
%34 = load double, double* @main.za0
%35 = load double**, double*** @main.xyz
%36 = load i32, i32* @main.i
%37 = sext i32 %36 to i64
%38 = getelementptr inbounds double*, double** %35, i64 %37
%39 = load double*, double** %38
%40 = getelementptr inbounds double, double* %39, i64 0
store double %34, double* %40
%41 = load double, double* @main.za1
%42 = load double, double* getelementptr inbounds ([5 x double], [5 x double]* @main.tvx, i64 0, i64 1)
%43 = load double, double* @main.za2
%44 = load double, double* getelementptr inbounds ([5 x double], [5 x double]* @main.tvx, i64 0, i64 2)
%45 = fmul double %43, %44
%46 = call double @llvm.fmuladd.f64(double %41, double %42, double %45)
%47 = load double, double* @main.za3
%48 = load double, double* getelementptr inbounds ([5 x double], [5 x double]* @main.tvx, i64 0, i64 3)
%49 = call double @llvm.fmuladd.f64(double %47, double %48, double %46)
%50 = load double**, double*** @main.xyz
%51 = load i32, i32* @main.i
%52 = sext i32 %51 to i64
%53 = getelementptr inbounds double*, double** %50, i64 %52
%54 = load double*, double** %53
%55 = getelementptr inbounds double, double* %54, i64 1
store double %49, double* %55
%56 = load double, double* @main.za1
%57 = load double, double* getelementptr inbounds ([5 x double], [5 x double]* @main.tvy, i64 0, i64 1)
%58 = load double, double* @main.za2
%59 = load double, double* getelementptr inbounds ([5 x double], [5 x double]* @main.tvy, i64 0, i64 2)
%60 = fmul double %58, %59
%61 = call double @llvm.fmuladd.f64(double %56, double %57, double %60)
%62 = load double, double* @main.za3
%63 = load double, double* getelementptr inbounds ([5 x double], [5 x double]* @main.tvy, i64 0, i64 3)
%64 = call double @llvm.fmuladd.f64(double %62, double %63, double %61)
%65 = load double**, double*** @main.xyz
%66 = load i32, i32* @main.i
%67 = sext i32 %66 to i64
%68 = getelementptr inbounds double*, double** %65, i64 %67
%69 = load double*, double** %68
%70 = getelementptr inbounds double, double* %69, i64 2
store double %64, double* %70
%71 = load double, double* @main.za1
%72 = load double, double* getelementptr inbounds ([5 x double], [5 x double]* @main.tvz, i64 0, i64 1)
%73 = load double, double* @main.za2
%74 = load double, double* getelementptr inbounds ([5 x double], [5 x double]* @main.tvz, i64 0, i64 2)
%75 = fmul double %73, %74
%76 = call double @llvm.fmuladd.f64(double %71, double %72, double %75)
%77 = load double, double* @main.za3
%78 = load double, double* getelementptr inbounds ([5 x double], [5 x double]* @main.tvz, i64 0, i64 3)
%79 = call double @llvm.fmuladd.f64(double %77, double %78, double %76)
%80 = load double**, double*** @main.xyz
%81 = load i32, i32* @main.i
%82 = sext i32 %81 to i64
%83 = getelementptr inbounds double*, double** %80, i64 %82
%84 = load double*, double** %83
%85 = getelementptr inbounds double, double* %84, i64 3
store double %79, double* %85
%86 = load i32, i32* @main.i
%87 = load double**, double*** @main.xyz
%88 = load i32, i32* @main.i
%89 = sext i32 %88 to i64
%90 = getelementptr inbounds double*, double** %87, i64 %89
%91 = load double*, double** %90
%92 = getelementptr inbounds double, double* %91, i64 1
%93 = load double, double* %92
%94 = load double**, double*** @main.xyz
%95 = load i32, i32* @main.i
%96 = sext i32 %95 to i64
%97 = getelementptr inbounds double*, double** %94, i64 %96
%98 = load double*, double** %97
%99 = getelementptr inbounds double, double* %98, i64 2
%100 = load double, double* %99
%101 = load double**, double*** @main.xyz
%102 = load i32, i32* @main.i
%103 = sext i32 %102 to i64
%104 = getelementptr inbounds double*, double** %101, i64 %103
%105 = load double*, double** %104
%106 = getelementptr inbounds double, double* %105, i64 3
%107 = load double, double* %106
%108 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.3, i64 0, i64 0), i32 %86, i8* getelementptr inbounds ([100 x i8], [100 x i8]* @main.Name, i64 0, i64 0), double %93, double %100, double %107)
br label %109
109: ; preds = %32
%110 = load i32, i32* @main.i
%111 = add nsw i32 %110, 1
store i32 %111, i32* @main.i
br label %28
112: ; preds = %28
store i32 0, i32* @main.i
br label %113
113: ; preds = %124, %112
%114 = load i32, i32* @main.i
%115 = load i32, i32* @main.atomnum
%116 = icmp sle i32 %114, %115
br i1 %116, label %117, label %127
117: ; preds = %113
%118 = load double**, double*** @main.xyz
%119 = load i32, i32* @main.i
%120 = sext i32 %119 to i64
%121 = getelementptr inbounds double*, double** %118, i64 %120
%122 = load double*, double** %121
%123 = bitcast double* %122 to i8*
br label %124
124: ; preds = %117
%125 = load i32, i32* @main.i
%126 = add nsw i32 %125, 1
store i32 %126, i32* @main.i
br label %113
127: ; preds = %113
%128 = load double**, double*** @main.xyz
%129 = bitcast double** %128 to i8*
%130 = load i32, i32* %1
ret i32 %130
}

LLVM IR (-O2):
@main.atomnum = internal global i32 0
@main.i = internal unnamed_addr global i32 0
@main.za0 = internal global double 0.000000e+00
@main.za1 = internal global double 0.000000e+00
@main.za2 = internal global double 0.000000e+00
@main.za3 = internal global double 0.000000e+00
@main.xyz = internal unnamed_addr global double** null
@main.tvx = internal global [5 x double] zeroinitializer
@main.tvy = internal global [5 x double] zeroinitializer
@main.tvz = internal global [5 x double] zeroinitializer
@main.atvx = internal global [15 x double] zeroinitializer
@main.atvy = internal global [15 x double] zeroinitializer
@main.atvz = internal global [15 x double] zeroinitializer
@main.Name = internal global [100 x i8] zeroinitializer
@.str = [12 x i8] c"%lf %lf %lf\00"
@.str.1 = [3 x i8] c"%i\00"
@.str.2 = [20 x i8] c"%lf %s %lf %lf %lf\00"
@.str.3 = [37 x i8] c"%4d %3s %16.12f %16.12f %16.12f\0A\00"
define i32 @main() {
%1 = tail call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str, i64 0, i64 0), double* getelementptr inbounds ([5 x double], [5 x double]* @main.tvx, i64 0, i64 1), double* getelementptr inbounds ([5 x double], [5 x double]* @main.tvy, i64 0, i64 1), double* getelementptr inbounds ([5 x double], [5 x double]* @main.tvz, i64 0, i64 1))
%2 = tail call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str, i64 0, i64 0), double* getelementptr inbounds ([5 x double], [5 x double]* @main.tvx, i64 0, i64 2), double* getelementptr inbounds ([5 x double], [5 x double]* @main.tvy, i64 0, i64 2), double* getelementptr inbounds ([5 x double], [5 x double]* @main.tvz, i64 0, i64 2))
%3 = tail call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str, i64 0, i64 0), double* getelementptr inbounds ([5 x double], [5 x double]* @main.tvx, i64 0, i64 3), double* getelementptr inbounds ([5 x double], [5 x double]* @main.tvy, i64 0, i64 3), double* getelementptr inbounds ([5 x double], [5 x double]* @main.tvz, i64 0, i64 3))
%4 = tail call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* @main.atomnum)
%5 = load i32, i32* @main.atomnum
%6 = add i32 %5, 1
%7 = sext i32 %6 to i64
%8 = shl nsw i64 %7, 3
%9 = tail call i8* @malloc(i64 %8)
store i8* %9, i8** bitcast (double*** @main.xyz to i8**)
%10 = icmp slt i32 %5, 0
%11 = bitcast i8* %9 to double**
br i1 %10, label %21, label %12
12: ; preds = %0
%13 = zext i32 %6 to i64
br label %14
14: ; preds = %12, %14
%15 = phi i64 [ 0, %12 ], [ %19, %14 ]
%16 = tail call dereferenceable_or_null(32) i8* @malloc(i64 32)
%17 = getelementptr inbounds double*, double** %11, i64 %15
%18 = bitcast double** %17 to i8**
store i8* %16, i8** %18
%19 = add nuw nsw i64 %15, 1
%20 = icmp eq i64 %19, %13
br i1 %20, label %21, label %14
21: ; preds = %14, %0
%22 = phi i32 [ 0, %0 ], [ %6, %14 ]
store i32 %22, i32* @main.i
%23 = tail call i32 (double*, double*, double*, double*, double*, double*, ...) bitcast (i32 (...)* @ATV to i32 (double*, double*, double*, double*, double*, double*, ...)*)(double* getelementptr inbounds ([15 x double], [15 x double]* @main.atvx, i64 0, i64 0), double* getelementptr inbounds ([15 x double], [15 x double]* @main.atvy, i64 0, i64 0), double* getelementptr inbounds ([15 x double], [15 x double]* @main.atvz, i64 0, i64 0), double* getelementptr inbounds ([5 x double], [5 x double]* @main.tvx, i64 0, i64 0), double* getelementptr inbounds ([5 x double], [5 x double]* @main.tvy, i64 0, i64 0), double* getelementptr inbounds ([5 x double], [5 x double]* @main.tvz, i64 0, i64 0))
store i32 1, i32* @main.i
%24 = load i32, i32* @main.atomnum
%25 = icmp slt i32 %24, 1
br i1 %25, label %26, label %34
26: ; preds = %34, %21
%27 = phi i32 [ %24, %21 ], [ %69, %34 ]
%28 = icmp slt i32 %27, 0
br i1 %28, label %29, label %31
29: ; preds = %26
%30 = load i8*, i8** bitcast (double*** @main.xyz to i8**)
br label %82
31: ; preds = %26
%32 = load double**, double*** @main.xyz
%33 = bitcast double** %32 to i8*
br label %71
34: ; preds = %21, %34
%35 = tail call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.2, i64 0, i64 0), double* @main.za0, [100 x i8]* @main.Name, double* @main.za1, double* @main.za2, double* @main.za3)
%36 = load double, double* @main.za0
%37 = load double**, double*** @main.xyz
%38 = load i32, i32* @main.i
%39 = sext i32 %38 to i64
%40 = getelementptr inbounds double*, double** %37, i64 %39
%41 = load double*, double** %40
store double %36, double* %41
%42 = load double, double* @main.za1
%43 = load double, double* getelementptr inbounds ([5 x double], [5 x double]* @main.tvx, i64 0, i64 1)
%44 = load double, double* @main.za2
%45 = load double, double* getelementptr inbounds ([5 x double], [5 x double]* @main.tvx, i64 0, i64 2)
%46 = fmul double %44, %45
%47 = tail call double @llvm.fmuladd.f64(double %42, double %43, double %46)
%48 = load double, double* @main.za3
%49 = load double, double* getelementptr inbounds ([5 x double], [5 x double]* @main.tvx, i64 0, i64 3)
%50 = tail call double @llvm.fmuladd.f64(double %48, double %49, double %47)
%51 = getelementptr inbounds double, double* %41, i64 1
store double %50, double* %51
%52 = load double, double* getelementptr inbounds ([5 x double], [5 x double]* @main.tvy, i64 0, i64 1)
%53 = load double, double* getelementptr inbounds ([5 x double], [5 x double]* @main.tvy, i64 0, i64 2)
%54 = fmul double %44, %53
%55 = tail call double @llvm.fmuladd.f64(double %42, double %52, double %54)
%56 = load double, double* getelementptr inbounds ([5 x double], [5 x double]* @main.tvy, i64 0, i64 3)
%57 = tail call double @llvm.fmuladd.f64(double %48, double %56, double %55)
%58 = getelementptr inbounds double, double* %41, i64 2
store double %57, double* %58
%59 = load double, double* getelementptr inbounds ([5 x double], [5 x double]* @main.tvz, i64 0, i64 1)
%60 = load double, double* getelementptr inbounds ([5 x double], [5 x double]* @main.tvz, i64 0, i64 2)
%61 = fmul double %44, %60
%62 = tail call double @llvm.fmuladd.f64(double %42, double %59, double %61)
%63 = load double, double* getelementptr inbounds ([5 x double], [5 x double]* @main.tvz, i64 0, i64 3)
%64 = tail call double @llvm.fmuladd.f64(double %48, double %63, double %62)
%65 = getelementptr inbounds double, double* %41, i64 3
store double %64, double* %65
%66 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([37 x i8], [37 x i8]* @.str.3, i64 0, i64 0), i32 %38, i8* getelementptr inbounds ([100 x i8], [100 x i8]* @main.Name, i64 0, i64 0), double %50, double %57, double %64)
%67 = load i32, i32* @main.i
%68 = add nsw i32 %67, 1
store i32 %68, i32* @main.i
%69 = load i32, i32* @main.atomnum
%70 = icmp slt i32 %67, %69
br i1 %70, label %34, label %26
71: ; preds = %31, %71
%72 = phi i64 [ 0, %31 ], [ %76, %71 ]
%73 = getelementptr inbounds double*, double** %32, i64 %72
%74 = bitcast double** %73 to i8**
%75 = load i8*, i8** %74
tail call void @free(i8* %75)
%76 = add nuw nsw i64 %72, 1
%77 = load i32, i32* @main.atomnum
%78 = sext i32 %77 to i64
%79 = icmp slt i64 %72, %78
br i1 %79, label %71, label %80
80: ; preds = %71
%81 = trunc i64 %76 to i32
br label %82
82: ; preds = %29, %80
%83 = phi i8* [ %30, %29 ], [ %33, %80 ]
%84 = phi i32 [ 0, %29 ], [ %81, %80 ]
store i32 %84, i32* @main.i
tail call void @free(i8* %83)
ret i32 0
}