#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
double pow(double, double);
double sqrt(double);
void imgproj_motstr(int j, int i, double *rt, double *xyz, double *m,
                    double **adata) {
  double *qr0, *r0 = adata[0], *a = adata[1];
  double t1, t2, t3, t5, t10, t16, t22, t24, t30, t34, t39, t44, t52, t58, t61;
  qr0 = r0 + j * 4;
  t1 = pow(rt[0], 0.2e1);
  t2 = pow(rt[1], 0.2e1);
  t3 = pow(rt[2], 0.2e1);
  t5 = sqrt(0.1e1 - t1 - t2 - t3);
  t10 = t5 * qr0[1] + qr0[0] * rt[0] + rt[1] * qr0[3] - rt[2] * qr0[2];
  t16 = t5 * qr0[2] + qr0[0] * rt[1] + rt[2] * qr0[1] - rt[0] * qr0[3];
  t22 = t5 * qr0[3] + qr0[0] * rt[2] + rt[0] * qr0[2] - rt[1] * qr0[1];
  t24 = -t10 * xyz[0] - t16 * xyz[1] - t22 * xyz[2];
  t30 = t5 * qr0[0] - rt[0] * qr0[1] - rt[1] * qr0[2] - rt[2] * qr0[3];
  t34 = t30 * xyz[0] + t16 * xyz[2] - t22 * xyz[1];
  t39 = t30 * xyz[1] + t22 * xyz[0] - t10 * xyz[2];
  t44 = t30 * xyz[2] + t10 * xyz[1] - t16 * xyz[0];
  t52 = -t24 * t16 + t30 * t39 - t44 * t10 + t34 * t22 + rt[4];
  t58 = -t24 * t22 + t30 * t44 - t34 * t16 + t39 * t10 + rt[5];
  t61 = 0.1e1 / t58;
  m[0] = (a[0] * (-t24 * t10 + t30 * t34 - t39 * t22 + t44 * t16 + rt[3]) +
          a[1] * t52 + a[2] * t58) *
         t61;
  m[1] = (a[3] * t52 + a[4] * t58) * t61;
}


