void LinearElasticity_3D_Evaluate(
    const int nPoints, const double E, const double nu, const double *g,
    const double *u, const double *v, const double *w, double *uu_diff_ten,
    double *uv_diff_ten, double *uw_diff_ten, double *vu_diff_ten,
    double *vv_diff_ten, double *vw_diff_ten, double *wu_diff_ten,
    double *wv_diff_ten, double *ww_diff_ten, double *u_force, double *v_force,
    double *w_force) {
  int k;
  for (k = 0; k < nPoints; k++) {
    uu_diff_ten[k * 9 + 0] = (E / (1.0 + nu)) * (1.0 + nu / (1.0 - 2.0 * nu));
    uu_diff_ten[k * 9 + 4] = (E / (1.0 + nu)) * 0.5;
    uu_diff_ten[k * 9 + 8] = (E / (1.0 + nu)) * 0.5;
    uv_diff_ten[k * 9 + 1] = (E / (1.0 + nu)) * (nu / (1.0 - 2.0 * nu));
    uv_diff_ten[k * 9 + 3] = (E / (1.0 + nu)) * 0.5;
    uw_diff_ten[k * 9 + 2] = (E / (1.0 + nu)) * (nu / (1.0 - 2.0 * nu));
    uw_diff_ten[k * 9 + 6] = (E / (1.0 + nu)) * 0.5;
    vu_diff_ten[k * 9 + 1] = (E / (1.0 + nu)) * 0.5;
    vu_diff_ten[k * 9 + 3] = (E / (1.0 + nu)) * (nu / (1.0 - 2.0 * nu));
    vv_diff_ten[k * 9 + 0] = (E / (1.0 + nu)) * 0.5;
    vv_diff_ten[k * 9 + 4] = (E / (1.0 + nu)) * (1.0 + nu / (1.0 - 2.0 * nu));
    vv_diff_ten[k * 9 + 8] = (E / (1.0 + nu)) * 0.5;
    vw_diff_ten[k * 9 + 5] = (E / (1.0 + nu)) * (nu / (1.0 - 2.0 * nu));
    vw_diff_ten[k * 9 + 7] = (E / (1.0 + nu)) * 0.5;
    wu_diff_ten[k * 9 + 2] = (E / (1.0 + nu)) * 0.5;
    wu_diff_ten[k * 9 + 6] = (E / (1.0 + nu)) * (nu / (1.0 - 2.0 * nu));
    wv_diff_ten[k * 9 + 5] = (E / (1.0 + nu)) * 0.5;
    wv_diff_ten[k * 9 + 7] = (E / (1.0 + nu)) * (nu / (1.0 - 2.0 * nu));
    ww_diff_ten[k * 9 + 0] = (E / (1.0 + nu)) * 0.5;
    ww_diff_ten[k * 9 + 4] = (E / (1.0 + nu)) * 0.5;
    ww_diff_ten[k * 9 + 8] = (E / (1.0 + nu)) * (1.0 + nu / (1.0 - 2.0 * nu));
    u_force[k] = -g[0];
    v_force[k] = -g[1];
    w_force[k] = -g[2];
  }
}


