void ContactJacobian(CJ, q) double CJ[42];
double q[7];
{
  double t1;
  double t12;
  double t13;
  double t15;
  double t17;
  double t19;
  double t2;
  double t20;
  double t21;
  double t25;
  double t28;
  double t3;
  double t32;
  double t34;
  double t4;
  double t5;
  double t52;
  double t6;
  double t7;
  double t8;
  double t9;
  {
    CJ[0] = 0.0;
    t1 = q[0];
    t2 = sin(t1);
    t3 = q[1];
    t4 = cos(t3);
    t5 = q[2];
    t6 = cos(t5);
    t7 = t4 * t6;
    t8 = q[3];
    t9 = sin(t8);
    t12 = sin(t3);
    t13 = cos(t8);
    t15 = -0.45 - 0.48 * t13;
    t17 = 0.48 * t7 * t9 - t12 * t15;
    t19 = cos(t1);
    t20 = sin(t5);
    t21 = t19 * t20;
    CJ[1] = -t2 * t17 - 0.48 * t21 * t9;
    CJ[2] = 0.0;
    t25 = t2 * t20;
    CJ[3] = t19 * t17 - 0.48 * t25 * t9;
    CJ[4] = 0.0;
    CJ[5] = 0.0;
    CJ[6] = 0.0;
    t28 = t12 * t6;
    t32 = -0.48 * t28 * t9 - t4 * t15;
    CJ[7] = t19 * t32;
    CJ[8] = 0.0;
    CJ[9] = t2 * t32;
    CJ[10] = 0.0;
    CJ[11] = -t17;
    CJ[12] = 0.0;
    t34 = t20 * t9;
    CJ[13] = -0.48 * t19 * t4 * t34 - 0.48 * t2 * t6 * t9;
    CJ[14] = 0.0;
    CJ[15] = -0.48 * t2 * t4 * t34 + 0.48 * t19 * t6 * t9;
    CJ[16] = 0.0;
    CJ[17] = 0.48 * t12 * t20 * t9;
    CJ[18] = 0.0;
    t52 = 0.48 * t7 * t13 - 0.48 * t9 * t12;
    CJ[19] = t19 * t52 - 0.48 * t25 * t13;
    CJ[20] = 0.0;
    CJ[21] = t2 * t52 + 0.48 * t21 * t13;
    CJ[22] = 0.0;
    CJ[23] = -0.48 * t28 * t13 - 0.48 * t4 * t9;
    CJ[24] = 0.0;
    CJ[25] = 0.0;
    CJ[26] = 0.0;
    CJ[27] = 0.0;
    CJ[28] = 0.0;
    CJ[29] = 0.0;
    CJ[30] = 0.0;
    CJ[31] = 0.0;
    CJ[32] = 0.0;
    CJ[33] = 0.0;
    CJ[34] = 0.0;
    CJ[35] = 0.0;
    CJ[36] = 0.0;
    CJ[37] = 0.0;
    CJ[38] = 0.0;
    CJ[39] = 0.0;
    CJ[40] = 0.0;
    CJ[41] = 0.0;
    return;
  }
}


