double glmDeterminant4d(const double m[16]) {
  return m[12] * m[9] * m[6] * m[3] - m[8] * m[13] * m[6] * m[3] -
         m[12] * m[5] * m[10] * m[3] + m[4] * m[13] * m[10] * m[3] +
         m[8] * m[5] * m[14] * m[3] - m[4] * m[9] * m[14] * m[3] -
         m[12] * m[9] * m[2] * m[7] + m[8] * m[13] * m[2] * m[7] +
         m[12] * m[1] * m[10] * m[7] - m[0] * m[13] * m[10] * m[7] -
         m[8] * m[1] * m[14] * m[7] + m[0] * m[9] * m[14] * m[7] +
         m[12] * m[5] * m[2] * m[11] - m[4] * m[13] * m[2] * m[11] -
         m[12] * m[1] * m[6] * m[11] + m[0] * m[13] * m[6] * m[11] +
         m[4] * m[1] * m[14] * m[11] - m[0] * m[5] * m[14] * m[11] -
         m[8] * m[5] * m[2] * m[15] + m[4] * m[9] * m[2] * m[15] +
         m[8] * m[1] * m[6] * m[15] - m[0] * m[9] * m[6] * m[15] -
         m[4] * m[1] * m[10] * m[15] + m[0] * m[5] * m[10] * m[15];
}