x86 assembly (clang, -O0):
<LinearElasticity_3D_Evaluate>:
push   %rbp
mov    %rsp,%rbp
mov    0x60(%rbp),%rax
mov    0x58(%rbp),%rax
mov    0x50(%rbp),%rax
mov    0x48(%rbp),%rax
mov    0x40(%rbp),%rax
mov    0x38(%rbp),%rax
mov    0x30(%rbp),%rax
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %edi,-0x4(%rbp)
movsd  %xmm0,-0x10(%rbp)
movsd  %xmm1,-0x18(%rbp)
mov    %rsi,-0x20(%rbp)
mov    %rdx,-0x28(%rbp)
mov    %rcx,-0x30(%rbp)
mov    %r8,-0x38(%rbp)
mov    %r9,-0x40(%rbp)
movl   $0x0,-0x44(%rbp)
mov    -0x44(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    173b <LinearElasticity_3D_Evaluate+0x63b>
movsd  -0x10(%rbp),%xmm0
movsd  0xe8f(%rip),%xmm1
addsd  -0x18(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
movsd  -0x18(%rbp),%xmm3
addsd  %xmm3,%xmm3
movsd  0xe70(%rip),%xmm1
subsd  %xmm3,%xmm1
divsd  %xmm1,%xmm2
movsd  0xe60(%rip),%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
mov    -0x40(%rbp),%rax
imul   $0x9,-0x44(%rbp),%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x10(%rbp),%xmm0
movsd  0xe38(%rip),%xmm1
addsd  -0x18(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  0xe2f(%rip),%xmm1
mulsd  %xmm1,%xmm0
mov    -0x40(%rbp),%rax
imul   $0x9,-0x44(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x10(%rbp),%xmm0
movsd  0xe03(%rip),%xmm1
addsd  -0x18(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  0xdfa(%rip),%xmm1
mulsd  %xmm1,%xmm0
mov    -0x40(%rbp),%rax
imul   $0x9,-0x44(%rbp),%ecx
add    $0x8,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x10(%rbp),%xmm0
movsd  0xdce(%rip),%xmm1
addsd  -0x18(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  -0x18(%rbp),%xmm3
addsd  %xmm3,%xmm3
movsd  0xdaf(%rip),%xmm2
subsd  %xmm3,%xmm2
divsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
mov    0x10(%rbp),%rax
imul   $0x9,-0x44(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x10(%rbp),%xmm0
movsd  0xd83(%rip),%xmm1
addsd  -0x18(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  0xd7a(%rip),%xmm1
mulsd  %xmm1,%xmm0
mov    0x10(%rbp),%rax
imul   $0x9,-0x44(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x10(%rbp),%xmm0
movsd  0xd4e(%rip),%xmm1
addsd  -0x18(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  -0x18(%rbp),%xmm3
addsd  %xmm3,%xmm3
movsd  0xd2f(%rip),%xmm2
subsd  %xmm3,%xmm2
divsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
mov    0x18(%rbp),%rax
imul   $0x9,-0x44(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x10(%rbp),%xmm0
movsd  0xd03(%rip),%xmm1
addsd  -0x18(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  0xcfa(%rip),%xmm1
mulsd  %xmm1,%xmm0
mov    0x18(%rbp),%rax
imul   $0x9,-0x44(%rbp),%ecx
add    $0x6,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x10(%rbp),%xmm0
movsd  0xcce(%rip),%xmm1
addsd  -0x18(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  0xcc5(%rip),%xmm1
mulsd  %xmm1,%xmm0
mov    0x20(%rbp),%rax
imul   $0x9,-0x44(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x10(%rbp),%xmm0
movsd  0xc99(%rip),%xmm1
addsd  -0x18(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  -0x18(%rbp),%xmm3
addsd  %xmm3,%xmm3
movsd  0xc7a(%rip),%xmm2
subsd  %xmm3,%xmm2
divsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
mov    0x20(%rbp),%rax
imul   $0x9,-0x44(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x10(%rbp),%xmm0
movsd  0xc4e(%rip),%xmm1
addsd  -0x18(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  0xc45(%rip),%xmm1
mulsd  %xmm1,%xmm0
mov    0x28(%rbp),%rax
imul   $0x9,-0x44(%rbp),%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x10(%rbp),%xmm0
movsd  0xc19(%rip),%xmm1
addsd  -0x18(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
movsd  -0x18(%rbp),%xmm3
addsd  %xmm3,%xmm3
movsd  0xbfa(%rip),%xmm1
subsd  %xmm3,%xmm1
divsd  %xmm1,%xmm2
movsd  0xbea(%rip),%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
mov    0x28(%rbp),%rax
imul   $0x9,-0x44(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x10(%rbp),%xmm0
movsd  0xbc2(%rip),%xmm1
addsd  -0x18(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  0xbb9(%rip),%xmm1
mulsd  %xmm1,%xmm0
mov    0x28(%rbp),%rax
imul   $0x9,-0x44(%rbp),%ecx
add    $0x8,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x10(%rbp),%xmm0
movsd  0xb8d(%rip),%xmm1
addsd  -0x18(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  -0x18(%rbp),%xmm3
addsd  %xmm3,%xmm3
movsd  0xb6e(%rip),%xmm2
subsd  %xmm3,%xmm2
divsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
mov    0x30(%rbp),%rax
imul   $0x9,-0x44(%rbp),%ecx
add    $0x5,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x10(%rbp),%xmm0
movsd  0xb42(%rip),%xmm1
addsd  -0x18(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  0xb39(%rip),%xmm1
mulsd  %xmm1,%xmm0
mov    0x30(%rbp),%rax
imul   $0x9,-0x44(%rbp),%ecx
add    $0x7,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x10(%rbp),%xmm0
movsd  0xb0d(%rip),%xmm1
addsd  -0x18(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  0xb04(%rip),%xmm1
mulsd  %xmm1,%xmm0
mov    0x38(%rbp),%rax
imul   $0x9,-0x44(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x10(%rbp),%xmm0
movsd  0xad8(%rip),%xmm1
addsd  -0x18(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  -0x18(%rbp),%xmm3
addsd  %xmm3,%xmm3
movsd  0xab9(%rip),%xmm2
subsd  %xmm3,%xmm2
divsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
mov    0x38(%rbp),%rax
imul   $0x9,-0x44(%rbp),%ecx
add    $0x6,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x10(%rbp),%xmm0
movsd  0xa8d(%rip),%xmm1
addsd  -0x18(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  0xa84(%rip),%xmm1
mulsd  %xmm1,%xmm0
mov    0x40(%rbp),%rax
imul   $0x9,-0x44(%rbp),%ecx
add    $0x5,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x10(%rbp),%xmm0
movsd  0xa58(%rip),%xmm1
addsd  -0x18(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  -0x18(%rbp),%xmm3
addsd  %xmm3,%xmm3
movsd  0xa39(%rip),%xmm2
subsd  %xmm3,%xmm2
divsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
mov    0x40(%rbp),%rax
imul   $0x9,-0x44(%rbp),%ecx
add    $0x7,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x10(%rbp),%xmm0
movsd  0xa0d(%rip),%xmm1
addsd  -0x18(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  0xa04(%rip),%xmm1
mulsd  %xmm1,%xmm0
mov    0x48(%rbp),%rax
imul   $0x9,-0x44(%rbp),%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x10(%rbp),%xmm0
movsd  0x9d8(%rip),%xmm1
addsd  -0x18(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  0x9cf(%rip),%xmm1
mulsd  %xmm1,%xmm0
mov    0x48(%rbp),%rax
imul   $0x9,-0x44(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x10(%rbp),%xmm0
movsd  0x9a3(%rip),%xmm1
addsd  -0x18(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
movsd  -0x18(%rbp),%xmm3
addsd  %xmm3,%xmm3
movsd  0x984(%rip),%xmm1
subsd  %xmm3,%xmm1
divsd  %xmm1,%xmm2
movsd  0x974(%rip),%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
mov    0x48(%rbp),%rax
imul   $0x9,-0x44(%rbp),%ecx
add    $0x8,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    0x50(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    0x58(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    0x60(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    1158 <LinearElasticity_3D_Evaluate+0x58>
pop    %rbp
ret

x86 assembly (clang, -O2):
<LinearElasticity_3D_Evaluate>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
test   %edi,%edi
jle    1280 <LinearElasticity_3D_Evaluate+0x180>
mov    0x70(%rsp),%rax
mov    0x68(%rsp),%r14
mov    0x60(%rsp),%r15
mov    0x58(%rsp),%r12
mov    0x50(%rsp),%rcx
mov    0x48(%rsp),%r13
mov    0x40(%rsp),%r11
mov    0x38(%rsp),%rdx
movsd  0xebe(%rip),%xmm2
movapd %xmm1,%xmm3
addsd  %xmm2,%xmm3
divsd  %xmm3,%xmm0
movapd %xmm1,%xmm3
addsd  %xmm1,%xmm3
movapd %xmm2,%xmm4
subsd  %xmm3,%xmm4
divsd  %xmm4,%xmm1
addsd  %xmm1,%xmm2
mulsd  %xmm0,%xmm2
movsd  0xe96(%rip),%xmm3
mulsd  %xmm0,%xmm3
mulsd  %xmm0,%xmm1
mov    %edi,%edi
shl    $0x3,%rdi
lea    (%rdi,%rdi,8),%rdi
xor    %ebp,%ebp
movapd 0xe82(%rip),%xmm0
xor    %r8d,%r8d
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movsd  %xmm2,(%r9,%r8,1)
movsd  %xmm3,0x20(%r9,%r8,1)
movsd  %xmm3,0x40(%r9,%r8,1)
movsd  %xmm1,0x8(%rdx,%r8,1)
movsd  %xmm3,0x18(%rdx,%r8,1)
movsd  %xmm1,0x10(%r11,%r8,1)
movsd  %xmm3,0x30(%r11,%r8,1)
movsd  %xmm3,0x8(%r13,%r8,1)
movsd  %xmm1,0x18(%r13,%r8,1)
movsd  %xmm3,(%rcx,%r8,1)
movsd  %xmm2,0x20(%rcx,%r8,1)
movsd  %xmm3,0x40(%rcx,%r8,1)
movsd  %xmm1,0x28(%r12,%r8,1)
movsd  %xmm3,0x38(%r12,%r8,1)
movsd  %xmm3,0x10(%r15,%r8,1)
movsd  %xmm1,0x30(%r15,%r8,1)
movsd  %xmm3,0x28(%r14,%r8,1)
movsd  %xmm1,0x38(%r14,%r8,1)
movsd  %xmm3,(%rax,%r8,1)
movsd  %xmm3,0x20(%rax,%r8,1)
movsd  %xmm2,0x40(%rax,%r8,1)
movsd  (%rsi),%xmm4
xorpd  %xmm0,%xmm4
mov    0x78(%rsp),%rbx
movlpd %xmm4,(%rbx,%rbp,1)
movsd  0x8(%rsi),%xmm4
xorpd  %xmm0,%xmm4
mov    0x80(%rsp),%rbx
movlpd %xmm4,(%rbx,%rbp,1)
movsd  0x10(%rsi),%xmm4
xorpd  %xmm0,%xmm4
mov    0x88(%rsp),%r10
movlpd %xmm4,(%r10,%rbp,1)
add    $0x48,%r8
add    $0x8,%rbp
cmp    %r8,%rdi
jne    11a0 <LinearElasticity_3D_Evaluate+0xa0>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define void @LinearElasticity_3D_Evaluate(i32 %0, double %1, double %2, double* nocapture %3, double* nocapture readnone %4, double* nocapture readnone %5, double* nocapture readnone %6, double* nocapture writeonly %7, double* nocapture writeonly %8, double* nocapture writeonly %9, double* nocapture writeonly %10, double* nocapture writeonly %11, double* nocapture writeonly %12, double* nocapture writeonly %13, double* nocapture writeonly %14, double* nocapture writeonly %15, double* nocapture writeonly %16, double* nocapture writeonly %17, double* nocapture writeonly %18) {
%20 = icmp sgt i32 %0, 0
br i1 %20, label %21, label %76
21: ; preds = %19
%22 = fadd double %2, 1.000000e+00
%23 = fdiv double %1, %22
%24 = tail call double @llvm.fmuladd.f64(double %2, double -2.000000e+00, double 1.000000e+00)
%25 = fdiv double %2, %24
%26 = fadd double %25, 1.000000e+00
%27 = fmul double %23, %26
%28 = fmul double %23, 5.000000e-01
%29 = fmul double %23, %25
%30 = getelementptr inbounds double, double* %3, i64 1
%31 = getelementptr inbounds double, double* %3, i64 2
%32 = zext i32 %0 to i64
br label %33
33: ; preds = %21, %33
%34 = phi i64 [ 0, %21 ], [ %74, %33 ]
%35 = mul nuw nsw i64 %34, 9
%36 = getelementptr inbounds double, double* %7, i64 %35
store double %27, double* %36
%37 = add nuw nsw i64 %35, 4
%38 = getelementptr inbounds double, double* %7, i64 %37
store double %28, double* %38
%39 = add nuw nsw i64 %35, 8
%40 = getelementptr inbounds double, double* %7, i64 %39
store double %28, double* %40
%41 = add nuw nsw i64 %35, 1
%42 = getelementptr inbounds double, double* %8, i64 %41
store double %29, double* %42
%43 = add nuw nsw i64 %35, 3
%44 = getelementptr inbounds double, double* %8, i64 %43
store double %28, double* %44
%45 = add nuw nsw i64 %35, 2
%46 = getelementptr inbounds double, double* %9, i64 %45
store double %29, double* %46
%47 = add nuw nsw i64 %35, 6
%48 = getelementptr inbounds double, double* %9, i64 %47
store double %28, double* %48
%49 = getelementptr inbounds double, double* %10, i64 %41
store double %28, double* %49
%50 = getelementptr inbounds double, double* %10, i64 %43
store double %29, double* %50
%51 = getelementptr inbounds double, double* %11, i64 %35
store double %28, double* %51
%52 = getelementptr inbounds double, double* %11, i64 %37
store double %27, double* %52
%53 = getelementptr inbounds double, double* %11, i64 %39
store double %28, double* %53
%54 = add nuw nsw i64 %35, 5
%55 = getelementptr inbounds double, double* %12, i64 %54
store double %29, double* %55
%56 = add nuw nsw i64 %35, 7
%57 = getelementptr inbounds double, double* %12, i64 %56
store double %28, double* %57
%58 = getelementptr inbounds double, double* %13, i64 %45
store double %28, double* %58
%59 = getelementptr inbounds double, double* %13, i64 %47
store double %29, double* %59
%60 = getelementptr inbounds double, double* %14, i64 %54
store double %28, double* %60
%61 = getelementptr inbounds double, double* %14, i64 %56
store double %29, double* %61
%62 = getelementptr inbounds double, double* %15, i64 %35
store double %28, double* %62
%63 = getelementptr inbounds double, double* %15, i64 %37
store double %28, double* %63
%64 = getelementptr inbounds double, double* %15, i64 %39
store double %27, double* %64
%65 = load double, double* %3
%66 = fneg double %65
%67 = getelementptr inbounds double, double* %16, i64 %34
store double %66, double* %67
%68 = load double, double* %30
%69 = fneg double %68
%70 = getelementptr inbounds double, double* %17, i64 %34
store double %69, double* %70
%71 = load double, double* %31
%72 = fneg double %71
%73 = getelementptr inbounds double, double* %18, i64 %34
store double %72, double* %73
%74 = add nuw nsw i64 %34, 1
%75 = icmp eq i64 %74, %32
br i1 %75, label %76, label %33
76: ; preds = %33, %19
ret void
}