int main(int argc, char *argv[]) {
  static int ct_AN;
  static double Gxyz2[10][10];
  static double xyz2[10][10];
  static double Q1, Q2, Q3;
  static double Sx, Sy, Sz, Cx, Cy, Cz;
  static double Rot[5][5], r;
  Gxyz2[1][1] = 0.0;
  Gxyz2[1][2] = 0.0;
  Gxyz2[1][3] = 0.0;
  Gxyz2[2][1] = 0.76;
  Gxyz2[2][2] = 0.59;
  Gxyz2[2][3] = 0.00;
  Gxyz2[3][1] = -0.76;
  Gxyz2[3][2] = 0.59;
  Gxyz2[3][3] = 0.00;
  Q1 = 30.0 / 180.0 * 3.1415926535897932384626;
  Q2 = 40.0 / 180.0 * 3.1415926535897932384626;
  Q3 = 50.0 / 180.0 * 3.1415926535897932384626;
  Sx = sin(Q1);
  Cx = cos(Q1);
  Sy = sin(Q2);
  Cy = cos(Q2);
  Sz = sin(Q3);
  Cz = cos(Q3);
  Rot[1][1] = Cy * Cz;
  Rot[1][2] = Sx * Sy * Cz - Cx * Sz;
  Rot[1][3] = Cx * Sy * Cz + Sx * Sz;
  Rot[2][1] = Cy * Sz;
  Rot[2][2] = Sx * Sy * Sz + Cx * Cz;
  Rot[2][3] = Cx * Sy * Sz - Sx * Cz;
  Rot[3][1] = -Sy;
  Rot[3][2] = Sx * Cy;
  Rot[3][3] = Cx * Cy;
  for (ct_AN = 1; ct_AN <= 3; ct_AN++) {
    xyz2[ct_AN][1] = Rot[1][1] * Gxyz2[ct_AN][1] + Rot[1][2] * Gxyz2[ct_AN][2] +
                     Rot[1][3] * Gxyz2[ct_AN][3];
    xyz2[ct_AN][2] = Rot[2][1] * Gxyz2[ct_AN][1] + Rot[2][2] * Gxyz2[ct_AN][2] +
                     Rot[2][3] * Gxyz2[ct_AN][3];
    xyz2[ct_AN][3] = Rot[3][1] * Gxyz2[ct_AN][1] + Rot[3][2] * Gxyz2[ct_AN][2] +
                     Rot[3][3] * Gxyz2[ct_AN][3];
    r = sqrt(xyz2[ct_AN][1] * xyz2[ct_AN][1] + xyz2[ct_AN][2] * xyz2[ct_AN][2] +
             xyz2[ct_AN][3] * xyz2[ct_AN][3]);
    printf(" %15.12f %15.12f %15.12f\n", xyz2[ct_AN][1], xyz2[ct_AN][2],
           xyz2[ct_AN][3]);
  }
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
movl   $0x0,-0x4(%rbp)
mov    %edi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,0x2f57(%rip)
xorps  %xmm0,%xmm0
movsd  %xmm0,0x2f54(%rip)
xorps  %xmm0,%xmm0
movsd  %xmm0,0x2f51(%rip)
movsd  0xea9(%rip),%xmm0
movsd  %xmm0,0x2f81(%rip)
movsd  0xe89(%rip),%xmm0
movsd  %xmm0,0x2f79(%rip)
xorps  %xmm0,%xmm0
movsd  %xmm0,0x2f76(%rip)
movsd  0xe76(%rip),%xmm0
movsd  %xmm0,0x2fa6(%rip)
movsd  0xe5e(%rip),%xmm0
movsd  %xmm0,0x2f9e(%rip)
xorps  %xmm0,%xmm0
movsd  %xmm0,0x2f9b(%rip)
movsd  0xe3b(%rip),%xmm0
movsd  %xmm0,0x34c3(%rip)
movsd  0xe23(%rip),%xmm0
movsd  %xmm0,0x34bb(%rip)
movsd  0xe0b(%rip),%xmm0
movsd  %xmm0,0x34b3(%rip)
movsd  0x349b(%rip),%xmm0
call   1040 <sin@plt>
movsd  %xmm0,0x34a6(%rip)
movsd  0x3486(%rip),%xmm0
call   1050 <cos@plt>
movsd  %xmm0,0x34a9(%rip)
movsd  0x3479(%rip),%xmm0
call   1040 <sin@plt>
movsd  %xmm0,0x3484(%rip)
movsd  0x3464(%rip),%xmm0
call   1050 <cos@plt>
movsd  %xmm0,0x3487(%rip)
movsd  0x3457(%rip),%xmm0
call   1040 <sin@plt>
movsd  %xmm0,0x3462(%rip)
movsd  0x3442(%rip),%xmm0
call   1050 <cos@plt>
movsd  %xmm0,0x3465(%rip)
movsd  0x3455(%rip),%xmm0
mulsd  0x3455(%rip),%xmm0
movsd  %xmm0,0x348d(%rip)
movsd  0x341d(%rip),%xmm0
mulsd  0x341d(%rip),%xmm0
movsd  0x3435(%rip),%xmm2
movsd  0x341d(%rip),%xmm1
mulsd  0x340d(%rip),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x3446(%rip)
movsd  0x33e6(%rip),%xmm0
mulsd  0x33ce(%rip),%xmm0
movsd  0x33e6(%rip),%xmm2
movsd  0x33b6(%rip),%xmm1
mulsd  0x33be(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x3416(%rip)
movsd  0x33b6(%rip),%xmm0
mulsd  0x339e(%rip),%xmm0
movsd  %xmm0,0x3416(%rip)
movsd  0x337e(%rip),%xmm0
mulsd  0x337e(%rip),%xmm0
movsd  0x337e(%rip),%xmm2
movsd  0x337e(%rip),%xmm1
mulsd  0x3386(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x33e6(%rip)
movsd  0x335e(%rip),%xmm0
mulsd  0x3346(%rip),%xmm0
movsd  0x3346(%rip),%xmm2
movsd  0x332e(%rip),%xmm1
mulsd  0x334e(%rip),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x339f(%rip)
movsd  0x32ff(%rip),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,0x3390(%rip)
movsd  0x32d0(%rip),%xmm0
mulsd  0x32e8(%rip),%xmm0
movsd  %xmm0,0x3380(%rip)
movsd  0x32d0(%rip),%xmm0
mulsd  0x32d0(%rip),%xmm0
movsd  %xmm0,0x3370(%rip)
movl   $0x1,0x2c36(%rip)
cmpl   $0x3,0x2c2f(%rip)
jg     1700 <main+0x5c0>
movsd  0x32f1(%rip),%xmm1
movslq 0x2c1a(%rip),%rcx
lea    0x2c23(%rip),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movsd  0x8(%rax),%xmm2
movsd  0x32d7(%rip),%xmm0
movslq 0x2bf8(%rip),%rcx
lea    0x2c01(%rip),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
mulsd  0x10(%rax),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0x32b5(%rip),%xmm0
movslq 0x2bce(%rip),%rcx
lea    0x2bd7(%rip),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movsd  0x18(%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movslq 0x2bac(%rip),%rcx
lea    0x2ed5(%rip),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movsd  %xmm0,0x8(%rax)
movsd  0x3289(%rip),%xmm1
movslq 0x2b8a(%rip),%rcx
lea    0x2b93(%rip),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movsd  0x8(%rax),%xmm2
movsd  0x326f(%rip),%xmm0
movslq 0x2b68(%rip),%rcx
lea    0x2b71(%rip),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
mulsd  0x10(%rax),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0x324d(%rip),%xmm0
movslq 0x2b3e(%rip),%rcx
lea    0x2b47(%rip),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movsd  0x18(%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movslq 0x2b1c(%rip),%rcx
lea    0x2e45(%rip),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movsd  %xmm0,0x10(%rax)
movsd  0x3221(%rip),%xmm1
movslq 0x2afa(%rip),%rcx
lea    0x2b03(%rip),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movsd  0x8(%rax),%xmm2
movsd  0x3207(%rip),%xmm0
movslq 0x2ad8(%rip),%rcx
lea    0x2ae1(%rip),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
mulsd  0x10(%rax),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0x31e5(%rip),%xmm0
movslq 0x2aae(%rip),%rcx
lea    0x2ab7(%rip),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movsd  0x18(%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movslq 0x2a8c(%rip),%rcx
lea    0x2db5(%rip),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movsd  %xmm0,0x18(%rax)
movslq 0x2a72(%rip),%rcx
lea    0x2d9b(%rip),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movsd  0x8(%rax),%xmm1
movslq 0x2a58(%rip),%rcx
lea    0x2d81(%rip),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movsd  0x8(%rax),%xmm2
movslq 0x2a3e(%rip),%rcx
lea    0x2d67(%rip),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movsd  0x10(%rax),%xmm0
movslq 0x2a24(%rip),%rcx
lea    0x2d4d(%rip),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
mulsd  0x10(%rax),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movslq 0x2a02(%rip),%rcx
lea    0x2d2b(%rip),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movsd  0x18(%rax),%xmm0
movslq 0x29e8(%rip),%rcx
lea    0x2d11(%rip),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movsd  0x18(%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1060 <sqrt@plt>
movsd  %xmm0,0x3128(%rip)
movslq 0x29b9(%rip),%rcx
lea    0x2ce2(%rip),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movsd  0x8(%rax),%xmm0
movslq 0x299f(%rip),%rcx
lea    0x2cc8(%rip),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movsd  0x10(%rax),%xmm1
movslq 0x2985(%rip),%rcx
lea    0x2cae(%rip),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movsd  0x18(%rax),%xmm2
lea    0x94b(%rip),%rdi
mov    $0x3,%al
call   1030 <printf@plt>
mov    0x295e(%rip),%eax
add    $0x1,%eax
mov    %eax,0x2955(%rip)
jmp    141a <main+0x2da>
mov    -0x4(%rbp),%eax
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %r14
push   %rbx
push   %rax
xorps  %xmm0,%xmm0
movups %xmm0,0x2f8a(%rip)
movq   $0x0,0x2f8f(%rip)
movaps 0xed0(%rip),%xmm0
movups %xmm0,0x2fc1(%rip)
movq   $0x0,0x2fc6(%rip)
movaps 0xec7(%rip),%xmm0
movups %xmm0,0x2ff8(%rip)
movq   $0x0,0x2ffd(%rip)
movabs $0x3fdf838b8c811c18,%rax
83 df 3f
mov    %rax,0x3204(%rip)
movabs $0xbfdd3ca316879084,%rax
3c dd bf
mov    %rax,0x3203(%rip)
movabs $0x3fe7b4fc7f960a69,%rax
b4 e7 3f
mov    %rax,0x3202(%rip)
movabs $0x3fe2c7434fc16e71,%rax
c7 e2 3f
mov    %rax,0x3201(%rip)
movabs $0x3fe9b121540acc05,%rax
b1 e9 3f
mov    %rax,0x3200(%rip)
movabs $0x3fbae3ee8152a239,%rax
e3 ba 3f
mov    %rax,0x31ff(%rip)
movabs $0xbfe491b7523c161c,%rax
91 e4 bf
mov    %rax,0x31fe(%rip)
movabs $0x3fd8836fa2cf5038,%rax
83 d8 3f
mov    %rax,0x31fd(%rip)
movabs $0x3fe53aafe3631109,%rax
3a e5 3f
mov    %rax,0x31fc(%rip)
movl   $0x1,0x2e42(%rip)
movsd  0xe1a(%rip),%xmm5
movsd  0xe19(%rip),%xmm11
movsd  0xe19(%rip),%xmm0
xorpd  %xmm8,%xmm8
movsd  0xe14(%rip),%xmm6
movsd  0xe13(%rip),%xmm10
movsd  0xe13(%rip),%xmm1
movsd  0xe13(%rip),%xmm4
movsd  0xe12(%rip),%xmm9
movsd  0xe12(%rip),%xmm2
lea    0xe13(%rip),%r14
lea    0x2df4(%rip),%rbx
xorpd  %xmm7,%xmm7
xorpd  %xmm3,%xmm3
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mulsd  %xmm7,%xmm11
mulsd  %xmm3,%xmm5
addsd  %xmm11,%xmm5
mulsd  %xmm8,%xmm0
addsd  %xmm5,%xmm0
mulsd  %xmm7,%xmm10
mulsd  %xmm3,%xmm6
addsd  %xmm10,%xmm6
mulsd  %xmm8,%xmm1
addsd  %xmm6,%xmm1
mulsd  %xmm7,%xmm9
mulsd  %xmm3,%xmm4
addsd  %xmm9,%xmm4
mulsd  %xmm8,%xmm2
addsd  %xmm4,%xmm2
mov    %r14,%rdi
mov    $0x3,%al
call   1030 <printf@plt>
movslq 0x2d7a(%rip),%rcx
lea    0x1(%rcx),%rax
mov    %eax,0x2d70(%rip)
cmp    $0x2,%rcx
jg     1341 <main+0x231>
movsd  0x3092(%rip),%xmm5
lea    (%rax,%rax,4),%rax
shl    $0x4,%rax
movsd  0x8(%rax,%rbx,1),%xmm3
movsd  0x10(%rax,%rbx,1),%xmm7
movsd  0x3085(%rip),%xmm11
movsd  0x308d(%rip),%xmm0
movsd  0x18(%rax,%rbx,1),%xmm8
movsd  0x308e(%rip),%xmm6
movsd  0x3095(%rip),%xmm10
movsd  0x309d(%rip),%xmm1
movsd  0x30a5(%rip),%xmm4
movsd  0x30ac(%rip),%xmm9
movsd  0x30b4(%rip),%xmm2
jmp    1270 <main+0x160>
xor    %eax,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r14
ret

LLVM IR (-O0):
@main.ct_AN = internal global i32 0
@main.Gxyz2 = internal global [10 x [10 x double]] zeroinitializer
@main.xyz2 = internal global [10 x [10 x double]] zeroinitializer
@main.Q1 = internal global double 0.000000e+00
@main.Q2 = internal global double 0.000000e+00
@main.Q3 = internal global double 0.000000e+00
@main.Sx = internal global double 0.000000e+00
@main.Sy = internal global double 0.000000e+00
@main.Sz = internal global double 0.000000e+00
@main.Cx = internal global double 0.000000e+00
@main.Cy = internal global double 0.000000e+00
@main.Cz = internal global double 0.000000e+00
@main.Rot = internal global [5 x [5 x double]] zeroinitializer
@main.r = internal global double 0.000000e+00
@.str = [26 x i8] c" %15.12f %15.12f %15.12f\0A\00"
define i32 @main(i32 %0, i8** %1) {
%3 = alloca i32
%4 = alloca i32
%5 = alloca i8**
store i32 0, i32* %3
store i32 %0, i32* %4
store i8** %1, i8*** %5
store double 0.000000e+00, double* getelementptr inbounds ([10 x [10 x double]], [10 x [10 x double]]* @main.Gxyz2, i64 0, i64 1, i64 1)
store double 0.000000e+00, double* getelementptr inbounds ([10 x [10 x double]], [10 x [10 x double]]* @main.Gxyz2, i64 0, i64 1, i64 2)
store double 0.000000e+00, double* getelementptr inbounds ([10 x [10 x double]], [10 x [10 x double]]* @main.Gxyz2, i64 0, i64 1, i64 3)
store double 7.600000e-01, double* getelementptr inbounds ([10 x [10 x double]], [10 x [10 x double]]* @main.Gxyz2, i64 0, i64 2, i64 1)
store double 5.900000e-01, double* getelementptr inbounds ([10 x [10 x double]], [10 x [10 x double]]* @main.Gxyz2, i64 0, i64 2, i64 2)
store double 0.000000e+00, double* getelementptr inbounds ([10 x [10 x double]], [10 x [10 x double]]* @main.Gxyz2, i64 0, i64 2, i64 3)
store double -7.600000e-01, double* getelementptr inbounds ([10 x [10 x double]], [10 x [10 x double]]* @main.Gxyz2, i64 0, i64 3, i64 1)
store double 5.900000e-01, double* getelementptr inbounds ([10 x [10 x double]], [10 x [10 x double]]* @main.Gxyz2, i64 0, i64 3, i64 2)
store double 0.000000e+00, double* getelementptr inbounds ([10 x [10 x double]], [10 x [10 x double]]* @main.Gxyz2, i64 0, i64 3, i64 3)
store double 0x3FE0C152382D7365, double* @main.Q1
store double 0x3FE657184AE74487, double* @main.Q2
store double 0x3FEBECDE5DA115A9, double* @main.Q3
%6 = load double, double* @main.Q1
%7 = call double @sin(double %6)
store double %7, double* @main.Sx
%8 = load double, double* @main.Q1
%9 = call double @cos(double %8)
store double %9, double* @main.Cx
%10 = load double, double* @main.Q2
%11 = call double @sin(double %10)
store double %11, double* @main.Sy
%12 = load double, double* @main.Q2
%13 = call double @cos(double %12)
store double %13, double* @main.Cy
%14 = load double, double* @main.Q3
%15 = call double @sin(double %14)
store double %15, double* @main.Sz
%16 = load double, double* @main.Q3
%17 = call double @cos(double %16)
store double %17, double* @main.Cz
%18 = load double, double* @main.Cy
%19 = load double, double* @main.Cz
%20 = fmul double %18, %19
store double %20, double* getelementptr inbounds ([5 x [5 x double]], [5 x [5 x double]]* @main.Rot, i64 0, i64 1, i64 1)
%21 = load double, double* @main.Sx
%22 = load double, double* @main.Sy
%23 = fmul double %21, %22
%24 = load double, double* @main.Cz
%25 = load double, double* @main.Cx
%26 = load double, double* @main.Sz
%27 = fmul double %25, %26
%28 = fneg double %27
%29 = call double @llvm.fmuladd.f64(double %23, double %24, double %28)
store double %29, double* getelementptr inbounds ([5 x [5 x double]], [5 x [5 x double]]* @main.Rot, i64 0, i64 1, i64 2)
%30 = load double, double* @main.Cx
%31 = load double, double* @main.Sy
%32 = fmul double %30, %31
%33 = load double, double* @main.Cz
%34 = load double, double* @main.Sx
%35 = load double, double* @main.Sz
%36 = fmul double %34, %35
%37 = call double @llvm.fmuladd.f64(double %32, double %33, double %36)
store double %37, double* getelementptr inbounds ([5 x [5 x double]], [5 x [5 x double]]* @main.Rot, i64 0, i64 1, i64 3)
%38 = load double, double* @main.Cy
%39 = load double, double* @main.Sz
%40 = fmul double %38, %39
store double %40, double* getelementptr inbounds ([5 x [5 x double]], [5 x [5 x double]]* @main.Rot, i64 0, i64 2, i64 1)
%41 = load double, double* @main.Sx
%42 = load double, double* @main.Sy
%43 = fmul double %41, %42
%44 = load double, double* @main.Sz
%45 = load double, double* @main.Cx
%46 = load double, double* @main.Cz
%47 = fmul double %45, %46
%48 = call double @llvm.fmuladd.f64(double %43, double %44, double %47)
store double %48, double* getelementptr inbounds ([5 x [5 x double]], [5 x [5 x double]]* @main.Rot, i64 0, i64 2, i64 2)
%49 = load double, double* @main.Cx
%50 = load double, double* @main.Sy
%51 = fmul double %49, %50
%52 = load double, double* @main.Sz
%53 = load double, double* @main.Sx
%54 = load double, double* @main.Cz
%55 = fmul double %53, %54
%56 = fneg double %55
%57 = call double @llvm.fmuladd.f64(double %51, double %52, double %56)
store double %57, double* getelementptr inbounds ([5 x [5 x double]], [5 x [5 x double]]* @main.Rot, i64 0, i64 2, i64 3)
%58 = load double, double* @main.Sy
%59 = fneg double %58
store double %59, double* getelementptr inbounds ([5 x [5 x double]], [5 x [5 x double]]* @main.Rot, i64 0, i64 3, i64 1)
%60 = load double, double* @main.Sx
%61 = load double, double* @main.Cy
%62 = fmul double %60, %61
store double %62, double* getelementptr inbounds ([5 x [5 x double]], [5 x [5 x double]]* @main.Rot, i64 0, i64 3, i64 2)
%63 = load double, double* @main.Cx
%64 = load double, double* @main.Cy
%65 = fmul double %63, %64
store double %65, double* getelementptr inbounds ([5 x [5 x double]], [5 x [5 x double]]* @main.Rot, i64 0, i64 3, i64 3)
store i32 1, i32* @main.ct_AN
br label %66
66: ; preds = %195, %2
%67 = load i32, i32* @main.ct_AN
%68 = icmp sle i32 %67, 3
br i1 %68, label %69, label %198
69: ; preds = %66
%70 = load double, double* getelementptr inbounds ([5 x [5 x double]], [5 x [5 x double]]* @main.Rot, i64 0, i64 1, i64 1)
%71 = load i32, i32* @main.ct_AN
%72 = sext i32 %71 to i64
%73 = getelementptr inbounds [10 x [10 x double]], [10 x [10 x double]]* @main.Gxyz2, i64 0, i64 %72
%74 = getelementptr inbounds [10 x double], [10 x double]* %73, i64 0, i64 1
%75 = load double, double* %74
%76 = load double, double* getelementptr inbounds ([5 x [5 x double]], [5 x [5 x double]]* @main.Rot, i64 0, i64 1, i64 2)
%77 = load i32, i32* @main.ct_AN
%78 = sext i32 %77 to i64
%79 = getelementptr inbounds [10 x [10 x double]], [10 x [10 x double]]* @main.Gxyz2, i64 0, i64 %78
%80 = getelementptr inbounds [10 x double], [10 x double]* %79, i64 0, i64 2
%81 = load double, double* %80
%82 = fmul double %76, %81
%83 = call double @llvm.fmuladd.f64(double %70, double %75, double %82)
%84 = load double, double* getelementptr inbounds ([5 x [5 x double]], [5 x [5 x double]]* @main.Rot, i64 0, i64 1, i64 3)
%85 = load i32, i32* @main.ct_AN
%86 = sext i32 %85 to i64
%87 = getelementptr inbounds [10 x [10 x double]], [10 x [10 x double]]* @main.Gxyz2, i64 0, i64 %86
%88 = getelementptr inbounds [10 x double], [10 x double]* %87, i64 0, i64 3
%89 = load double, double* %88
%90 = call double @llvm.fmuladd.f64(double %84, double %89, double %83)
%91 = load i32, i32* @main.ct_AN
%92 = sext i32 %91 to i64
%93 = getelementptr inbounds [10 x [10 x double]], [10 x [10 x double]]* @main.xyz2, i64 0, i64 %92
%94 = getelementptr inbounds [10 x double], [10 x double]* %93, i64 0, i64 1
store double %90, double* %94
%95 = load double, double* getelementptr inbounds ([5 x [5 x double]], [5 x [5 x double]]* @main.Rot, i64 0, i64 2, i64 1)
%96 = load i32, i32* @main.ct_AN
%97 = sext i32 %96 to i64
%98 = getelementptr inbounds [10 x [10 x double]], [10 x [10 x double]]* @main.Gxyz2, i64 0, i64 %97
%99 = getelementptr inbounds [10 x double], [10 x double]* %98, i64 0, i64 1
%100 = load double, double* %99
%101 = load double, double* getelementptr inbounds ([5 x [5 x double]], [5 x [5 x double]]* @main.Rot, i64 0, i64 2, i64 2)
%102 = load i32, i32* @main.ct_AN
%103 = sext i32 %102 to i64
%104 = getelementptr inbounds [10 x [10 x double]], [10 x [10 x double]]* @main.Gxyz2, i64 0, i64 %103
%105 = getelementptr inbounds [10 x double], [10 x double]* %104, i64 0, i64 2
%106 = load double, double* %105
%107 = fmul double %101, %106
%108 = call double @llvm.fmuladd.f64(double %95, double %100, double %107)
%109 = load double, double* getelementptr inbounds ([5 x [5 x double]], [5 x [5 x double]]* @main.Rot, i64 0, i64 2, i64 3)
%110 = load i32, i32* @main.ct_AN
%111 = sext i32 %110 to i64
%112 = getelementptr inbounds [10 x [10 x double]], [10 x [10 x double]]* @main.Gxyz2, i64 0, i64 %111
%113 = getelementptr inbounds [10 x double], [10 x double]* %112, i64 0, i64 3
%114 = load double, double* %113
%115 = call double @llvm.fmuladd.f64(double %109, double %114, double %108)
%116 = load i32, i32* @main.ct_AN
%117 = sext i32 %116 to i64
%118 = getelementptr inbounds [10 x [10 x double]], [10 x [10 x double]]* @main.xyz2, i64 0, i64 %117
%119 = getelementptr inbounds [10 x double], [10 x double]* %118, i64 0, i64 2
store double %115, double* %119
%120 = load double, double* getelementptr inbounds ([5 x [5 x double]], [5 x [5 x double]]* @main.Rot, i64 0, i64 3, i64 1)
%121 = load i32, i32* @main.ct_AN
%122 = sext i32 %121 to i64
%123 = getelementptr inbounds [10 x [10 x double]], [10 x [10 x double]]* @main.Gxyz2, i64 0, i64 %122
%124 = getelementptr inbounds [10 x double], [10 x double]* %123, i64 0, i64 1
%125 = load double, double* %124
%126 = load double, double* getelementptr inbounds ([5 x [5 x double]], [5 x [5 x double]]* @main.Rot, i64 0, i64 3, i64 2)
%127 = load i32, i32* @main.ct_AN
%128 = sext i32 %127 to i64
%129 = getelementptr inbounds [10 x [10 x double]], [10 x [10 x double]]* @main.Gxyz2, i64 0, i64 %128
%130 = getelementptr inbounds [10 x double], [10 x double]* %129, i64 0, i64 2
%131 = load double, double* %130
%132 = fmul double %126, %131
%133 = call double @llvm.fmuladd.f64(double %120, double %125, double %132)
%134 = load double, double* getelementptr inbounds ([5 x [5 x double]], [5 x [5 x double]]* @main.Rot, i64 0, i64 3, i64 3)
%135 = load i32, i32* @main.ct_AN
%136 = sext i32 %135 to i64
%137 = getelementptr inbounds [10 x [10 x double]], [10 x [10 x double]]* @main.Gxyz2, i64 0, i64 %136
%138 = getelementptr inbounds [10 x double], [10 x double]* %137, i64 0, i64 3
%139 = load double, double* %138
%140 = call double @llvm.fmuladd.f64(double %134, double %139, double %133)
%141 = load i32, i32* @main.ct_AN
%142 = sext i32 %141 to i64
%143 = getelementptr inbounds [10 x [10 x double]], [10 x [10 x double]]* @main.xyz2, i64 0, i64 %142
%144 = getelementptr inbounds [10 x double], [10 x double]* %143, i64 0, i64 3
store double %140, double* %144
%145 = load i32, i32* @main.ct_AN
%146 = sext i32 %145 to i64
%147 = getelementptr inbounds [10 x [10 x double]], [10 x [10 x double]]* @main.xyz2, i64 0, i64 %146
%148 = getelementptr inbounds [10 x double], [10 x double]* %147, i64 0, i64 1
%149 = load double, double* %148
%150 = load i32, i32* @main.ct_AN
%151 = sext i32 %150 to i64
%152 = getelementptr inbounds [10 x [10 x double]], [10 x [10 x double]]* @main.xyz2, i64 0, i64 %151
%153 = getelementptr inbounds [10 x double], [10 x double]* %152, i64 0, i64 1
%154 = load double, double* %153
%155 = load i32, i32* @main.ct_AN
%156 = sext i32 %155 to i64
%157 = getelementptr inbounds [10 x [10 x double]], [10 x [10 x double]]* @main.xyz2, i64 0, i64 %156
%158 = getelementptr inbounds [10 x double], [10 x double]* %157, i64 0, i64 2
%159 = load double, double* %158
%160 = load i32, i32* @main.ct_AN
%161 = sext i32 %160 to i64
%162 = getelementptr inbounds [10 x [10 x double]], [10 x [10 x double]]* @main.xyz2, i64 0, i64 %161
%163 = getelementptr inbounds [10 x double], [10 x double]* %162, i64 0, i64 2
%164 = load double, double* %163
%165 = fmul double %159, %164
%166 = call double @llvm.fmuladd.f64(double %149, double %154, double %165)
%167 = load i32, i32* @main.ct_AN
%168 = sext i32 %167 to i64
%169 = getelementptr inbounds [10 x [10 x double]], [10 x [10 x double]]* @main.xyz2, i64 0, i64 %168
%170 = getelementptr inbounds [10 x double], [10 x double]* %169, i64 0, i64 3
%171 = load double, double* %170
%172 = load i32, i32* @main.ct_AN
%173 = sext i32 %172 to i64
%174 = getelementptr inbounds [10 x [10 x double]], [10 x [10 x double]]* @main.xyz2, i64 0, i64 %173
%175 = getelementptr inbounds [10 x double], [10 x double]* %174, i64 0, i64 3
%176 = load double, double* %175
%177 = call double @llvm.fmuladd.f64(double %171, double %176, double %166)
%178 = call double @sqrt(double %177)
store double %178, double* @main.r
%179 = load i32, i32* @main.ct_AN
%180 = sext i32 %179 to i64
%181 = getelementptr inbounds [10 x [10 x double]], [10 x [10 x double]]* @main.xyz2, i64 0, i64 %180
%182 = getelementptr inbounds [10 x double], [10 x double]* %181, i64 0, i64 1
%183 = load double, double* %182
%184 = load i32, i32* @main.ct_AN
%185 = sext i32 %184 to i64
%186 = getelementptr inbounds [10 x [10 x double]], [10 x [10 x double]]* @main.xyz2, i64 0, i64 %185
%187 = getelementptr inbounds [10 x double], [10 x double]* %186, i64 0, i64 2
%188 = load double, double* %187
%189 = load i32, i32* @main.ct_AN
%190 = sext i32 %189 to i64
%191 = getelementptr inbounds [10 x [10 x double]], [10 x [10 x double]]* @main.xyz2, i64 0, i64 %190
%192 = getelementptr inbounds [10 x double], [10 x double]* %191, i64 0, i64 3
%193 = load double, double* %192
%194 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str, i64 0, i64 0), double %183, double %188, double %193)
br label %195
195: ; preds = %69
%196 = load i32, i32* @main.ct_AN
%197 = add nsw i32 %196, 1
store i32 %197, i32* @main.ct_AN
br label %66
198: ; preds = %66
%199 = load i32, i32* %3
ret i32 %199
}

LLVM IR (-O2):
@main.ct_AN = internal unnamed_addr global i32 0
@main.Gxyz2 = internal unnamed_addr global [10 x [10 x double]] zeroinitializer
@main.Rot.0 = internal unnamed_addr global double 0.000000e+00
@main.Rot.1 = internal unnamed_addr global double 0.000000e+00
@main.Rot.2 = internal unnamed_addr global double 0.000000e+00
@main.Rot.3 = internal unnamed_addr global double 0.000000e+00
@main.Rot.4 = internal unnamed_addr global double 0.000000e+00
@main.Rot.5 = internal unnamed_addr global double 0.000000e+00
@main.Rot.6 = internal unnamed_addr global double 0.000000e+00
@main.Rot.7 = internal unnamed_addr global double 0.000000e+00
@main.Rot.8 = internal unnamed_addr global double 0.000000e+00
@.str = [26 x i8] c" %15.12f %15.12f %15.12f\0A\00"
define i32 @main(i32 %0, i8** nocapture readnone %1) {
store <2 x double> <double 7.600000e-01, double 5.900000e-01>, <2 x double>* bitcast (double* getelementptr inbounds ([10 x [10 x double]], [10 x [10 x double]]* @main.Gxyz2, i64 0, i64 2, i64 1) to <2 x double>*)
store double 0.000000e+00, double* getelementptr inbounds ([10 x [10 x double]], [10 x [10 x double]]* @main.Gxyz2, i64 0, i64 2, i64 3)
store <2 x double> <double -7.600000e-01, double 5.900000e-01>, <2 x double>* bitcast (double* getelementptr inbounds ([10 x [10 x double]], [10 x [10 x double]]* @main.Gxyz2, i64 0, i64 3, i64 1) to <2 x double>*)
store double 0.000000e+00, double* getelementptr inbounds ([10 x [10 x double]], [10 x [10 x double]]* @main.Gxyz2, i64 0, i64 3, i64 3)
store double 0x3FDF838B8C811C18, double* @main.Rot.0
store double 0xBFDD3CA316879084, double* @main.Rot.1
store double 0x3FE7B4FC7F960A69, double* @main.Rot.2
store double 0x3FE2C7434FC16E71, double* @main.Rot.3
store double 0x3FE9B121540ACC05, double* @main.Rot.4
store double 0x3FBAE3EE8152A239, double* @main.Rot.5
store double 0xBFE491B7523C161C, double* @main.Rot.6
store double 0x3FD8836FA2CF5038, double* @main.Rot.7
store double 0x3FE53AAFE3631109, double* @main.Rot.8
store i32 1, i32* @main.ct_AN
br label %3
3: ; preds = %29, %2
%4 = phi double [ 0x3FE53AAFE3631109, %2 ], [ %45, %29 ]
%5 = phi double [ 0x3FD8836FA2CF5038, %2 ], [ %44, %29 ]
%6 = phi double [ 0xBFE491B7523C161C, %2 ], [ %43, %29 ]
%7 = phi double [ 0x3FBAE3EE8152A239, %2 ], [ %42, %29 ]
%8 = phi double [ 0x3FE9B121540ACC05, %2 ], [ %41, %29 ]
%9 = phi double [ 0x3FE2C7434FC16E71, %2 ], [ %40, %29 ]
%10 = phi double [ 0.000000e+00, %2 ], [ %39, %29 ]
%11 = phi double [ 0x3FE7B4FC7F960A69, %2 ], [ %37, %29 ]
%12 = phi double [ 0.000000e+00, %2 ], [ %36, %29 ]
%13 = phi double [ 0xBFDD3CA316879084, %2 ], [ %34, %29 ]
%14 = phi double [ 0.000000e+00, %2 ], [ %33, %29 ]
%15 = phi double [ 0x3FDF838B8C811C18, %2 ], [ %30, %29 ]
%16 = fmul double %13, %12
%17 = tail call double @llvm.fmuladd.f64(double %15, double %14, double %16)
%18 = tail call double @llvm.fmuladd.f64(double %11, double %10, double %17)
%19 = fmul double %12, %8
%20 = tail call double @llvm.fmuladd.f64(double %9, double %14, double %19)
%21 = tail call double @llvm.fmuladd.f64(double %7, double %10, double %20)
%22 = fmul double %12, %5
%23 = tail call double @llvm.fmuladd.f64(double %6, double %14, double %22)
%24 = tail call double @llvm.fmuladd.f64(double %4, double %10, double %23)
%25 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([26 x i8], [26 x i8]* @.str, i64 0, i64 0), double %18, double %21, double %24)
%26 = load i32, i32* @main.ct_AN
%27 = add nsw i32 %26, 1
store i32 %27, i32* @main.ct_AN
%28 = icmp slt i32 %26, 3
br i1 %28, label %29, label %46
29: ; preds = %3
%30 = load double, double* @main.Rot.0
%31 = sext i32 %27 to i64
%32 = getelementptr inbounds [10 x [10 x double]], [10 x [10 x double]]* @main.Gxyz2, i64 0, i64 %31, i64 1
%33 = load double, double* %32
%34 = load double, double* @main.Rot.1
%35 = getelementptr inbounds [10 x [10 x double]], [10 x [10 x double]]* @main.Gxyz2, i64 0, i64 %31, i64 2
%36 = load double, double* %35
%37 = load double, double* @main.Rot.2
%38 = getelementptr inbounds [10 x [10 x double]], [10 x [10 x double]]* @main.Gxyz2, i64 0, i64 %31, i64 3
%39 = load double, double* %38
%40 = load double, double* @main.Rot.3
%41 = load double, double* @main.Rot.4
%42 = load double, double* @main.Rot.5
%43 = load double, double* @main.Rot.6
%44 = load double, double* @main.Rot.7
%45 = load double, double* @main.Rot.8
br label %3
46: ; preds = %3
ret i32 0
}