x86 assembly (clang, -O0):
<imgproj_motstr>:
push   %rbp
mov    %rsp,%rbp
sub    $0xc0,%rsp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %rdx,-0x10(%rbp)
mov    %rcx,-0x18(%rbp)
mov    %r8,-0x20(%rbp)
mov    %r9,-0x28(%rbp)
mov    -0x28(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x38(%rbp)
mov    -0x28(%rbp),%rax
mov    0x8(%rax),%rax
mov    %rax,-0x40(%rbp)
mov    -0x38(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x30(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0xe88(%rip),%xmm1
call   1030 <pow@plt>
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  0xe6d(%rip),%xmm1
call   1030 <pow@plt>
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  0xe52(%rip),%xmm1
call   1030 <pow@plt>
movsd  %xmm0,-0x58(%rbp)
movsd  0xe38(%rip),%xmm0
subsd  -0x48(%rbp),%xmm0
subsd  -0x50(%rbp),%xmm0
subsd  -0x58(%rbp),%xmm0
call   1040 <sqrt@plt>
movsd  %xmm0,-0x60(%rbp)
movsd  -0x60(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  0x8(%rax),%xmm2
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x10(%rbp),%rax
mulsd  (%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm1
mov    -0x30(%rbp),%rax
movsd  0x18(%rax),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x30(%rbp),%rax
movsd  0x10(%rax),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x60(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  0x10(%rax),%xmm2
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x10(%rbp),%rax
mulsd  0x8(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm1
mov    -0x30(%rbp),%rax
movsd  0x8(%rax),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x30(%rbp),%rax
movsd  0x18(%rax),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x60(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  0x18(%rax),%xmm2
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x10(%rbp),%rax
mulsd  0x10(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x30(%rbp),%rax
movsd  0x10(%rax),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x30(%rbp),%rax
movsd  0x8(%rax),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x68(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm2
movsd  -0x70(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mulsd  0x8(%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x78(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x60(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm2
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x30(%rbp),%rax
mulsd  0x8(%rax),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm1
mov    -0x30(%rbp),%rax
movsd  0x10(%rax),%xmm2
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x30(%rbp),%rax
movsd  0x18(%rax),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x88(%rbp),%xmm1
ff
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm2
movsd  -0x70(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mulsd  0x10(%rax),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x78(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x88(%rbp),%xmm1
ff
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm2
movsd  -0x78(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mulsd  (%rax),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x68(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x88(%rbp),%xmm1
ff
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm2
movsd  -0x68(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mulsd  0x8(%rax),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x70(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0xa0(%rbp),%xmm1
ff
movsd  -0x68(%rbp),%xmm2
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x90(%rbp),%xmm0
ff
movsd  -0x78(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
addsd  0x20(%rax),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x90(%rbp),%xmm1
ff
movsd  -0x70(%rbp),%xmm2
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x98(%rbp),%xmm0
ff
movsd  -0x68(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
addsd  0x28(%rax),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  0x964(%rip),%xmm0
divsd  -0xb0(%rbp),%xmm0
ff
movsd  %xmm0,-0xb8(%rbp)
ff
mov    -0x40(%rbp),%rax
movsd  (%rax),%xmm1
movsd  -0x80(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
movsd  -0x68(%rbp),%xmm3
movsd  -0x88(%rbp),%xmm0
ff
mulsd  -0x90(%rbp),%xmm0
ff
mulsd  %xmm3,%xmm2
addsd  %xmm0,%xmm2
movsd  -0x98(%rbp),%xmm0
ff
movsd  -0x78(%rbp),%xmm3
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm3,%xmm0
addsd  %xmm2,%xmm0
movsd  -0xa0(%rbp),%xmm2
ff
movsd  -0x70(%rbp),%xmm3
mulsd  %xmm3,%xmm2
addsd  %xmm0,%xmm2
mov    -0x10(%rbp),%rax
addsd  0x18(%rax),%xmm2
mov    -0x40(%rbp),%rax
movsd  0x8(%rax),%xmm0
mulsd  -0xa8(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x40(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  -0xb0(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mulsd  -0xb8(%rbp),%xmm0
ff
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x40(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  -0xa8(%rbp),%xmm2
ff
mov    -0x40(%rbp),%rax
movsd  0x20(%rax),%xmm1
mulsd  -0xb0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mulsd  -0xb8(%rbp),%xmm0
ff
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x8(%rax)
add    $0xc0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<imgproj_motstr>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    %r8,%r14
mov    %rcx,%r15
mov    %rdx,%rbx
mov    (%r9),%r13
mov    0x8(%r9),%r12
shl    $0x2,%edi
movslq %edi,%rbp
movsd  (%rdx),%xmm1
movsd  0x8(%rdx),%xmm2
mulsd  %xmm1,%xmm1
mulsd  %xmm2,%xmm2
movsd  0x10(%rdx),%xmm3
mulsd  %xmm3,%xmm3
movsd  0xead(%rip),%xmm0
subsd  %xmm1,%xmm0
subsd  %xmm2,%xmm0
subsd  %xmm3,%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     116f <imgproj_motstr+0x5f>
sqrtsd %xmm0,%xmm0
jmp    1174 <imgproj_motstr+0x64>
call   1030 <sqrt@plt>
movsd  0x0(%r13,%rbp,8),%xmm4
movsd  0x8(%r13,%rbp,8),%xmm11
movsd  (%rbx),%xmm8
movsd  0x8(%rbx),%xmm12
movapd %xmm0,%xmm6
movapd %xmm4,%xmm9
movapd %xmm0,%xmm3
movapd %xmm4,%xmm10
movapd %xmm0,%xmm7
mulsd  %xmm4,%xmm0
mulsd  %xmm8,%xmm4
mulsd  %xmm11,%xmm6
addsd  %xmm4,%xmm6
movsd  0x18(%r13,%rbp,8),%xmm15
movapd %xmm12,%xmm13
mulsd  %xmm15,%xmm13
addsd  %xmm6,%xmm13
movsd  0x10(%rbx),%xmm1
movsd  0x10(%r13,%rbp,8),%xmm2
movapd %xmm1,%xmm6
mulsd  %xmm2,%xmm6
subsd  %xmm6,%xmm13
mulsd  %xmm12,%xmm9
mulsd  %xmm2,%xmm3
addsd  %xmm9,%xmm3
movapd %xmm1,%xmm9
mulsd  %xmm11,%xmm9
addsd  %xmm3,%xmm9
movapd %xmm8,%xmm14
movapd %xmm12,%xmm3
mulsd  %xmm11,%xmm3
mulsd  %xmm8,%xmm11
mulsd  %xmm15,%xmm8
subsd  %xmm8,%xmm9
mulsd  %xmm1,%xmm10
mulsd  %xmm15,%xmm7
addsd  %xmm10,%xmm7
mulsd  %xmm2,%xmm14
addsd  %xmm7,%xmm14
subsd  %xmm3,%xmm14
movapd 0xdcb(%rip),%xmm7
xorpd  %xmm13,%xmm7
movsd  (%r15),%xmm5
movsd  0x8(%r15),%xmm6
movapd %xmm6,%xmm3
mulsd  %xmm9,%xmm3
mulsd  %xmm5,%xmm7
subsd  %xmm3,%xmm7
movsd  0x10(%r15),%xmm3
movapd %xmm14,%xmm4
mulsd  %xmm3,%xmm4
subsd  %xmm4,%xmm7
subsd  %xmm11,%xmm0
mulsd  %xmm2,%xmm12
subsd  %xmm12,%xmm0
mulsd  %xmm15,%xmm1
subsd  %xmm1,%xmm0
movapd %xmm9,%xmm1
mulsd  %xmm3,%xmm1
movapd %xmm0,%xmm2
mulsd  %xmm5,%xmm2
addsd  %xmm1,%xmm2
movapd %xmm14,%xmm1
mulsd  %xmm6,%xmm1
subsd  %xmm1,%xmm2
movapd %xmm9,%xmm1
mulsd  %xmm5,%xmm1
mulsd  %xmm14,%xmm5
movapd %xmm0,%xmm4
mulsd  %xmm6,%xmm4
addsd  %xmm5,%xmm4
movapd %xmm13,%xmm5
mulsd  %xmm3,%xmm5
subsd  %xmm5,%xmm4
mulsd  %xmm13,%xmm6
mulsd  %xmm0,%xmm3
addsd  %xmm6,%xmm3
subsd  %xmm1,%xmm3
movapd %xmm0,%xmm5
mulsd  %xmm4,%xmm5
movapd %xmm7,%xmm1
mulsd  %xmm9,%xmm1
subsd  %xmm1,%xmm5
movapd %xmm3,%xmm1
mulsd  %xmm13,%xmm1
subsd  %xmm1,%xmm5
movapd %xmm2,%xmm1
mulsd  %xmm14,%xmm1
addsd  %xmm5,%xmm1
movapd %xmm0,%xmm5
mulsd  %xmm3,%xmm5
movapd %xmm7,%xmm6
mulsd  %xmm14,%xmm6
subsd  %xmm6,%xmm5
mulsd  %xmm2,%xmm0
mulsd  %xmm9,%xmm2
subsd  %xmm2,%xmm5
movapd %xmm4,%xmm2
mulsd  %xmm13,%xmm2
addsd  %xmm5,%xmm2
mulsd  %xmm13,%xmm7
subsd  %xmm7,%xmm0
mulsd  %xmm14,%xmm4
subsd  %xmm4,%xmm0
addsd  0x20(%rbx),%xmm1
addsd  0x28(%rbx),%xmm2
mulsd  %xmm9,%xmm3
addsd  %xmm0,%xmm3
addsd  0x18(%rbx),%xmm3
movsd  0x8(%r12),%xmm0
mulsd  (%r12),%xmm3
mulsd  %xmm1,%xmm0
addsd  %xmm0,%xmm3
movsd  0x10(%r12),%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm3,%xmm0
movsd  0xc61(%rip),%xmm3
divsd  %xmm2,%xmm3
mulsd  %xmm3,%xmm0
movsd  %xmm0,(%r14)
mulsd  0x20(%r12),%xmm2
mulsd  0x18(%r12),%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm3,%xmm1
movsd  %xmm1,0x8(%r14)
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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