x86 assembly (clang, -O0):
<ContactJacobian>:
push   %rbp
mov    %rsp,%rbp
sub    $0xc0,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
call   1030 <sin@plt>
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
call   1040 <cos@plt>
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
call   1040 <cos@plt>
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
mulsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0xa8(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
call   1030 <sin@plt>
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
call   1030 <sin@plt>
movsd  %xmm0,-0x20(%rbp)
movsd  -0xb0(%rbp),%xmm0
ff
call   1040 <cos@plt>
movsd  %xmm0,-0x28(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  0xdfc(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xdf8(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  0xdd7(%rip),%xmm0
mulsd  -0xa8(%rbp),%xmm0
ff
movsd  -0xb8(%rbp),%xmm2
ff
movsd  -0x20(%rbp),%xmm1
mulsd  -0x30(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x18(%rbp),%xmm0
call   1040 <cos@plt>
movsd  %xmm0,-0x40(%rbp)
movsd  -0x90(%rbp),%xmm0
ff
call   1030 <sin@plt>
movsd  %xmm0,-0x50(%rbp)
movsd  -0x40(%rbp),%xmm0
mulsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x48(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x38(%rbp),%xmm2
movsd  0xd40(%rip),%xmm1
mulsd  -0x58(%rbp),%xmm1
mulsd  -0xb8(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,0x8(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x10(%rax)
movsd  -0x48(%rbp),%xmm0
mulsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm2
movsd  0xcde(%rip),%xmm1
mulsd  -0x60(%rbp),%xmm1
mulsd  -0xb8(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,0x18(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x20(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x28(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x30(%rax)
movsd  -0x20(%rbp),%xmm0
mulsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0x68(%rbp)
movsd  0xc73(%rip),%xmm0
mulsd  -0x68(%rbp),%xmm0
movsd  -0xb8(%rbp),%xmm2
ff
movsd  -0x88(%rbp),%xmm1
ff
mulsd  -0x30(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x40(%rbp),%xmm0
mulsd  -0x78(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,0x38(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x40(%rax)
movsd  -0x48(%rbp),%xmm0
mulsd  -0x78(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,0x48(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x50(%rax)
movsd  -0x38(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,0x58(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x60(%rax)
movsd  -0x50(%rbp),%xmm0
mulsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0x80(%rbp)
movsd  0xbac(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
mulsd  -0x88(%rbp),%xmm0
ff
movsd  -0x80(%rbp),%xmm2
movsd  0xb8a(%rip),%xmm1
mulsd  -0x48(%rbp),%xmm1
mulsd  -0xa0(%rbp),%xmm1
ff
mulsd  -0xb8(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,0x68(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x70(%rax)
movsd  0xb41(%rip),%xmm0
mulsd  -0x48(%rbp),%xmm0
mulsd  -0x88(%rbp),%xmm0
ff
movsd  -0x80(%rbp),%xmm2
movsd  0xb1f(%rip),%xmm1
mulsd  -0x40(%rbp),%xmm1
mulsd  -0xa0(%rbp),%xmm1
ff
mulsd  -0xb8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,0x78(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x80(%rax)
movsd  0xae2(%rip),%xmm0
mulsd  -0x20(%rbp),%xmm0
mulsd  -0x50(%rbp),%xmm0
mulsd  -0xb8(%rbp),%xmm0
ff
mov    -0x8(%rbp),%rax
movsd  %xmm0,0x88(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x90(%rax)
movsd  0xaad(%rip),%xmm0
mulsd  -0xa8(%rbp),%xmm0
ff
movsd  -0x28(%rbp),%xmm2
movsd  0xa98(%rip),%xmm1
mulsd  -0xb8(%rbp),%xmm1
ff
mulsd  -0x20(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x98(%rbp),%xmm2
ff
movsd  0xa4f(%rip),%xmm1
mulsd  -0x60(%rbp),%xmm1
mulsd  -0x28(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,0x98(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0xa0(%rax)
movsd  -0x48(%rbp),%xmm0
movsd  -0x98(%rbp),%xmm2
ff
movsd  0x9f6(%rip),%xmm1
mulsd  -0x58(%rbp),%xmm1
mulsd  -0x28(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,0xa8(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0xb0(%rax)
movsd  0x9c9(%rip),%xmm0
mulsd  -0x68(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm2
movsd  0x9af(%rip),%xmm1
mulsd  -0x88(%rbp),%xmm1
ff
mulsd  -0xb8(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,0xb8(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0xc0(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0xc8(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0xd0(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0xd8(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0xe0(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0xe8(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0xf0(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0xf8(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x100(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x108(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x110(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x118(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x120(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x128(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x130(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x138(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x140(%rax)
mov    -0x8(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x148(%rax)
add    $0xc0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<ContactJacobian>:
push   %r14
push   %rbx
sub    $0x78,%rsp
mov    %rsi,%r14
mov    %rdi,%rbx
movq   $0x0,(%rdi)
movsd  (%rsi),%xmm0
movsd  %xmm0,0x10(%rsp)
call   1030 <sin@plt>
movaps %xmm0,0x60(%rsp)
movsd  0x8(%r14),%xmm0
movsd  %xmm0,0x8(%rsp)
call   1040 <cos@plt>
movsd  %xmm0,0x30(%rsp)
movsd  0x10(%r14),%xmm0
movsd  %xmm0,0x38(%rsp)
call   1040 <cos@plt>
movsd  %xmm0,0x48(%rsp)
movsd  0x30(%rsp),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,0x20(%rsp)
movsd  0x18(%r14),%xmm0
movsd  %xmm0,0x18(%rsp)
call   1030 <sin@plt>
movsd  %xmm0,0x28(%rsp)
movsd  0x8(%rsp),%xmm0
call   1030 <sin@plt>
movsd  %xmm0,0x8(%rsp)
movsd  0x18(%rsp),%xmm0
call   1040 <cos@plt>
movsd  %xmm0,0x18(%rsp)
mulsd  0xe39(%rip),%xmm0
addsd  0xe39(%rip),%xmm0
movsd  %xmm0,0x40(%rsp)
movsd  0x20(%rsp),%xmm1
mulsd  0xe2d(%rip),%xmm1
movsd  %xmm1,0x20(%rsp)
mulsd  0x8(%rsp),%xmm0
mulsd  0x28(%rsp),%xmm1
subsd  %xmm0,%xmm1
movapd %xmm1,0x50(%rsp)
movsd  0x10(%rsp),%xmm0
call   1040 <cos@plt>
movsd  %xmm0,0x10(%rsp)
movsd  0x38(%rsp),%xmm0
call   1030 <sin@plt>
movsd  0x10(%rsp),%xmm1
movapd %xmm1,%xmm13
mulsd  %xmm0,%xmm13
movapd 0x60(%rsp),%xmm9
movapd %xmm9,%xmm2
xorpd  0xde1(%rip),%xmm2
mulsd  0xdc8(%rip),%xmm13
movsd  0x28(%rsp),%xmm12
movapd %xmm12,%xmm3
mulsd  %xmm13,%xmm3
movapd 0x50(%rsp),%xmm5
mulsd  %xmm5,%xmm2
subsd  %xmm3,%xmm2
movsd  %xmm2,0x8(%rbx)
movapd %xmm9,%xmm4
mulsd  %xmm0,%xmm4
movsd  0xd82(%rip),%xmm11
mulsd  %xmm11,%xmm4
movapd %xmm12,%xmm2
mulsd  %xmm4,%xmm2
movapd %xmm1,%xmm3
movapd %xmm1,%xmm15
mulsd  %xmm5,%xmm3
addsd  %xmm2,%xmm3
movq   $0x0,0x10(%rbx)
movsd  %xmm3,0x18(%rbx)
movsd  0x48(%rsp),%xmm1
movapd %xmm1,%xmm2
movsd  0x8(%rsp),%xmm14
mulsd  %xmm14,%xmm2
mulsd  %xmm11,%xmm2
movsd  0x30(%rsp),%xmm10
movsd  0x40(%rsp),%xmm3
mulsd  %xmm10,%xmm3
movapd %xmm2,%xmm6
mulsd  %xmm12,%xmm6
subsd  %xmm3,%xmm6
movapd %xmm15,%xmm7
mulsd  %xmm6,%xmm7
xorps  %xmm8,%xmm8
movups %xmm8,0x20(%rbx)
movq   $0x0,0x30(%rbx)
movsd  %xmm7,0x38(%rbx)
movq   $0x0,0x40(%rbx)
movapd %xmm9,%xmm3
mulsd  %xmm9,%xmm6
movsd  %xmm6,0x48(%rbx)
xorpd  0xcfe(%rip),%xmm5
movq   $0x0,0x50(%rbx)
movlpd %xmm5,0x58(%rbx)
movapd %xmm12,%xmm5
mulsd  %xmm0,%xmm5
movapd %xmm15,%xmm6
movapd %xmm11,%xmm9
mulsd  %xmm11,%xmm6
mulsd  %xmm10,%xmm6
movapd %xmm3,%xmm7
movapd %xmm3,%xmm11
mulsd  %xmm9,%xmm7
movapd %xmm7,%xmm3
mulsd  %xmm1,%xmm3
mulsd  %xmm12,%xmm3
mulsd  %xmm5,%xmm6
addsd  %xmm3,%xmm6
movq   $0x0,0x60(%rbx)
movsd  %xmm6,0x68(%rbx)
movapd %xmm15,%xmm3
movsd  0xc86(%rip),%xmm9
mulsd  %xmm9,%xmm3
mulsd  %xmm1,%xmm3
mulsd  %xmm10,%xmm7
mulsd  %xmm5,%xmm7
mulsd  %xmm12,%xmm3
addsd  %xmm3,%xmm7
movq   $0x0,0x70(%rbx)
movsd  %xmm7,0x78(%rbx)
mulsd  %xmm14,%xmm9
mulsd  %xmm0,%xmm9
movq   $0x0,0x80(%rbx)
mulsd  %xmm12,%xmm9
movsd  %xmm9,0x88(%rbx)
movapd %xmm12,%xmm0
movsd  0xc1e(%rip),%xmm1
mulsd  %xmm1,%xmm0
mulsd  %xmm14,%xmm0
movsd  0x20(%rsp),%xmm3
movsd  0x18(%rsp),%xmm6
mulsd  %xmm6,%xmm3
addsd  %xmm0,%xmm3
mulsd  %xmm6,%xmm4
movapd %xmm15,%xmm0
mulsd  %xmm3,%xmm0
addsd  %xmm4,%xmm0
movq   $0x0,0x90(%rbx)
movsd  %xmm0,0x98(%rbx)
mulsd  %xmm11,%xmm3
mulsd  %xmm6,%xmm13
addsd  %xmm13,%xmm3
movq   $0x0,0xa0(%rbx)
movsd  %xmm3,0xa8(%rbx)
movapd %xmm10,%xmm0
mulsd  %xmm1,%xmm0
mulsd  %xmm12,%xmm0
mulsd  %xmm6,%xmm2
addsd  %xmm0,%xmm2
movq   $0x0,0xb0(%rbx)
movsd  %xmm2,0xb8(%rbx)
movups %xmm8,0x140(%rbx)
movups %xmm8,0x130(%rbx)
movups %xmm8,0x120(%rbx)
movups %xmm8,0x110(%rbx)
movups %xmm8,0x100(%rbx)
movups %xmm8,0xf0(%rbx)
movups %xmm8,0xe0(%rbx)
movups %xmm8,0xd0(%rbx)
movups %xmm8,0xc0(%rbx)
add    $0x78,%rsp
pop    %rbx
pop    %r14
ret

LLVM IR (-O0):
define void @ContactJacobian(double* %0, double* %1) {
%3 = alloca double*
%4 = alloca double*
%5 = alloca double
%6 = alloca double
%7 = alloca double
%8 = alloca double
%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
store double* %0, double** %3
store double* %1, double** %4
%26 = load double*, double** %3
%27 = getelementptr inbounds double, double* %26, i64 0
store double 0.000000e+00, double* %27
%28 = load double*, double** %4
%29 = getelementptr inbounds double, double* %28, i64 0
%30 = load double, double* %29
store double %30, double* %5
%31 = load double, double* %5
%32 = call double @sin(double %31)
store double %32, double* %11
%33 = load double*, double** %4
%34 = getelementptr inbounds double, double* %33, i64 1
%35 = load double, double* %34
store double %35, double* %16
%36 = load double, double* %16
%37 = call double @cos(double %36)
store double %37, double* %19
%38 = load double*, double** %4
%39 = getelementptr inbounds double, double* %38, i64 2
%40 = load double, double* %39
store double %40, double* %20
%41 = load double, double* %20
%42 = call double @cos(double %41)
store double %42, double* %22
%43 = load double, double* %19
%44 = load double, double* %22
%45 = fmul double %43, %44
store double %45, double* %23
%46 = load double*, double** %4
%47 = getelementptr inbounds double, double* %46, i64 3
%48 = load double, double* %47
store double %48, double* %24
%49 = load double, double* %24
%50 = call double @sin(double %49)
store double %50, double* %25
%51 = load double, double* %16
%52 = call double @sin(double %51)
store double %52, double* %6
%53 = load double, double* %24
%54 = call double @cos(double %53)
store double %54, double* %7
%55 = load double, double* %7
%56 = call double @llvm.fmuladd.f64(double -4.800000e-01, double %55, double -4.500000e-01)
store double %56, double* %8
%57 = load double, double* %23
%58 = fmul double 4.800000e-01, %57
%59 = load double, double* %25
%60 = load double, double* %6
%61 = load double, double* %8
%62 = fmul double %60, %61
%63 = fneg double %62
%64 = call double @llvm.fmuladd.f64(double %58, double %59, double %63)
store double %64, double* %9
%65 = load double, double* %5
%66 = call double @cos(double %65)
store double %66, double* %10
%67 = load double, double* %20
%68 = call double @sin(double %67)
store double %68, double* %12
%69 = load double, double* %10
%70 = load double, double* %12
%71 = fmul double %69, %70
store double %71, double* %13
%72 = load double, double* %11
%73 = fneg double %72
%74 = load double, double* %9
%75 = load double, double* %13
%76 = fmul double 4.800000e-01, %75
%77 = load double, double* %25
%78 = fmul double %76, %77
%79 = fneg double %78
%80 = call double @llvm.fmuladd.f64(double %73, double %74, double %79)
%81 = load double*, double** %3
%82 = getelementptr inbounds double, double* %81, i64 1
store double %80, double* %82
%83 = load double*, double** %3
%84 = getelementptr inbounds double, double* %83, i64 2
store double 0.000000e+00, double* %84
%85 = load double, double* %11
%86 = load double, double* %12
%87 = fmul double %85, %86
store double %87, double* %14
%88 = load double, double* %10
%89 = load double, double* %9
%90 = load double, double* %14
%91 = fmul double 4.800000e-01, %90
%92 = load double, double* %25
%93 = fmul double %91, %92
%94 = fneg double %93
%95 = call double @llvm.fmuladd.f64(double %88, double %89, double %94)
%96 = load double*, double** %3
%97 = getelementptr inbounds double, double* %96, i64 3
store double %95, double* %97
%98 = load double*, double** %3
%99 = getelementptr inbounds double, double* %98, i64 4
store double 0.000000e+00, double* %99
%100 = load double*, double** %3
%101 = getelementptr inbounds double, double* %100, i64 5
store double 0.000000e+00, double* %101
%102 = load double*, double** %3
%103 = getelementptr inbounds double, double* %102, i64 6
store double 0.000000e+00, double* %103
%104 = load double, double* %6
%105 = load double, double* %22
%106 = fmul double %104, %105
store double %106, double* %15
%107 = load double, double* %15
%108 = fmul double -4.800000e-01, %107
%109 = load double, double* %25
%110 = load double, double* %19
%111 = load double, double* %8
%112 = fmul double %110, %111
%113 = fneg double %112
%114 = call double @llvm.fmuladd.f64(double %108, double %109, double %113)
store double %114, double* %17
%115 = load double, double* %10
%116 = load double, double* %17
%117 = fmul double %115, %116
%118 = load double*, double** %3
%119 = getelementptr inbounds double, double* %118, i64 7
store double %117, double* %119
%120 = load double*, double** %3
%121 = getelementptr inbounds double, double* %120, i64 8
store double 0.000000e+00, double* %121
%122 = load double, double* %11
%123 = load double, double* %17
%124 = fmul double %122, %123
%125 = load double*, double** %3
%126 = getelementptr inbounds double, double* %125, i64 9
store double %124, double* %126
%127 = load double*, double** %3
%128 = getelementptr inbounds double, double* %127, i64 10
store double 0.000000e+00, double* %128
%129 = load double, double* %9
%130 = fneg double %129
%131 = load double*, double** %3
%132 = getelementptr inbounds double, double* %131, i64 11
store double %130, double* %132
%133 = load double*, double** %3
%134 = getelementptr inbounds double, double* %133, i64 12
store double 0.000000e+00, double* %134
%135 = load double, double* %12
%136 = load double, double* %25
%137 = fmul double %135, %136
store double %137, double* %18
%138 = load double, double* %10
%139 = fmul double -4.800000e-01, %138
%140 = load double, double* %19
%141 = fmul double %139, %140
%142 = load double, double* %18
%143 = load double, double* %11
%144 = fmul double 4.800000e-01, %143
%145 = load double, double* %22
%146 = fmul double %144, %145
%147 = load double, double* %25
%148 = fmul double %146, %147
%149 = fneg double %148
%150 = call double @llvm.fmuladd.f64(double %141, double %142, double %149)
%151 = load double*, double** %3
%152 = getelementptr inbounds double, double* %151, i64 13
store double %150, double* %152
%153 = load double*, double** %3
%154 = getelementptr inbounds double, double* %153, i64 14
store double 0.000000e+00, double* %154
%155 = load double, double* %11
%156 = fmul double -4.800000e-01, %155
%157 = load double, double* %19
%158 = fmul double %156, %157
%159 = load double, double* %18
%160 = load double, double* %10
%161 = fmul double 4.800000e-01, %160
%162 = load double, double* %22
%163 = fmul double %161, %162
%164 = load double, double* %25
%165 = fmul double %163, %164
%166 = call double @llvm.fmuladd.f64(double %158, double %159, double %165)
%167 = load double*, double** %3
%168 = getelementptr inbounds double, double* %167, i64 15
store double %166, double* %168
%169 = load double*, double** %3
%170 = getelementptr inbounds double, double* %169, i64 16
store double 0.000000e+00, double* %170
%171 = load double, double* %6
%172 = fmul double 4.800000e-01, %171
%173 = load double, double* %12
%174 = fmul double %172, %173
%175 = load double, double* %25
%176 = fmul double %174, %175
%177 = load double*, double** %3
%178 = getelementptr inbounds double, double* %177, i64 17
store double %176, double* %178
%179 = load double*, double** %3
%180 = getelementptr inbounds double, double* %179, i64 18
store double 0.000000e+00, double* %180
%181 = load double, double* %23
%182 = fmul double 4.800000e-01, %181
%183 = load double, double* %7
%184 = load double, double* %25
%185 = fmul double 4.800000e-01, %184
%186 = load double, double* %6
%187 = fmul double %185, %186
%188 = fneg double %187
%189 = call double @llvm.fmuladd.f64(double %182, double %183, double %188)
store double %189, double* %21
%190 = load double, double* %10
%191 = load double, double* %21
%192 = load double, double* %14
%193 = fmul double 4.800000e-01, %192
%194 = load double, double* %7
%195 = fmul double %193, %194
%196 = fneg double %195
%197 = call double @llvm.fmuladd.f64(double %190, double %191, double %196)
%198 = load double*, double** %3
%199 = getelementptr inbounds double, double* %198, i64 19
store double %197, double* %199
%200 = load double*, double** %3
%201 = getelementptr inbounds double, double* %200, i64 20
store double 0.000000e+00, double* %201
%202 = load double, double* %11
%203 = load double, double* %21
%204 = load double, double* %13
%205 = fmul double 4.800000e-01, %204
%206 = load double, double* %7
%207 = fmul double %205, %206
%208 = call double @llvm.fmuladd.f64(double %202, double %203, double %207)
%209 = load double*, double** %3
%210 = getelementptr inbounds double, double* %209, i64 21
store double %208, double* %210
%211 = load double*, double** %3
%212 = getelementptr inbounds double, double* %211, i64 22
store double 0.000000e+00, double* %212
%213 = load double, double* %15
%214 = fmul double -4.800000e-01, %213
%215 = load double, double* %7
%216 = load double, double* %19
%217 = fmul double 4.800000e-01, %216
%218 = load double, double* %25
%219 = fmul double %217, %218
%220 = fneg double %219
%221 = call double @llvm.fmuladd.f64(double %214, double %215, double %220)
%222 = load double*, double** %3
%223 = getelementptr inbounds double, double* %222, i64 23
store double %221, double* %223
%224 = load double*, double** %3
%225 = getelementptr inbounds double, double* %224, i64 24
store double 0.000000e+00, double* %225
%226 = load double*, double** %3
%227 = getelementptr inbounds double, double* %226, i64 25
store double 0.000000e+00, double* %227
%228 = load double*, double** %3
%229 = getelementptr inbounds double, double* %228, i64 26
store double 0.000000e+00, double* %229
%230 = load double*, double** %3
%231 = getelementptr inbounds double, double* %230, i64 27
store double 0.000000e+00, double* %231
%232 = load double*, double** %3
%233 = getelementptr inbounds double, double* %232, i64 28
store double 0.000000e+00, double* %233
%234 = load double*, double** %3
%235 = getelementptr inbounds double, double* %234, i64 29
store double 0.000000e+00, double* %235
%236 = load double*, double** %3
%237 = getelementptr inbounds double, double* %236, i64 30
store double 0.000000e+00, double* %237
%238 = load double*, double** %3
%239 = getelementptr inbounds double, double* %238, i64 31
store double 0.000000e+00, double* %239
%240 = load double*, double** %3
%241 = getelementptr inbounds double, double* %240, i64 32
store double 0.000000e+00, double* %241
%242 = load double*, double** %3
%243 = getelementptr inbounds double, double* %242, i64 33
store double 0.000000e+00, double* %243
%244 = load double*, double** %3
%245 = getelementptr inbounds double, double* %244, i64 34
store double 0.000000e+00, double* %245
%246 = load double*, double** %3
%247 = getelementptr inbounds double, double* %246, i64 35
store double 0.000000e+00, double* %247
%248 = load double*, double** %3
%249 = getelementptr inbounds double, double* %248, i64 36
store double 0.000000e+00, double* %249
%250 = load double*, double** %3
%251 = getelementptr inbounds double, double* %250, i64 37
store double 0.000000e+00, double* %251
%252 = load double*, double** %3
%253 = getelementptr inbounds double, double* %252, i64 38
store double 0.000000e+00, double* %253
%254 = load double*, double** %3
%255 = getelementptr inbounds double, double* %254, i64 39
store double 0.000000e+00, double* %255
%256 = load double*, double** %3
%257 = getelementptr inbounds double, double* %256, i64 40
store double 0.000000e+00, double* %257
%258 = load double*, double** %3
%259 = getelementptr inbounds double, double* %258, i64 41
store double 0.000000e+00, double* %259
ret void
}

LLVM IR (-O2):
define void @ContactJacobian(double* writeonly %0, double* nocapture %1) {
store double 0.000000e+00, double* %0
%3 = load double, double* %1
%4 = tail call double @sin(double %3)
%5 = getelementptr inbounds double, double* %1, i64 1
%6 = load double, double* %5
%7 = tail call double @cos(double %6)
%8 = getelementptr inbounds double, double* %1, i64 2
%9 = load double, double* %8
%10 = tail call double @cos(double %9)
%11 = fmul double %7, %10
%12 = getelementptr inbounds double, double* %1, i64 3
%13 = load double, double* %12
%14 = tail call double @sin(double %13)
%15 = tail call double @sin(double %6)
%16 = tail call double @cos(double %13)
%17 = tail call double @llvm.fmuladd.f64(double %16, double -4.800000e-01, double -4.500000e-01)
%18 = fmul double %11, 4.800000e-01
%19 = fneg double %15
%20 = fmul double %17, %19
%21 = tail call double @llvm.fmuladd.f64(double %18, double %14, double %20)
%22 = tail call double @cos(double %3)
%23 = tail call double @sin(double %9)
%24 = fmul double %22, %23
%25 = fneg double %4
%26 = fmul double %24, 4.800000e-01
%27 = fneg double %26
%28 = fmul double %14, %27
%29 = tail call double @llvm.fmuladd.f64(double %25, double %21, double %28)
%30 = getelementptr inbounds double, double* %0, i64 1
store double %29, double* %30
%31 = getelementptr inbounds double, double* %0, i64 2
store double 0.000000e+00, double* %31
%32 = fmul double %4, %23
%33 = fmul double %32, -4.800000e-01
%34 = fmul double %14, %33
%35 = tail call double @llvm.fmuladd.f64(double %22, double %21, double %34)
%36 = getelementptr inbounds double, double* %0, i64 3
store double %35, double* %36
%37 = getelementptr inbounds double, double* %0, i64 4
%38 = fmul double %10, %15
%39 = fmul double %38, -4.800000e-01
%40 = fneg double %7
%41 = fmul double %17, %40
%42 = tail call double @llvm.fmuladd.f64(double %39, double %14, double %41)
%43 = fmul double %22, %42
%44 = getelementptr inbounds double, double* %0, i64 7
%45 = bitcast double* %37 to i8*
store double %43, double* %44
%46 = getelementptr inbounds double, double* %0, i64 8
store double 0.000000e+00, double* %46
%47 = fmul double %4, %42
%48 = getelementptr inbounds double, double* %0, i64 9
store double %47, double* %48
%49 = getelementptr inbounds double, double* %0, i64 10
store double 0.000000e+00, double* %49
%50 = fneg double %21
%51 = getelementptr inbounds double, double* %0, i64 11
store double %50, double* %51
%52 = getelementptr inbounds double, double* %0, i64 12
store double 0.000000e+00, double* %52
%53 = fmul double %14, %23
%54 = fmul double %22, -4.800000e-01
%55 = fmul double %7, %54
%56 = fmul double %4, -4.800000e-01
%57 = fmul double %56, %10
%58 = fmul double %57, %14
%59 = tail call double @llvm.fmuladd.f64(double %55, double %53, double %58)
%60 = getelementptr inbounds double, double* %0, i64 13
store double %59, double* %60
%61 = getelementptr inbounds double, double* %0, i64 14
store double 0.000000e+00, double* %61
%62 = fmul double %56, %7
%63 = fmul double %22, 4.800000e-01
%64 = fmul double %10, %63
%65 = fmul double %14, %64
%66 = tail call double @llvm.fmuladd.f64(double %62, double %53, double %65)
%67 = getelementptr inbounds double, double* %0, i64 15
store double %66, double* %67
%68 = getelementptr inbounds double, double* %0, i64 16
store double 0.000000e+00, double* %68
%69 = fmul double %15, 4.800000e-01
%70 = fmul double %69, %23
%71 = fmul double %14, %70
%72 = getelementptr inbounds double, double* %0, i64 17
store double %71, double* %72
%73 = getelementptr inbounds double, double* %0, i64 18
store double 0.000000e+00, double* %73
%74 = fmul double %14, -4.800000e-01
%75 = fmul double %74, %15
%76 = tail call double @llvm.fmuladd.f64(double %18, double %16, double %75)
%77 = fmul double %16, %33
%78 = tail call double @llvm.fmuladd.f64(double %22, double %76, double %77)
%79 = getelementptr inbounds double, double* %0, i64 19
store double %78, double* %79
%80 = getelementptr inbounds double, double* %0, i64 20
store double 0.000000e+00, double* %80
%81 = fmul double %16, %26
%82 = tail call double @llvm.fmuladd.f64(double %4, double %76, double %81)
%83 = getelementptr inbounds double, double* %0, i64 21
store double %82, double* %83
%84 = getelementptr inbounds double, double* %0, i64 22
store double 0.000000e+00, double* %84
%85 = fmul double %7, -4.800000e-01
%86 = fmul double %85, %14
%87 = tail call double @llvm.fmuladd.f64(double %39, double %16, double %86)
%88 = getelementptr inbounds double, double* %0, i64 23
store double %87, double* %88
%89 = getelementptr inbounds double, double* %0, i64 24
%90 = bitcast double* %89 to i8*
ret void
}