x86 assembly (clang, -O0):
<glmDeterminant4d>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x60(%rax),%xmm0
mov    -0x8(%rbp),%rax
mulsd  0x48(%rax),%xmm0
mov    -0x8(%rbp),%rax
mulsd  0x30(%rax),%xmm0
mov    -0x8(%rbp),%rax
movsd  0x18(%rax),%xmm2
mov    -0x8(%rbp),%rax
movsd  0x40(%rax),%xmm1
mov    -0x8(%rbp),%rax
mulsd  0x68(%rax),%xmm1
mov    -0x8(%rbp),%rax
mulsd  0x30(%rax),%xmm1
mov    -0x8(%rbp),%rax
mulsd  0x18(%rax),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  0x60(%rax),%xmm1
mov    -0x8(%rbp),%rax
mulsd  0x28(%rax),%xmm1
mov    -0x8(%rbp),%rax
mulsd  0x50(%rax),%xmm1
mov    -0x8(%rbp),%rax
movsd  0x18(%rax),%xmm2
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  0x20(%rax),%xmm0
mov    -0x8(%rbp),%rax
mulsd  0x68(%rax),%xmm0
mov    -0x8(%rbp),%rax
mulsd  0x50(%rax),%xmm0
mov    -0x8(%rbp),%rax
movsd  0x18(%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  0x40(%rax),%xmm1
mov    -0x8(%rbp),%rax
mulsd  0x28(%rax),%xmm1
mov    -0x8(%rbp),%rax
mulsd  0x70(%rax),%xmm1
mov    -0x8(%rbp),%rax
movsd  0x18(%rax),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  0x20(%rax),%xmm0
mov    -0x8(%rbp),%rax
mulsd  0x48(%rax),%xmm0
mov    -0x8(%rbp),%rax
mulsd  0x70(%rax),%xmm0
mov    -0x8(%rbp),%rax
movsd  0x18(%rax),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  0x60(%rax),%xmm1
mov    -0x8(%rbp),%rax
mulsd  0x48(%rax),%xmm1
mov    -0x8(%rbp),%rax
mulsd  0x10(%rax),%xmm1
mov    -0x8(%rbp),%rax
movsd  0x38(%rax),%xmm2
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  0x40(%rax),%xmm0
mov    -0x8(%rbp),%rax
mulsd  0x68(%rax),%xmm0
mov    -0x8(%rbp),%rax
mulsd  0x10(%rax),%xmm0
mov    -0x8(%rbp),%rax
movsd  0x38(%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  0x60(%rax),%xmm1
mov    -0x8(%rbp),%rax
mulsd  0x8(%rax),%xmm1
mov    -0x8(%rbp),%rax
mulsd  0x50(%rax),%xmm1
mov    -0x8(%rbp),%rax
movsd  0x38(%rax),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x8(%rbp),%rax
mulsd  0x68(%rax),%xmm0
mov    -0x8(%rbp),%rax
mulsd  0x50(%rax),%xmm0
mov    -0x8(%rbp),%rax
movsd  0x38(%rax),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  0x40(%rax),%xmm1
mov    -0x8(%rbp),%rax
mulsd  0x8(%rax),%xmm1
mov    -0x8(%rbp),%rax
mulsd  0x70(%rax),%xmm1
mov    -0x8(%rbp),%rax
movsd  0x38(%rax),%xmm2
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x8(%rbp),%rax
mulsd  0x48(%rax),%xmm0
mov    -0x8(%rbp),%rax
mulsd  0x70(%rax),%xmm0
mov    -0x8(%rbp),%rax
movsd  0x38(%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  0x60(%rax),%xmm1
mov    -0x8(%rbp),%rax
mulsd  0x28(%rax),%xmm1
mov    -0x8(%rbp),%rax
mulsd  0x10(%rax),%xmm1
mov    -0x8(%rbp),%rax
movsd  0x58(%rax),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  0x20(%rax),%xmm0
mov    -0x8(%rbp),%rax
mulsd  0x68(%rax),%xmm0
mov    -0x8(%rbp),%rax
mulsd  0x10(%rax),%xmm0
mov    -0x8(%rbp),%rax
movsd  0x58(%rax),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  0x60(%rax),%xmm1
mov    -0x8(%rbp),%rax
mulsd  0x8(%rax),%xmm1
mov    -0x8(%rbp),%rax
mulsd  0x30(%rax),%xmm1
mov    -0x8(%rbp),%rax
movsd  0x58(%rax),%xmm2
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x8(%rbp),%rax
mulsd  0x68(%rax),%xmm0
mov    -0x8(%rbp),%rax
mulsd  0x30(%rax),%xmm0
mov    -0x8(%rbp),%rax
movsd  0x58(%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  0x20(%rax),%xmm1
mov    -0x8(%rbp),%rax
mulsd  0x8(%rax),%xmm1
mov    -0x8(%rbp),%rax
mulsd  0x70(%rax),%xmm1
mov    -0x8(%rbp),%rax
movsd  0x58(%rax),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x8(%rbp),%rax
mulsd  0x28(%rax),%xmm0
mov    -0x8(%rbp),%rax
mulsd  0x70(%rax),%xmm0
mov    -0x8(%rbp),%rax
movsd  0x58(%rax),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  0x40(%rax),%xmm1
mov    -0x8(%rbp),%rax
mulsd  0x28(%rax),%xmm1
mov    -0x8(%rbp),%rax
mulsd  0x10(%rax),%xmm1
mov    -0x8(%rbp),%rax
movsd  0x78(%rax),%xmm2
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  0x20(%rax),%xmm0
mov    -0x8(%rbp),%rax
mulsd  0x48(%rax),%xmm0
mov    -0x8(%rbp),%rax
mulsd  0x10(%rax),%xmm0
mov    -0x8(%rbp),%rax
movsd  0x78(%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  0x40(%rax),%xmm1
mov    -0x8(%rbp),%rax
mulsd  0x8(%rax),%xmm1
mov    -0x8(%rbp),%rax
mulsd  0x30(%rax),%xmm1
mov    -0x8(%rbp),%rax
movsd  0x78(%rax),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x8(%rbp),%rax
mulsd  0x48(%rax),%xmm0
mov    -0x8(%rbp),%rax
mulsd  0x30(%rax),%xmm0
mov    -0x8(%rbp),%rax
movsd  0x78(%rax),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  0x20(%rax),%xmm1
mov    -0x8(%rbp),%rax
mulsd  0x8(%rax),%xmm1
mov    -0x8(%rbp),%rax
mulsd  0x50(%rax),%xmm1
mov    -0x8(%rbp),%rax
movsd  0x78(%rax),%xmm2
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x8(%rbp),%rax
mulsd  0x28(%rax),%xmm0
mov    -0x8(%rbp),%rax
mulsd  0x50(%rax),%xmm0
mov    -0x8(%rbp),%rax
movsd  0x78(%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<glmDeterminant4d>:
movsd  0x60(%rdi),%xmm1
movsd  0x48(%rdi),%xmm0
movapd %xmm1,%xmm2
movapd %xmm1,%xmm3
mulsd  %xmm0,%xmm2
movsd  %xmm2,-0x8(%rsp)
movapd %xmm0,%xmm1
movsd  0x30(%rdi),%xmm0
mulsd  %xmm0,%xmm2
movsd  0x40(%rdi),%xmm11
movsd  0x68(%rdi),%xmm13
movapd %xmm11,%xmm15
mulsd  %xmm13,%xmm15
movsd  %xmm15,-0x38(%rsp)
movapd %xmm3,%xmm14
movsd  0x50(%rdi),%xmm6
movsd  %xmm13,-0x20(%rsp)
movsd  %xmm11,-0x40(%rsp)
movsd  (%rdi),%xmm5
movsd  0x8(%rdi),%xmm4
mulsd  %xmm4,%xmm3
movapd %xmm6,%xmm8
mulsd  %xmm3,%xmm8
mulsd  %xmm5,%xmm13
movapd %xmm6,%xmm7
mulsd  %xmm13,%xmm7
movsd  %xmm7,-0x10(%rsp)
mulsd  %xmm4,%xmm11
movsd  0x70(%rdi),%xmm10
movapd %xmm10,%xmm7
mulsd  %xmm11,%xmm7
movsd  %xmm7,-0x18(%rsp)
movapd %xmm1,%xmm9
mulsd  %xmm5,%xmm1
movapd %xmm10,%xmm12
mulsd  %xmm1,%xmm12
mulsd  %xmm0,%xmm3
movsd  %xmm3,-0x28(%rsp)
mulsd  %xmm0,%xmm13
mulsd  %xmm0,%xmm11
mulsd  %xmm0,%xmm1
movsd  %xmm1,-0x30(%rsp)
mulsd  %xmm15,%xmm0
movsd  0x18(%rdi),%xmm3
mulsd  %xmm3,%xmm0
movapd %xmm2,%xmm7
mulsd  %xmm3,%xmm7
subsd  %xmm0,%xmm7
movsd  0x28(%rdi),%xmm2
mulsd  %xmm2,%xmm14
movapd %xmm6,%xmm0
movapd %xmm6,%xmm1
mulsd  %xmm14,%xmm1
mulsd  %xmm3,%xmm1
subsd  %xmm1,%xmm7
movsd  0x20(%rdi),%xmm1
movsd  -0x20(%rsp),%xmm6
mulsd  %xmm1,%xmm6
mulsd  %xmm1,%xmm9
mulsd  %xmm4,%xmm1
movsd  -0x40(%rsp),%xmm15
mulsd  %xmm2,%xmm15
movsd  %xmm15,-0x40(%rsp)
mulsd  %xmm5,%xmm2
movapd %xmm10,%xmm5
mulsd  %xmm1,%xmm5
mulsd  %xmm0,%xmm1
mulsd  %xmm10,%xmm15
movapd %xmm10,%xmm4
mulsd  %xmm2,%xmm10
mulsd  %xmm0,%xmm2
mulsd  %xmm6,%xmm0
mulsd  %xmm3,%xmm0
addsd  %xmm7,%xmm0
mulsd  %xmm3,%xmm15
addsd  %xmm0,%xmm15
mulsd  %xmm9,%xmm4
mulsd  %xmm3,%xmm4
subsd  %xmm4,%xmm15
movsd  0x10(%rdi),%xmm0
movsd  -0x8(%rsp),%xmm4
mulsd  %xmm0,%xmm4
movsd  0x38(%rdi),%xmm3
mulsd  %xmm3,%xmm4
subsd  %xmm4,%xmm15
movsd  -0x38(%rsp),%xmm4
mulsd  %xmm0,%xmm4
mulsd  %xmm3,%xmm4
addsd  %xmm15,%xmm4
mulsd  %xmm3,%xmm8
addsd  %xmm4,%xmm8
movsd  -0x10(%rsp),%xmm4
mulsd  %xmm3,%xmm4
subsd  %xmm4,%xmm8
movsd  -0x18(%rsp),%xmm4
mulsd  %xmm3,%xmm4
subsd  %xmm4,%xmm8
mulsd  %xmm3,%xmm12
addsd  %xmm8,%xmm12
mulsd  %xmm0,%xmm14
movsd  0x58(%rdi),%xmm3
mulsd  %xmm3,%xmm14
addsd  %xmm12,%xmm14
mulsd  %xmm0,%xmm6
mulsd  %xmm3,%xmm6
subsd  %xmm6,%xmm14
movsd  -0x28(%rsp),%xmm4
mulsd  %xmm3,%xmm4
subsd  %xmm4,%xmm14
mulsd  %xmm3,%xmm13
addsd  %xmm14,%xmm13
mulsd  %xmm3,%xmm5
addsd  %xmm13,%xmm5
mulsd  %xmm3,%xmm10
subsd  %xmm10,%xmm5
movsd  0x78(%rdi),%xmm3
movsd  -0x40(%rsp),%xmm4
mulsd  %xmm0,%xmm4
mulsd  %xmm3,%xmm4
subsd  %xmm4,%xmm5
mulsd  %xmm0,%xmm9
mulsd  %xmm3,%xmm9
addsd  %xmm5,%xmm9
mulsd  %xmm3,%xmm11
addsd  %xmm9,%xmm11
movsd  -0x30(%rsp),%xmm0
mulsd  %xmm3,%xmm0
subsd  %xmm0,%xmm11
mulsd  %xmm3,%xmm1
subsd  %xmm1,%xmm11
mulsd  %xmm3,%xmm2
addsd  %xmm11,%xmm2
movapd %xmm2,%xmm0
ret

LLVM IR (-O0):
define double @glmDeterminant4d(double* %0) {
%2 = alloca double*
store double* %0, double** %2
%3 = load double*, double** %2
%4 = getelementptr inbounds double, double* %3, i64 12
%5 = load double, double* %4
%6 = load double*, double** %2
%7 = getelementptr inbounds double, double* %6, i64 9
%8 = load double, double* %7
%9 = fmul double %5, %8
%10 = load double*, double** %2
%11 = getelementptr inbounds double, double* %10, i64 6
%12 = load double, double* %11
%13 = fmul double %9, %12
%14 = load double*, double** %2
%15 = getelementptr inbounds double, double* %14, i64 3
%16 = load double, double* %15
%17 = load double*, double** %2
%18 = getelementptr inbounds double, double* %17, i64 8
%19 = load double, double* %18
%20 = load double*, double** %2
%21 = getelementptr inbounds double, double* %20, i64 13
%22 = load double, double* %21
%23 = fmul double %19, %22
%24 = load double*, double** %2
%25 = getelementptr inbounds double, double* %24, i64 6
%26 = load double, double* %25
%27 = fmul double %23, %26
%28 = load double*, double** %2
%29 = getelementptr inbounds double, double* %28, i64 3
%30 = load double, double* %29
%31 = fmul double %27, %30
%32 = fneg double %31
%33 = call double @llvm.fmuladd.f64(double %13, double %16, double %32)
%34 = load double*, double** %2
%35 = getelementptr inbounds double, double* %34, i64 12
%36 = load double, double* %35
%37 = load double*, double** %2
%38 = getelementptr inbounds double, double* %37, i64 5
%39 = load double, double* %38
%40 = fmul double %36, %39
%41 = load double*, double** %2
%42 = getelementptr inbounds double, double* %41, i64 10
%43 = load double, double* %42
%44 = fmul double %40, %43
%45 = load double*, double** %2
%46 = getelementptr inbounds double, double* %45, i64 3
%47 = load double, double* %46
%48 = fneg double %44
%49 = call double @llvm.fmuladd.f64(double %48, double %47, double %33)
%50 = load double*, double** %2
%51 = getelementptr inbounds double, double* %50, i64 4
%52 = load double, double* %51
%53 = load double*, double** %2
%54 = getelementptr inbounds double, double* %53, i64 13
%55 = load double, double* %54
%56 = fmul double %52, %55
%57 = load double*, double** %2
%58 = getelementptr inbounds double, double* %57, i64 10
%59 = load double, double* %58
%60 = fmul double %56, %59
%61 = load double*, double** %2
%62 = getelementptr inbounds double, double* %61, i64 3
%63 = load double, double* %62
%64 = call double @llvm.fmuladd.f64(double %60, double %63, double %49)
%65 = load double*, double** %2
%66 = getelementptr inbounds double, double* %65, i64 8
%67 = load double, double* %66
%68 = load double*, double** %2
%69 = getelementptr inbounds double, double* %68, i64 5
%70 = load double, double* %69
%71 = fmul double %67, %70
%72 = load double*, double** %2
%73 = getelementptr inbounds double, double* %72, i64 14
%74 = load double, double* %73
%75 = fmul double %71, %74
%76 = load double*, double** %2
%77 = getelementptr inbounds double, double* %76, i64 3
%78 = load double, double* %77
%79 = call double @llvm.fmuladd.f64(double %75, double %78, double %64)
%80 = load double*, double** %2
%81 = getelementptr inbounds double, double* %80, i64 4
%82 = load double, double* %81
%83 = load double*, double** %2
%84 = getelementptr inbounds double, double* %83, i64 9
%85 = load double, double* %84
%86 = fmul double %82, %85
%87 = load double*, double** %2
%88 = getelementptr inbounds double, double* %87, i64 14
%89 = load double, double* %88
%90 = fmul double %86, %89
%91 = load double*, double** %2
%92 = getelementptr inbounds double, double* %91, i64 3
%93 = load double, double* %92
%94 = fneg double %90
%95 = call double @llvm.fmuladd.f64(double %94, double %93, double %79)
%96 = load double*, double** %2
%97 = getelementptr inbounds double, double* %96, i64 12
%98 = load double, double* %97
%99 = load double*, double** %2
%100 = getelementptr inbounds double, double* %99, i64 9
%101 = load double, double* %100
%102 = fmul double %98, %101
%103 = load double*, double** %2
%104 = getelementptr inbounds double, double* %103, i64 2
%105 = load double, double* %104
%106 = fmul double %102, %105
%107 = load double*, double** %2
%108 = getelementptr inbounds double, double* %107, i64 7
%109 = load double, double* %108
%110 = fneg double %106
%111 = call double @llvm.fmuladd.f64(double %110, double %109, double %95)
%112 = load double*, double** %2
%113 = getelementptr inbounds double, double* %112, i64 8
%114 = load double, double* %113
%115 = load double*, double** %2
%116 = getelementptr inbounds double, double* %115, i64 13
%117 = load double, double* %116
%118 = fmul double %114, %117
%119 = load double*, double** %2
%120 = getelementptr inbounds double, double* %119, i64 2
%121 = load double, double* %120
%122 = fmul double %118, %121
%123 = load double*, double** %2
%124 = getelementptr inbounds double, double* %123, i64 7
%125 = load double, double* %124
%126 = call double @llvm.fmuladd.f64(double %122, double %125, double %111)
%127 = load double*, double** %2
%128 = getelementptr inbounds double, double* %127, i64 12
%129 = load double, double* %128
%130 = load double*, double** %2
%131 = getelementptr inbounds double, double* %130, i64 1
%132 = load double, double* %131
%133 = fmul double %129, %132
%134 = load double*, double** %2
%135 = getelementptr inbounds double, double* %134, i64 10
%136 = load double, double* %135
%137 = fmul double %133, %136
%138 = load double*, double** %2
%139 = getelementptr inbounds double, double* %138, i64 7
%140 = load double, double* %139
%141 = call double @llvm.fmuladd.f64(double %137, double %140, double %126)
%142 = load double*, double** %2
%143 = getelementptr inbounds double, double* %142, i64 0
%144 = load double, double* %143
%145 = load double*, double** %2
%146 = getelementptr inbounds double, double* %145, i64 13
%147 = load double, double* %146
%148 = fmul double %144, %147
%149 = load double*, double** %2
%150 = getelementptr inbounds double, double* %149, i64 10
%151 = load double, double* %150
%152 = fmul double %148, %151
%153 = load double*, double** %2
%154 = getelementptr inbounds double, double* %153, i64 7
%155 = load double, double* %154
%156 = fneg double %152
%157 = call double @llvm.fmuladd.f64(double %156, double %155, double %141)
%158 = load double*, double** %2
%159 = getelementptr inbounds double, double* %158, i64 8
%160 = load double, double* %159
%161 = load double*, double** %2
%162 = getelementptr inbounds double, double* %161, i64 1
%163 = load double, double* %162
%164 = fmul double %160, %163
%165 = load double*, double** %2
%166 = getelementptr inbounds double, double* %165, i64 14
%167 = load double, double* %166
%168 = fmul double %164, %167
%169 = load double*, double** %2
%170 = getelementptr inbounds double, double* %169, i64 7
%171 = load double, double* %170
%172 = fneg double %168
%173 = call double @llvm.fmuladd.f64(double %172, double %171, double %157)
%174 = load double*, double** %2
%175 = getelementptr inbounds double, double* %174, i64 0
%176 = load double, double* %175
%177 = load double*, double** %2
%178 = getelementptr inbounds double, double* %177, i64 9
%179 = load double, double* %178
%180 = fmul double %176, %179
%181 = load double*, double** %2
%182 = getelementptr inbounds double, double* %181, i64 14
%183 = load double, double* %182
%184 = fmul double %180, %183
%185 = load double*, double** %2
%186 = getelementptr inbounds double, double* %185, i64 7
%187 = load double, double* %186
%188 = call double @llvm.fmuladd.f64(double %184, double %187, double %173)
%189 = load double*, double** %2
%190 = getelementptr inbounds double, double* %189, i64 12
%191 = load double, double* %190
%192 = load double*, double** %2
%193 = getelementptr inbounds double, double* %192, i64 5
%194 = load double, double* %193
%195 = fmul double %191, %194
%196 = load double*, double** %2
%197 = getelementptr inbounds double, double* %196, i64 2
%198 = load double, double* %197
%199 = fmul double %195, %198
%200 = load double*, double** %2
%201 = getelementptr inbounds double, double* %200, i64 11
%202 = load double, double* %201
%203 = call double @llvm.fmuladd.f64(double %199, double %202, double %188)
%204 = load double*, double** %2
%205 = getelementptr inbounds double, double* %204, i64 4
%206 = load double, double* %205
%207 = load double*, double** %2
%208 = getelementptr inbounds double, double* %207, i64 13
%209 = load double, double* %208
%210 = fmul double %206, %209
%211 = load double*, double** %2
%212 = getelementptr inbounds double, double* %211, i64 2
%213 = load double, double* %212
%214 = fmul double %210, %213
%215 = load double*, double** %2
%216 = getelementptr inbounds double, double* %215, i64 11
%217 = load double, double* %216
%218 = fneg double %214
%219 = call double @llvm.fmuladd.f64(double %218, double %217, double %203)
%220 = load double*, double** %2
%221 = getelementptr inbounds double, double* %220, i64 12
%222 = load double, double* %221
%223 = load double*, double** %2
%224 = getelementptr inbounds double, double* %223, i64 1
%225 = load double, double* %224
%226 = fmul double %222, %225
%227 = load double*, double** %2
%228 = getelementptr inbounds double, double* %227, i64 6
%229 = load double, double* %228
%230 = fmul double %226, %229
%231 = load double*, double** %2
%232 = getelementptr inbounds double, double* %231, i64 11
%233 = load double, double* %232
%234 = fneg double %230
%235 = call double @llvm.fmuladd.f64(double %234, double %233, double %219)
%236 = load double*, double** %2
%237 = getelementptr inbounds double, double* %236, i64 0
%238 = load double, double* %237
%239 = load double*, double** %2
%240 = getelementptr inbounds double, double* %239, i64 13
%241 = load double, double* %240
%242 = fmul double %238, %241
%243 = load double*, double** %2
%244 = getelementptr inbounds double, double* %243, i64 6
%245 = load double, double* %244
%246 = fmul double %242, %245
%247 = load double*, double** %2
%248 = getelementptr inbounds double, double* %247, i64 11
%249 = load double, double* %248
%250 = call double @llvm.fmuladd.f64(double %246, double %249, double %235)
%251 = load double*, double** %2
%252 = getelementptr inbounds double, double* %251, i64 4
%253 = load double, double* %252
%254 = load double*, double** %2
%255 = getelementptr inbounds double, double* %254, i64 1
%256 = load double, double* %255
%257 = fmul double %253, %256
%258 = load double*, double** %2
%259 = getelementptr inbounds double, double* %258, i64 14
%260 = load double, double* %259
%261 = fmul double %257, %260
%262 = load double*, double** %2
%263 = getelementptr inbounds double, double* %262, i64 11
%264 = load double, double* %263
%265 = call double @llvm.fmuladd.f64(double %261, double %264, double %250)
%266 = load double*, double** %2
%267 = getelementptr inbounds double, double* %266, i64 0
%268 = load double, double* %267
%269 = load double*, double** %2
%270 = getelementptr inbounds double, double* %269, i64 5
%271 = load double, double* %270
%272 = fmul double %268, %271
%273 = load double*, double** %2
%274 = getelementptr inbounds double, double* %273, i64 14
%275 = load double, double* %274
%276 = fmul double %272, %275
%277 = load double*, double** %2
%278 = getelementptr inbounds double, double* %277, i64 11
%279 = load double, double* %278
%280 = fneg double %276
%281 = call double @llvm.fmuladd.f64(double %280, double %279, double %265)
%282 = load double*, double** %2
%283 = getelementptr inbounds double, double* %282, i64 8
%284 = load double, double* %283
%285 = load double*, double** %2
%286 = getelementptr inbounds double, double* %285, i64 5
%287 = load double, double* %286
%288 = fmul double %284, %287
%289 = load double*, double** %2
%290 = getelementptr inbounds double, double* %289, i64 2
%291 = load double, double* %290
%292 = fmul double %288, %291
%293 = load double*, double** %2
%294 = getelementptr inbounds double, double* %293, i64 15
%295 = load double, double* %294
%296 = fneg double %292
%297 = call double @llvm.fmuladd.f64(double %296, double %295, double %281)
%298 = load double*, double** %2
%299 = getelementptr inbounds double, double* %298, i64 4
%300 = load double, double* %299
%301 = load double*, double** %2
%302 = getelementptr inbounds double, double* %301, i64 9
%303 = load double, double* %302
%304 = fmul double %300, %303
%305 = load double*, double** %2
%306 = getelementptr inbounds double, double* %305, i64 2
%307 = load double, double* %306
%308 = fmul double %304, %307
%309 = load double*, double** %2
%310 = getelementptr inbounds double, double* %309, i64 15
%311 = load double, double* %310
%312 = call double @llvm.fmuladd.f64(double %308, double %311, double %297)
%313 = load double*, double** %2
%314 = getelementptr inbounds double, double* %313, i64 8
%315 = load double, double* %314
%316 = load double*, double** %2
%317 = getelementptr inbounds double, double* %316, i64 1
%318 = load double, double* %317
%319 = fmul double %315, %318
%320 = load double*, double** %2
%321 = getelementptr inbounds double, double* %320, i64 6
%322 = load double, double* %321
%323 = fmul double %319, %322
%324 = load double*, double** %2
%325 = getelementptr inbounds double, double* %324, i64 15
%326 = load double, double* %325
%327 = call double @llvm.fmuladd.f64(double %323, double %326, double %312)
%328 = load double*, double** %2
%329 = getelementptr inbounds double, double* %328, i64 0
%330 = load double, double* %329
%331 = load double*, double** %2
%332 = getelementptr inbounds double, double* %331, i64 9
%333 = load double, double* %332
%334 = fmul double %330, %333
%335 = load double*, double** %2
%336 = getelementptr inbounds double, double* %335, i64 6
%337 = load double, double* %336
%338 = fmul double %334, %337
%339 = load double*, double** %2
%340 = getelementptr inbounds double, double* %339, i64 15
%341 = load double, double* %340
%342 = fneg double %338
%343 = call double @llvm.fmuladd.f64(double %342, double %341, double %327)
%344 = load double*, double** %2
%345 = getelementptr inbounds double, double* %344, i64 4
%346 = load double, double* %345
%347 = load double*, double** %2
%348 = getelementptr inbounds double, double* %347, i64 1
%349 = load double, double* %348
%350 = fmul double %346, %349
%351 = load double*, double** %2
%352 = getelementptr inbounds double, double* %351, i64 10
%353 = load double, double* %352
%354 = fmul double %350, %353
%355 = load double*, double** %2
%356 = getelementptr inbounds double, double* %355, i64 15
%357 = load double, double* %356
%358 = fneg double %354
%359 = call double @llvm.fmuladd.f64(double %358, double %357, double %343)
%360 = load double*, double** %2
%361 = getelementptr inbounds double, double* %360, i64 0
%362 = load double, double* %361
%363 = load double*, double** %2
%364 = getelementptr inbounds double, double* %363, i64 5
%365 = load double, double* %364
%366 = fmul double %362, %365
%367 = load double*, double** %2
%368 = getelementptr inbounds double, double* %367, i64 10
%369 = load double, double* %368
%370 = fmul double %366, %369
%371 = load double*, double** %2
%372 = getelementptr inbounds double, double* %371, i64 15
%373 = load double, double* %372
%374 = call double @llvm.fmuladd.f64(double %370, double %373, double %359)
ret double %374
}

LLVM IR (-O2):
define double @glmDeterminant4d(double* nocapture %0) {
%2 = getelementptr inbounds double, double* %0, i64 12
%3 = load double, double* %2
%4 = getelementptr inbounds double, double* %0, i64 9
%5 = load double, double* %4
%6 = fmul double %3, %5
%7 = getelementptr inbounds double, double* %0, i64 6
%8 = load double, double* %7
%9 = fmul double %6, %8
%10 = getelementptr inbounds double, double* %0, i64 3
%11 = load double, double* %10
%12 = getelementptr inbounds double, double* %0, i64 8
%13 = load double, double* %12
%14 = getelementptr inbounds double, double* %0, i64 13
%15 = load double, double* %14
%16 = fmul double %13, %15
%17 = fneg double %16
%18 = fmul double %8, %17
%19 = fmul double %11, %18
%20 = tail call double @llvm.fmuladd.f64(double %9, double %11, double %19)
%21 = getelementptr inbounds double, double* %0, i64 5
%22 = load double, double* %21
%23 = fmul double %3, %22
%24 = getelementptr inbounds double, double* %0, i64 10
%25 = load double, double* %24
%26 = fneg double %23
%27 = fmul double %25, %26
%28 = tail call double @llvm.fmuladd.f64(double %27, double %11, double %20)
%29 = getelementptr inbounds double, double* %0, i64 4
%30 = load double, double* %29
%31 = fmul double %15, %30
%32 = fmul double %25, %31
%33 = tail call double @llvm.fmuladd.f64(double %32, double %11, double %28)
%34 = fmul double %13, %22
%35 = getelementptr inbounds double, double* %0, i64 14
%36 = load double, double* %35
%37 = fmul double %34, %36
%38 = tail call double @llvm.fmuladd.f64(double %37, double %11, double %33)
%39 = fmul double %5, %30
%40 = fneg double %39
%41 = fmul double %36, %40
%42 = tail call double @llvm.fmuladd.f64(double %41, double %11, double %38)
%43 = getelementptr inbounds double, double* %0, i64 2
%44 = load double, double* %43
%45 = getelementptr inbounds double, double* %0, i64 7
%46 = load double, double* %45
%47 = fneg double %6
%48 = fmul double %44, %47
%49 = tail call double @llvm.fmuladd.f64(double %48, double %46, double %42)
%50 = fmul double %16, %44
%51 = tail call double @llvm.fmuladd.f64(double %50, double %46, double %49)
%52 = getelementptr inbounds double, double* %0, i64 1
%53 = load double, double* %52
%54 = fmul double %3, %53
%55 = fmul double %25, %54
%56 = tail call double @llvm.fmuladd.f64(double %55, double %46, double %51)
%57 = load double, double* %0
%58 = fmul double %15, %57
%59 = fneg double %58
%60 = fmul double %25, %59
%61 = tail call double @llvm.fmuladd.f64(double %60, double %46, double %56)
%62 = fmul double %13, %53
%63 = fneg double %62
%64 = fmul double %36, %63
%65 = tail call double @llvm.fmuladd.f64(double %64, double %46, double %61)
%66 = fmul double %5, %57
%67 = fmul double %36, %66
%68 = tail call double @llvm.fmuladd.f64(double %67, double %46, double %65)
%69 = fmul double %23, %44
%70 = getelementptr inbounds double, double* %0, i64 11
%71 = load double, double* %70
%72 = tail call double @llvm.fmuladd.f64(double %69, double %71, double %68)
%73 = fneg double %31
%74 = fmul double %44, %73
%75 = tail call double @llvm.fmuladd.f64(double %74, double %71, double %72)
%76 = fneg double %54
%77 = fmul double %8, %76
%78 = tail call double @llvm.fmuladd.f64(double %77, double %71, double %75)
%79 = fmul double %8, %58
%80 = tail call double @llvm.fmuladd.f64(double %79, double %71, double %78)
%81 = fmul double %30, %53
%82 = fmul double %36, %81
%83 = tail call double @llvm.fmuladd.f64(double %82, double %71, double %80)
%84 = fmul double %22, %57
%85 = fneg double %84
%86 = fmul double %36, %85
%87 = tail call double @llvm.fmuladd.f64(double %86, double %71, double %83)
%88 = getelementptr inbounds double, double* %0, i64 15
%89 = load double, double* %88
%90 = fneg double %34
%91 = fmul double %44, %90
%92 = tail call double @llvm.fmuladd.f64(double %91, double %89, double %87)
%93 = fmul double %39, %44
%94 = tail call double @llvm.fmuladd.f64(double %93, double %89, double %92)
%95 = fmul double %8, %62
%96 = tail call double @llvm.fmuladd.f64(double %95, double %89, double %94)
%97 = fneg double %66
%98 = fmul double %8, %97
%99 = tail call double @llvm.fmuladd.f64(double %98, double %89, double %96)
%100 = fneg double %81
%101 = fmul double %25, %100
%102 = tail call double @llvm.fmuladd.f64(double %101, double %89, double %99)
%103 = fmul double %25, %84
%104 = tail call double @llvm.fmuladd.f64(double %103, double %89, double %102)
ret double %104
}