#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 */
int /*<<< orphan*/ matrix_multiply3(double **, double **, double **);
int /*<<< orphan*/ printf(char *, ...);
int /*<<< orphan*/ vector_add3(double *, double *, double *);
int /*<<< orphan*/ vector_cross_product3(double *, double *, double *);
double vector_dot_product3(double *, double *);
int /*<<< orphan*/ vector_scale3(double *, double, double *);
main() {
  int i = 0, j = 0;
  double a[3][3] = {{1, 3, 5}, {2, 4, 6}, {9, 7, 8}};
  double b[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
  double c[3][3] = {{48, 57, 66}, {60, 72, 84}, {93, 117, 141}};
  double m[3][3] = {};
  double p = 98;
  double va[3] = {3, 5, 7};
  double vb[3] = {4, 6, 8};
  double vc[3] = {-2, 4, -2};
  double vd[3] = {7, 11, 15};
  double ve[3] = {294, 490, 686};
  double vm[3] = {};
  matrix_multiply3(a, b, m);
  for (; i < 3; ++i) {
    for (j = 0; j < 3; ++j) {
      if (m[i][j] != c[i][j])
        printf("%d,%d: %f != %f\n", i, j, m[i][j], c[i][j]);
      else
        printf("%d,%d: %f == %f\n", i, j, m[i][j], c[i][j]);
    }
  }
  if (p != vector_dot_product3(va, vb)) {
    printf("Vector dot product failed\n");
  } else {
    printf("OK\n");
  }
  vector_cross_product3(va, vb, vm);
  for (i = 0; i < 3; ++i)
    if (vm[i] != vc[i])
      printf("%d: %f != %f\n", i, vm[i], vc[i]);
    else
      printf("%d: %f == %f\n", i, vm[i], vc[i]);
  vector_add3(va, vb, vm);
  for (i = 0; i < 3; ++i)
    if (vm[i] != vd[i])
      printf("%d: %f != %f\n", i, vm[i], vd[i]);
    else
      printf("%d: %f == %f\n", i, vm[i], vd[i]);
  vector_scale3(va, p, vm);
  for (i = 0; i < 3; ++i)
    if (vm[i] != ve[i])
      printf("%d: %f != %f\n", i, vm[i], ve[i]);
    else
      printf("%d: %f == %f\n", i, vm[i], ve[i]);
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x220,%rsp
movl   $0x0,-0x4(%rbp)
movl   $0x0,-0x8(%rbp)
movl   $0x0,-0xc(%rbp)
lea    -0x60(%rbp),%rdi
lea    0xe65(%rip),%rsi
mov    $0x48,%edx
call   1080 <memcpy@plt>
lea    -0xb0(%rbp),%rdi
lea    0xe9d(%rip),%rsi
mov    $0x48,%edx
call   1080 <memcpy@plt>
lea    -0x100(%rbp),%rdi
lea    0xed5(%rip),%rsi
mov    $0x48,%edx
call   1080 <memcpy@plt>
lea    -0x150(%rbp),%rdi
xor    %esi,%esi
mov    $0x48,%edx
call   1060 <memset@plt>
movsd  0xe00(%rip),%xmm0
movsd  %xmm0,-0x158(%rbp)
ff
mov    0xef1(%rip),%rax
mov    %rax,-0x170(%rbp)
mov    0xeeb(%rip),%rax
mov    %rax,-0x168(%rbp)
mov    0xee5(%rip),%rax
mov    %rax,-0x160(%rbp)
mov    0xee7(%rip),%rax
mov    %rax,-0x190(%rbp)
mov    0xee1(%rip),%rax
mov    %rax,-0x188(%rbp)
mov    0xedb(%rip),%rax
mov    %rax,-0x180(%rbp)
mov    0xedd(%rip),%rax
mov    %rax,-0x1b0(%rbp)
mov    0xed7(%rip),%rax
mov    %rax,-0x1a8(%rbp)
mov    0xed1(%rip),%rax
mov    %rax,-0x1a0(%rbp)
mov    0xed3(%rip),%rax
mov    %rax,-0x1d0(%rbp)
mov    0xecd(%rip),%rax
mov    %rax,-0x1c8(%rbp)
mov    0xec7(%rip),%rax
mov    %rax,-0x1c0(%rbp)
mov    0xec9(%rip),%rax
mov    %rax,-0x1f0(%rbp)
mov    0xec3(%rip),%rax
mov    %rax,-0x1e8(%rbp)
mov    0xebd(%rip),%rax
mov    %rax,-0x1e0(%rbp)
lea    -0x210(%rbp),%rdi
xor    %esi,%esi
mov    $0x18,%edx
call   1060 <memset@plt>
lea    -0x60(%rbp),%rdi
lea    -0xb0(%rbp),%rsi
lea    -0x150(%rbp),%rdx
call   1090 <matrix_multiply3@plt>
cmpl   $0x3,-0x8(%rbp)
jge    1425 <main+0x2a5>
movl   $0x0,-0xc(%rbp)
cmpl   $0x3,-0xc(%rbp)
jge    1412 <main+0x292>
movslq -0x8(%rbp),%rcx
lea    -0x150(%rbp),%rax
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movslq -0xc(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movslq -0x8(%rbp),%rcx
lea    -0x100(%rbp),%rax
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movslq -0xc(%rbp),%rcx
ucomisd (%rax,%rcx,8),%xmm0
jne    1366 <main+0x1e6>
jp     1366 <main+0x1e6>
jmp    13b5 <main+0x235>
mov    -0x8(%rbp),%esi
mov    -0xc(%rbp),%edx
movslq -0x8(%rbp),%rcx
lea    -0x150(%rbp),%rax
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movslq -0xc(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movslq -0x8(%rbp),%rcx
lea    -0x100(%rbp),%rax
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movslq -0xc(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
lea    0xdef(%rip),%rdi
mov    $0x2,%al
call   1040 <printf@plt>
jmp    13ff <main+0x27f>
mov    -0x8(%rbp),%esi
mov    -0xc(%rbp),%edx
movslq -0x8(%rbp),%rcx
lea    -0x150(%rbp),%rax
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movslq -0xc(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movslq -0x8(%rbp),%rcx
lea    -0x100(%rbp),%rax
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movslq -0xc(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
lea    0xdb1(%rip),%rdi
mov    $0x2,%al
call   1040 <printf@plt>
jmp    1404 <main+0x284>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1315 <main+0x195>
jmp    1417 <main+0x297>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1304 <main+0x184>
movsd  -0x158(%rbp),%xmm0
ff
movsd  %xmm0,-0x218(%rbp)
ff
lea    -0x170(%rbp),%rdi
lea    -0x190(%rbp),%rsi
call   10a0 <vector_dot_product3@plt>
movaps %xmm0,%xmm1
movsd  -0x218(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jne    1468 <main+0x2e8>
jp     1468 <main+0x2e8>
jmp    147b <main+0x2fb>
lea    0xd4b(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    1489 <main+0x309>
lea    0xd53(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    -0x170(%rbp),%rdi
lea    -0x190(%rbp),%rsi
lea    -0x210(%rbp),%rdx
call   1050 <vector_cross_product3@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x3,-0x8(%rbp)
jge    154d <main+0x3cd>
movslq -0x8(%rbp),%rax
movsd  -0x210(%rbp,%rax,8),%xmm0
ff ff
movslq -0x8(%rbp),%rax
ucomisd -0x1b0(%rbp,%rax,8),%xmm0
ff ff
jne    14df <main+0x35f>
jp     14df <main+0x35f>
jmp    150f <main+0x38f>
mov    -0x8(%rbp),%esi
movslq -0x8(%rbp),%rax
movsd  -0x210(%rbp,%rax,8),%xmm0
ff ff
movslq -0x8(%rbp),%rax
movsd  -0x1b0(%rbp,%rax,8),%xmm1
ff ff
lea    0xc98(%rip),%rdi
mov    $0x2,%al
call   1040 <printf@plt>
jmp    153a <main+0x3ba>
mov    -0x8(%rbp),%esi
movslq -0x8(%rbp),%rax
movsd  -0x210(%rbp,%rax,8),%xmm0
ff ff
movslq -0x8(%rbp),%rax
movsd  -0x1b0(%rbp,%rax,8),%xmm1
ff ff
lea    0xc79(%rip),%rdi
mov    $0x2,%al
call   1040 <printf@plt>
jmp    153f <main+0x3bf>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    14aa <main+0x32a>
lea    -0x170(%rbp),%rdi
lea    -0x190(%rbp),%rsi
lea    -0x210(%rbp),%rdx
call   1070 <vector_add3@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x3,-0x8(%rbp)
jge    1611 <main+0x491>
movslq -0x8(%rbp),%rax
movsd  -0x210(%rbp,%rax,8),%xmm0
ff ff
movslq -0x8(%rbp),%rax
ucomisd -0x1d0(%rbp,%rax,8),%xmm0
ff ff
jne    15a3 <main+0x423>
jp     15a3 <main+0x423>
jmp    15d3 <main+0x453>
mov    -0x8(%rbp),%esi
movslq -0x8(%rbp),%rax
movsd  -0x210(%rbp,%rax,8),%xmm0
ff ff
movslq -0x8(%rbp),%rax
movsd  -0x1d0(%rbp,%rax,8),%xmm1
ff ff
lea    0xbd4(%rip),%rdi
mov    $0x2,%al
call   1040 <printf@plt>
jmp    15fe <main+0x47e>
mov    -0x8(%rbp),%esi
movslq -0x8(%rbp),%rax
movsd  -0x210(%rbp,%rax,8),%xmm0
ff ff
movslq -0x8(%rbp),%rax
movsd  -0x1d0(%rbp,%rax,8),%xmm1
ff ff
lea    0xbb5(%rip),%rdi
mov    $0x2,%al
call   1040 <printf@plt>
jmp    1603 <main+0x483>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    156e <main+0x3ee>
lea    -0x170(%rbp),%rdi
movsd  -0x158(%rbp),%xmm0
ff
lea    -0x210(%rbp),%rsi
call   1030 <vector_scale3@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x3,-0x8(%rbp)
jge    16d6 <main+0x556>
movslq -0x8(%rbp),%rax
movsd  -0x210(%rbp,%rax,8),%xmm0
ff ff
movslq -0x8(%rbp),%rax
ucomisd -0x1f0(%rbp,%rax,8),%xmm0
ff ff
jne    1668 <main+0x4e8>
jp     1668 <main+0x4e8>
jmp    1698 <main+0x518>
mov    -0x8(%rbp),%esi
movslq -0x8(%rbp),%rax
movsd  -0x210(%rbp,%rax,8),%xmm0
ff ff
movslq -0x8(%rbp),%rax
movsd  -0x1f0(%rbp,%rax,8),%xmm1
ff ff
lea    0xb0f(%rip),%rdi
mov    $0x2,%al
call   1040 <printf@plt>
jmp    16c3 <main+0x543>
mov    -0x8(%rbp),%esi
movslq -0x8(%rbp),%rax
movsd  -0x210(%rbp,%rax,8),%xmm0
ff ff
movslq -0x8(%rbp),%rax
movsd  -0x1f0(%rbp,%rax,8),%xmm1
ff ff
lea    0xaf0(%rip),%rdi
mov    $0x2,%al
call   1040 <printf@plt>
jmp    16c8 <main+0x548>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1633 <main+0x4b3>
mov    -0x4(%rbp),%eax
add    $0x220,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %r14
push   %rbx
sub    $0x148,%rsp
mov    0xf4f(%rip),%rax
mov    %rax,0x140(%rsp)
movaps 0xf30(%rip),%xmm0
movaps %xmm0,0x130(%rsp)
movaps 0xf11(%rip),%xmm0
movaps %xmm0,0x120(%rsp)
movaps 0xef2(%rip),%xmm0
movaps %xmm0,0x110(%rsp)
movaps 0xed3(%rip),%xmm0
movaps %xmm0,0x100(%rsp)
mov    0xf54(%rip),%rax
mov    %rax,0xf0(%rsp)
movaps 0xf35(%rip),%xmm0
movaps %xmm0,0xe0(%rsp)
movaps 0xf16(%rip),%xmm0
movaps %xmm0,0xd0(%rsp)
movaps 0xef7(%rip),%xmm0
movaps %xmm0,0xc0(%rsp)
movaps 0xed8(%rip),%xmm0
movaps %xmm0,0xb0(%rsp)
xorps  %xmm0,%xmm0
movaps %xmm0,0x70(%rsp)
movaps %xmm0,0x60(%rsp)
movaps %xmm0,0x50(%rsp)
movaps %xmm0,0x40(%rsp)
movq   $0x0,0x80(%rsp)
mov    0xf06(%rip),%rax
mov    %rax,0x30(%rsp)
movaps 0xeea(%rip),%xmm1
movaps %xmm1,0x20(%rsp)
mov    0xf0e(%rip),%rax
mov    %rax,0xa0(%rsp)
movaps 0xeef(%rip),%xmm1
movaps %xmm1,0x90(%rsp)
movaps %xmm0,(%rsp)
movq   $0x0,0x10(%rsp)
lea    0x100(%rsp),%rdi
lea    0xb0(%rsp),%rsi
lea    0x40(%rsp),%rdx
call   1080 <matrix_multiply3@plt>
movsd  0x40(%rsp),%xmm0
ucomisd 0xd62(%rip),%xmm0
jne    12a2 <main+0x132>
jnp    12b7 <main+0x147>
lea    0xebf(%rip),%rdi
movsd  0xd4f(%rip),%xmm1
xor    %esi,%esi
xor    %edx,%edx
jmp    12ce <main+0x15e>
lea    0xebb(%rip),%rdi
movsd  0xd3a(%rip),%xmm0
xor    %esi,%esi
xor    %edx,%edx
movapd %xmm0,%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0x48(%rsp),%xmm0
ucomisd 0xd25(%rip),%xmm0
jne    12e7 <main+0x177>
jnp    12ff <main+0x18f>
lea    0xe7a(%rip),%rdi
movsd  0xd12(%rip),%xmm1
xor    %esi,%esi
mov    $0x1,%edx
jmp    1319 <main+0x1a9>
lea    0xe73(%rip),%rdi
movsd  0xcfa(%rip),%xmm0
xor    %esi,%esi
mov    $0x1,%edx
movapd %xmm0,%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0x50(%rsp),%xmm0
ucomisd 0xce2(%rip),%xmm0
jne    1332 <main+0x1c2>
jnp    134a <main+0x1da>
lea    0xe2f(%rip),%rdi
movsd  0xccf(%rip),%xmm1
xor    %esi,%esi
mov    $0x2,%edx
jmp    1364 <main+0x1f4>
lea    0xe28(%rip),%rdi
movsd  0xcb7(%rip),%xmm0
xor    %esi,%esi
mov    $0x2,%edx
movapd %xmm0,%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0x58(%rsp),%xmm0
ucomisd 0xc9f(%rip),%xmm0
jne    137d <main+0x20d>
jnp    1395 <main+0x225>
lea    0xde4(%rip),%rdi
movsd  0xc8c(%rip),%xmm1
mov    $0x1,%esi
xor    %edx,%edx
jmp    13af <main+0x23f>
lea    0xddd(%rip),%rdi
movsd  0xc74(%rip),%xmm0
mov    $0x1,%esi
xor    %edx,%edx
movapd %xmm0,%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0x60(%rsp),%xmm0
ucomisd 0xc5c(%rip),%xmm0
jne    13c8 <main+0x258>
jnp    13e3 <main+0x273>
lea    0xd99(%rip),%rdi
movsd  0xc49(%rip),%xmm1
mov    $0x1,%esi
mov    $0x1,%edx
jmp    1400 <main+0x290>
lea    0xd8f(%rip),%rdi
movsd  0xc2e(%rip),%xmm0
mov    $0x1,%esi
mov    $0x1,%edx
movapd %xmm0,%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0x68(%rsp),%xmm0
ucomisd 0xc13(%rip),%xmm0
jne    1419 <main+0x2a9>
jnp    1434 <main+0x2c4>
lea    0xd48(%rip),%rdi
movsd  0xc00(%rip),%xmm1
mov    $0x1,%esi
mov    $0x2,%edx
jmp    1451 <main+0x2e1>
lea    0xd3e(%rip),%rdi
movsd  0xbe5(%rip),%xmm0
mov    $0x1,%esi
mov    $0x2,%edx
movapd %xmm0,%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0x70(%rsp),%xmm0
ucomisd 0xbca(%rip),%xmm0
jne    146a <main+0x2fa>
jnp    1482 <main+0x312>
lea    0xcf7(%rip),%rdi
movsd  0xbb7(%rip),%xmm1
mov    $0x2,%esi
xor    %edx,%edx
jmp    149c <main+0x32c>
lea    0xcf0(%rip),%rdi
movsd  0xb9f(%rip),%xmm0
mov    $0x2,%esi
xor    %edx,%edx
movapd %xmm0,%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0x78(%rsp),%xmm0
ucomisd 0xb87(%rip),%xmm0
jne    14b5 <main+0x345>
jnp    14d0 <main+0x360>
lea    0xcac(%rip),%rdi
movsd  0xb74(%rip),%xmm1
mov    $0x2,%esi
mov    $0x1,%edx
jmp    14ed <main+0x37d>
lea    0xca2(%rip),%rdi
movsd  0xb59(%rip),%xmm0
mov    $0x2,%esi
mov    $0x1,%edx
movapd %xmm0,%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0x80(%rsp),%xmm0
ucomisd 0xb3b(%rip),%xmm0
jne    1509 <main+0x399>
jnp    1524 <main+0x3b4>
lea    0xc58(%rip),%rdi
movsd  0xb28(%rip),%xmm1
mov    $0x2,%esi
mov    $0x2,%edx
jmp    1541 <main+0x3d1>
lea    0xc4e(%rip),%rdi
movsd  0xb0d(%rip),%xmm0
mov    $0x2,%esi
mov    $0x2,%edx
movapd %xmm0,%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
lea    0x20(%rsp),%rbx
lea    0x90(%rsp),%r14
mov    %rbx,%rdi
mov    %r14,%rsi
call   1090 <vector_dot_product3@plt>
ucomisd 0xae0(%rip),%xmm0
lea    0xc1e(%rip),%rax
lea    0xc14(%rip),%rdi
cmovne %rax,%rdi
cmovp  %rax,%rdi
call   1030 <puts@plt>
mov    %rsp,%rdx
mov    %rbx,%rdi
mov    %r14,%rsi
call   1060 <vector_cross_product3@plt>
movsd  (%rsp),%xmm0
ucomisd 0xab2(%rip),%xmm0
jne    15a2 <main+0x432>
jnp    15b5 <main+0x445>
lea    0xbc2(%rip),%rdi
movsd  0xa9f(%rip),%xmm1
xor    %esi,%esi
jmp    15ca <main+0x45a>
lea    0xbc0(%rip),%rdi
movsd  0xa8c(%rip),%xmm0
xor    %esi,%esi
movapd %xmm0,%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0x8(%rsp),%xmm0
ucomisd 0xa79(%rip),%xmm0
jne    15e3 <main+0x473>
jnp    15f9 <main+0x489>
lea    0xb81(%rip),%rdi
movsd  0xa66(%rip),%xmm1
mov    $0x1,%esi
jmp    1611 <main+0x4a1>
lea    0xb7c(%rip),%rdi
movsd  0xa50(%rip),%xmm0
mov    $0x1,%esi
movapd %xmm0,%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0x10(%rsp),%xmm0
ucomisd 0xa2a(%rip),%xmm0
jne    162a <main+0x4ba>
jnp    1640 <main+0x4d0>
lea    0xb3a(%rip),%rdi
movsd  0xa17(%rip),%xmm1
mov    $0x2,%esi
jmp    1658 <main+0x4e8>
lea    0xb35(%rip),%rdi
movsd  0xa01(%rip),%xmm0
mov    $0x2,%esi
movapd %xmm0,%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
lea    0x20(%rsp),%rdi
lea    0x90(%rsp),%rsi
mov    %rsp,%rdx
call   1070 <vector_add3@plt>
movsd  (%rsp),%xmm0
ucomisd 0x9df(%rip),%xmm0
jne    1685 <main+0x515>
jnp    1698 <main+0x528>
lea    0xadf(%rip),%rdi
movsd  0x9cc(%rip),%xmm1
xor    %esi,%esi
jmp    16ad <main+0x53d>
lea    0xadd(%rip),%rdi
movsd  0x9b9(%rip),%xmm0
xor    %esi,%esi
movapd %xmm0,%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0x8(%rsp),%xmm0
ucomisd 0x9a6(%rip),%xmm0
jne    16c6 <main+0x556>
jnp    16dc <main+0x56c>
lea    0xa9e(%rip),%rdi
movsd  0x993(%rip),%xmm1
mov    $0x1,%esi
jmp    16f4 <main+0x584>
lea    0xa99(%rip),%rdi
movsd  0x97d(%rip),%xmm0
mov    $0x1,%esi
movapd %xmm0,%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0x10(%rsp),%xmm0
ucomisd 0x967(%rip),%xmm0
jne    170d <main+0x59d>
jnp    1723 <main+0x5b3>
lea    0xa57(%rip),%rdi
movsd  0x954(%rip),%xmm1
mov    $0x2,%esi
jmp    173b <main+0x5cb>
lea    0xa52(%rip),%rdi
movsd  0x93e(%rip),%xmm0
mov    $0x2,%esi
movapd %xmm0,%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
lea    0x20(%rsp),%rdi
movsd  0x8f9(%rip),%xmm0
mov    %rsp,%rsi
call   1040 <vector_scale3@plt>
movsd  (%rsp),%xmm0
ucomisd 0x914(%rip),%xmm0
jne    1768 <main+0x5f8>
jnp    177b <main+0x60b>
lea    0x9fc(%rip),%rdi
movsd  0x901(%rip),%xmm1
xor    %esi,%esi
jmp    1790 <main+0x620>
lea    0x9fa(%rip),%rdi
movsd  0x8ee(%rip),%xmm0
xor    %esi,%esi
movapd %xmm0,%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0x8(%rsp),%xmm0
ucomisd 0x8db(%rip),%xmm0
jne    17a9 <main+0x639>
jnp    17bf <main+0x64f>
lea    0x9bb(%rip),%rdi
movsd  0x8c8(%rip),%xmm1
mov    $0x1,%esi
jmp    17d7 <main+0x667>
lea    0x9b6(%rip),%rdi
movsd  0x8b2(%rip),%xmm0
mov    $0x1,%esi
movapd %xmm0,%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0x10(%rsp),%xmm0
ucomisd 0x89c(%rip),%xmm0
jne    17f0 <main+0x680>
jnp    1806 <main+0x696>
lea    0x974(%rip),%rdi
movsd  0x889(%rip),%xmm1
mov    $0x2,%esi
jmp    181e <main+0x6ae>
lea    0x96f(%rip),%rdi
movsd  0x873(%rip),%xmm0
mov    $0x2,%esi
movapd %xmm0,%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
xor    %eax,%eax
add    $0x148,%rsp
pop    %rbx
pop    %r14
ret

LLVM IR (-O0):
@__const.main.a = [3 x [3 x double]] [[3 x double] [double 1.000000e+00, double 3.000000e+00, double 5.000000e+00], [3 x double] [double 2.000000e+00, double 4.000000e+00, double 6.000000e+00], [3 x double] [double 9.000000e+00, double 7.000000e+00, double 8.000000e+00]]
@__const.main.b = [3 x [3 x double]] [[3 x double] [double 1.000000e+00, double 2.000000e+00, double 3.000000e+00], [3 x double] [double 4.000000e+00, double 5.000000e+00, double 6.000000e+00], [3 x double] [double 7.000000e+00, double 8.000000e+00, double 9.000000e+00]]
@__const.main.c = [3 x [3 x double]] [[3 x double] [double 4.800000e+01, double 5.700000e+01, double 6.600000e+01], [3 x double] [double 6.000000e+01, double 7.200000e+01, double 8.400000e+01], [3 x double] [double 9.300000e+01, double 1.170000e+02, double 1.410000e+02]]
@__const.main.va = [3 x double] [double 3.000000e+00, double 5.000000e+00, double 7.000000e+00]
@__const.main.vb = [3 x double] [double 4.000000e+00, double 6.000000e+00, double 8.000000e+00]
@__const.main.vc = [3 x double] [double -2.000000e+00, double 4.000000e+00, double -2.000000e+00]
@__const.main.vd = [3 x double] [double 7.000000e+00, double 1.100000e+01, double 1.500000e+01]
@__const.main.ve = [3 x double] [double 2.940000e+02, double 4.900000e+02, double 6.860000e+02]
@.str = [17 x i8] c"%d,%d: %f != %f\0A\00"
@.str.1 = [17 x i8] c"%d,%d: %f == %f\0A\00"
@.str.2 = [27 x i8] c"Vector dot product failed\0A\00"
@.str.3 = [4 x i8] c"OK\0A\00"
@.str.4 = [14 x i8] c"%d: %f != %f\0A\00"
@.str.5 = [14 x i8] c"%d: %f == %f\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
%4 = alloca [3 x [3 x double]]
%5 = alloca [3 x [3 x double]]
%6 = alloca [3 x [3 x double]]
%7 = alloca [3 x [3 x double]]
%8 = alloca double
%9 = alloca [3 x double]
%10 = alloca [3 x double]
%11 = alloca [3 x double]
%12 = alloca [3 x double]
%13 = alloca [3 x double]
%14 = alloca [3 x double]
store i32 0, i32* %1
store i32 0, i32* %2
store i32 0, i32* %3
%15 = bitcast [3 x [3 x double]]* %4 to i8*
%16 = bitcast [3 x [3 x double]]* %5 to i8*
%17 = bitcast [3 x [3 x double]]* %6 to i8*
%18 = bitcast [3 x [3 x double]]* %7 to i8*
store double 9.800000e+01, double* %8
%19 = bitcast [3 x double]* %9 to i8*
%20 = bitcast [3 x double]* %10 to i8*
%21 = bitcast [3 x double]* %11 to i8*
%22 = bitcast [3 x double]* %12 to i8*
%23 = bitcast [3 x double]* %13 to i8*
%24 = bitcast [3 x double]* %14 to i8*
%25 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %4, i64 0, i64 0
%26 = bitcast [3 x double]* %25 to double**
%27 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %5, i64 0, i64 0
%28 = bitcast [3 x double]* %27 to double**
%29 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %7, i64 0, i64 0
%30 = bitcast [3 x double]* %29 to double**
%31 = call i32 @matrix_multiply3(double** %26, double** %28, double** %30)
br label %32
32: ; preds = %96, %0
%33 = load i32, i32* %2
%34 = icmp slt i32 %33, 3
br i1 %34, label %35, label %99
35: ; preds = %32
store i32 0, i32* %3
br label %36
36: ; preds = %92, %35
%37 = load i32, i32* %3
%38 = icmp slt i32 %37, 3
br i1 %38, label %39, label %95
39: ; preds = %36
%40 = load i32, i32* %2
%41 = sext i32 %40 to i64
%42 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %7, i64 0, i64 %41
%43 = load i32, i32* %3
%44 = sext i32 %43 to i64
%45 = getelementptr inbounds [3 x double], [3 x double]* %42, i64 0, i64 %44
%46 = load double, double* %45
%47 = load i32, i32* %2
%48 = sext i32 %47 to i64
%49 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %6, i64 0, i64 %48
%50 = load i32, i32* %3
%51 = sext i32 %50 to i64
%52 = getelementptr inbounds [3 x double], [3 x double]* %49, i64 0, i64 %51
%53 = load double, double* %52
%54 = fcmp une double %46, %53
br i1 %54, label %55, label %73
55: ; preds = %39
%56 = load i32, i32* %2
%57 = load i32, i32* %3
%58 = load i32, i32* %2
%59 = sext i32 %58 to i64
%60 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %7, i64 0, i64 %59
%61 = load i32, i32* %3
%62 = sext i32 %61 to i64
%63 = getelementptr inbounds [3 x double], [3 x double]* %60, i64 0, i64 %62
%64 = load double, double* %63
%65 = load i32, i32* %2
%66 = sext i32 %65 to i64
%67 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %6, i64 0, i64 %66
%68 = load i32, i32* %3
%69 = sext i32 %68 to i64
%70 = getelementptr inbounds [3 x double], [3 x double]* %67, i64 0, i64 %69
%71 = load double, double* %70
%72 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 0), i32 %56, i32 %57, double %64, double %71)
br label %91
73: ; preds = %39
%74 = load i32, i32* %2
%75 = load i32, i32* %3
%76 = load i32, i32* %2
%77 = sext i32 %76 to i64
%78 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %7, i64 0, i64 %77
%79 = load i32, i32* %3
%80 = sext i32 %79 to i64
%81 = getelementptr inbounds [3 x double], [3 x double]* %78, i64 0, i64 %80
%82 = load double, double* %81
%83 = load i32, i32* %2
%84 = sext i32 %83 to i64
%85 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %6, i64 0, i64 %84
%86 = load i32, i32* %3
%87 = sext i32 %86 to i64
%88 = getelementptr inbounds [3 x double], [3 x double]* %85, i64 0, i64 %87
%89 = load double, double* %88
%90 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.1, i64 0, i64 0), i32 %74, i32 %75, double %82, double %89)
br label %91
91: ; preds = %73, %55
br label %92
92: ; preds = %91
%93 = load i32, i32* %3
%94 = add nsw i32 %93, 1
store i32 %94, i32* %3
br label %36
95: ; preds = %36
br label %96
96: ; preds = %95
%97 = load i32, i32* %2
%98 = add nsw i32 %97, 1
store i32 %98, i32* %2
br label %32
99: ; preds = %32
%100 = load double, double* %8
%101 = getelementptr inbounds [3 x double], [3 x double]* %9, i64 0, i64 0
%102 = getelementptr inbounds [3 x double], [3 x double]* %10, i64 0, i64 0
%103 = call double @vector_dot_product3(double* %101, double* %102)
%104 = fcmp une double %100, %103
br i1 %104, label %105, label %107
105: ; preds = %99
%106 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.2, i64 0, i64 0))
br label %109
107: ; preds = %99
%108 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0))
br label %109
109: ; preds = %107, %105
%110 = getelementptr inbounds [3 x double], [3 x double]* %9, i64 0, i64 0
%111 = getelementptr inbounds [3 x double], [3 x double]* %10, i64 0, i64 0
%112 = getelementptr inbounds [3 x double], [3 x double]* %14, i64 0, i64 0
%113 = call i32 @vector_cross_product3(double* %110, double* %111, double* %112)
store i32 0, i32* %2
br label %114
114: ; preds = %150, %109
%115 = load i32, i32* %2
%116 = icmp slt i32 %115, 3
br i1 %116, label %117, label %153
117: ; preds = %114
%118 = load i32, i32* %2
%119 = sext i32 %118 to i64
%120 = getelementptr inbounds [3 x double], [3 x double]* %14, i64 0, i64 %119
%121 = load double, double* %120
%122 = load i32, i32* %2
%123 = sext i32 %122 to i64
%124 = getelementptr inbounds [3 x double], [3 x double]* %11, i64 0, i64 %123
%125 = load double, double* %124
%126 = fcmp une double %121, %125
br i1 %126, label %127, label %138
127: ; preds = %117
%128 = load i32, i32* %2
%129 = load i32, i32* %2
%130 = sext i32 %129 to i64
%131 = getelementptr inbounds [3 x double], [3 x double]* %14, i64 0, i64 %130
%132 = load double, double* %131
%133 = load i32, i32* %2
%134 = sext i32 %133 to i64
%135 = getelementptr inbounds [3 x double], [3 x double]* %11, i64 0, i64 %134
%136 = load double, double* %135
%137 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.4, i64 0, i64 0), i32 %128, double %132, double %136)
br label %149
138: ; preds = %117
%139 = load i32, i32* %2
%140 = load i32, i32* %2
%141 = sext i32 %140 to i64
%142 = getelementptr inbounds [3 x double], [3 x double]* %14, i64 0, i64 %141
%143 = load double, double* %142
%144 = load i32, i32* %2
%145 = sext i32 %144 to i64
%146 = getelementptr inbounds [3 x double], [3 x double]* %11, i64 0, i64 %145
%147 = load double, double* %146
%148 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.5, i64 0, i64 0), i32 %139, double %143, double %147)
br label %149
149: ; preds = %138, %127
br label %150
150: ; preds = %149
%151 = load i32, i32* %2
%152 = add nsw i32 %151, 1
store i32 %152, i32* %2
br label %114
153: ; preds = %114
%154 = getelementptr inbounds [3 x double], [3 x double]* %9, i64 0, i64 0
%155 = getelementptr inbounds [3 x double], [3 x double]* %10, i64 0, i64 0
%156 = getelementptr inbounds [3 x double], [3 x double]* %14, i64 0, i64 0
%157 = call i32 @vector_add3(double* %154, double* %155, double* %156)
store i32 0, i32* %2
br label %158
158: ; preds = %194, %153
%159 = load i32, i32* %2
%160 = icmp slt i32 %159, 3
br i1 %160, label %161, label %197
161: ; preds = %158
%162 = load i32, i32* %2
%163 = sext i32 %162 to i64
%164 = getelementptr inbounds [3 x double], [3 x double]* %14, i64 0, i64 %163
%165 = load double, double* %164
%166 = load i32, i32* %2
%167 = sext i32 %166 to i64
%168 = getelementptr inbounds [3 x double], [3 x double]* %12, i64 0, i64 %167
%169 = load double, double* %168
%170 = fcmp une double %165, %169
br i1 %170, label %171, label %182
171: ; preds = %161
%172 = load i32, i32* %2
%173 = load i32, i32* %2
%174 = sext i32 %173 to i64
%175 = getelementptr inbounds [3 x double], [3 x double]* %14, i64 0, i64 %174
%176 = load double, double* %175
%177 = load i32, i32* %2
%178 = sext i32 %177 to i64
%179 = getelementptr inbounds [3 x double], [3 x double]* %12, i64 0, i64 %178
%180 = load double, double* %179
%181 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.4, i64 0, i64 0), i32 %172, double %176, double %180)
br label %193
182: ; preds = %161
%183 = load i32, i32* %2
%184 = load i32, i32* %2
%185 = sext i32 %184 to i64
%186 = getelementptr inbounds [3 x double], [3 x double]* %14, i64 0, i64 %185
%187 = load double, double* %186
%188 = load i32, i32* %2
%189 = sext i32 %188 to i64
%190 = getelementptr inbounds [3 x double], [3 x double]* %12, i64 0, i64 %189
%191 = load double, double* %190
%192 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.5, i64 0, i64 0), i32 %183, double %187, double %191)
br label %193
193: ; preds = %182, %171
br label %194
194: ; preds = %193
%195 = load i32, i32* %2
%196 = add nsw i32 %195, 1
store i32 %196, i32* %2
br label %158
197: ; preds = %158
%198 = getelementptr inbounds [3 x double], [3 x double]* %9, i64 0, i64 0
%199 = load double, double* %8
%200 = getelementptr inbounds [3 x double], [3 x double]* %14, i64 0, i64 0
%201 = call i32 @vector_scale3(double* %198, double %199, double* %200)
store i32 0, i32* %2
br label %202
202: ; preds = %238, %197
%203 = load i32, i32* %2
%204 = icmp slt i32 %203, 3
br i1 %204, label %205, label %241
205: ; preds = %202
%206 = load i32, i32* %2
%207 = sext i32 %206 to i64
%208 = getelementptr inbounds [3 x double], [3 x double]* %14, i64 0, i64 %207
%209 = load double, double* %208
%210 = load i32, i32* %2
%211 = sext i32 %210 to i64
%212 = getelementptr inbounds [3 x double], [3 x double]* %13, i64 0, i64 %211
%213 = load double, double* %212
%214 = fcmp une double %209, %213
br i1 %214, label %215, label %226
215: ; preds = %205
%216 = load i32, i32* %2
%217 = load i32, i32* %2
%218 = sext i32 %217 to i64
%219 = getelementptr inbounds [3 x double], [3 x double]* %14, i64 0, i64 %218
%220 = load double, double* %219
%221 = load i32, i32* %2
%222 = sext i32 %221 to i64
%223 = getelementptr inbounds [3 x double], [3 x double]* %13, i64 0, i64 %222
%224 = load double, double* %223
%225 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.4, i64 0, i64 0), i32 %216, double %220, double %224)
br label %237
226: ; preds = %205
%227 = load i32, i32* %2
%228 = load i32, i32* %2
%229 = sext i32 %228 to i64
%230 = getelementptr inbounds [3 x double], [3 x double]* %14, i64 0, i64 %229
%231 = load double, double* %230
%232 = load i32, i32* %2
%233 = sext i32 %232 to i64
%234 = getelementptr inbounds [3 x double], [3 x double]* %13, i64 0, i64 %233
%235 = load double, double* %234
%236 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.5, i64 0, i64 0), i32 %227, double %231, double %235)
br label %237
237: ; preds = %226, %215
br label %238
238: ; preds = %237
%239 = load i32, i32* %2
%240 = add nsw i32 %239, 1
store i32 %240, i32* %2
br label %202
241: ; preds = %202
%242 = load i32, i32* %1
ret i32 %242
}

LLVM IR (-O2):
@__const.main.a = [3 x [3 x double]] [[3 x double] [double 1.000000e+00, double 3.000000e+00, double 5.000000e+00], [3 x double] [double 2.000000e+00, double 4.000000e+00, double 6.000000e+00], [3 x double] [double 9.000000e+00, double 7.000000e+00, double 8.000000e+00]]
@__const.main.b = [3 x [3 x double]] [[3 x double] [double 1.000000e+00, double 2.000000e+00, double 3.000000e+00], [3 x double] [double 4.000000e+00, double 5.000000e+00, double 6.000000e+00], [3 x double] [double 7.000000e+00, double 8.000000e+00, double 9.000000e+00]]
@__const.main.va = [3 x double] [double 3.000000e+00, double 5.000000e+00, double 7.000000e+00]
@__const.main.vb = [3 x double] [double 4.000000e+00, double 6.000000e+00, double 8.000000e+00]
@.str = [17 x i8] c"%d,%d: %f != %f\0A\00"
@.str.1 = [17 x i8] c"%d,%d: %f == %f\0A\00"
@.str.4 = [14 x i8] c"%d: %f != %f\0A\00"
@.str.5 = [14 x i8] c"%d: %f == %f\0A\00"
@str = [3 x i8] c"OK\00"
@str.6 = [26 x i8] c"Vector dot product failed\00"
define i32 @main() {
%1 = alloca [3 x [3 x double]]
%2 = alloca [3 x [3 x double]]
%3 = alloca [3 x [3 x double]]
%4 = alloca [3 x double]
%5 = alloca [3 x double]
%6 = alloca [3 x double]
%7 = bitcast [3 x [3 x double]]* %1 to i8*
%8 = bitcast [3 x [3 x double]]* %2 to i8*
%9 = bitcast [3 x [3 x double]]* %3 to i8*
%10 = bitcast [3 x double]* %4 to i8*
%11 = bitcast [3 x double]* %5 to i8*
%12 = bitcast [3 x double]* %6 to i8*
%13 = bitcast [3 x [3 x double]]* %1 to double**
%14 = bitcast [3 x [3 x double]]* %2 to double**
%15 = bitcast [3 x [3 x double]]* %3 to double**
%16 = call i32 @matrix_multiply3(double** %13, double** %14, double** %15)
%17 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %3, i64 0, i64 0, i64 0
%18 = load double, double* %17
%19 = fcmp une double %18, 4.800000e+01
br i1 %19, label %20, label %22
20: ; preds = %0
%21 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 0), i32 0, i32 0, double %18, double 4.800000e+01)
br label %24
22: ; preds = %0
%23 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str.1, i64 0, i64 0), i32 0, i32 0, double 4.800000e+01, double 4.800000e+01)
br label %24
24: ; preds = %20, %22
%25 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %3, i64 0, i64 0, i64 1
%26 = load double, double* %25
%27 = fcmp une double %26, 5.700000e+01
br i1 %27, label %30, label %28
28: ; preds = %24
%29 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str.1, i64 0, i64 0), i32 0, i32 1, double 5.700000e+01, double 5.700000e+01)
br label %32
30: ; preds = %24
%31 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 0), i32 0, i32 1, double %26, double 5.700000e+01)
br label %32
32: ; preds = %30, %28
%33 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %3, i64 0, i64 0, i64 2
%34 = load double, double* %33
%35 = fcmp une double %34, 6.600000e+01
br i1 %35, label %38, label %36
36: ; preds = %32
%37 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str.1, i64 0, i64 0), i32 0, i32 2, double 6.600000e+01, double 6.600000e+01)
br label %40
38: ; preds = %32
%39 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 0), i32 0, i32 2, double %34, double 6.600000e+01)
br label %40
40: ; preds = %38, %36
%41 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %3, i64 0, i64 1, i64 0
%42 = load double, double* %41
%43 = fcmp une double %42, 6.000000e+01
br i1 %43, label %46, label %44
44: ; preds = %40
%45 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str.1, i64 0, i64 0), i32 1, i32 0, double 6.000000e+01, double 6.000000e+01)
br label %48
46: ; preds = %40
%47 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 0), i32 1, i32 0, double %42, double 6.000000e+01)
br label %48
48: ; preds = %46, %44
%49 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %3, i64 0, i64 1, i64 1
%50 = load double, double* %49
%51 = fcmp une double %50, 7.200000e+01
br i1 %51, label %54, label %52
52: ; preds = %48
%53 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str.1, i64 0, i64 0), i32 1, i32 1, double 7.200000e+01, double 7.200000e+01)
br label %56
54: ; preds = %48
%55 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 0), i32 1, i32 1, double %50, double 7.200000e+01)
br label %56
56: ; preds = %54, %52
%57 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %3, i64 0, i64 1, i64 2
%58 = load double, double* %57
%59 = fcmp une double %58, 8.400000e+01
br i1 %59, label %62, label %60
60: ; preds = %56
%61 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str.1, i64 0, i64 0), i32 1, i32 2, double 8.400000e+01, double 8.400000e+01)
br label %64
62: ; preds = %56
%63 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 0), i32 1, i32 2, double %58, double 8.400000e+01)
br label %64
64: ; preds = %62, %60
%65 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %3, i64 0, i64 2, i64 0
%66 = load double, double* %65
%67 = fcmp une double %66, 9.300000e+01
br i1 %67, label %70, label %68
68: ; preds = %64
%69 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str.1, i64 0, i64 0), i32 2, i32 0, double 9.300000e+01, double 9.300000e+01)
br label %72
70: ; preds = %64
%71 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 0), i32 2, i32 0, double %66, double 9.300000e+01)
br label %72
72: ; preds = %70, %68
%73 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %3, i64 0, i64 2, i64 1
%74 = load double, double* %73
%75 = fcmp une double %74, 1.170000e+02
br i1 %75, label %78, label %76
76: ; preds = %72
%77 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str.1, i64 0, i64 0), i32 2, i32 1, double 1.170000e+02, double 1.170000e+02)
br label %80
78: ; preds = %72
%79 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 0), i32 2, i32 1, double %74, double 1.170000e+02)
br label %80
80: ; preds = %78, %76
%81 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %3, i64 0, i64 2, i64 2
%82 = load double, double* %81
%83 = fcmp une double %82, 1.410000e+02
br i1 %83, label %86, label %84
84: ; preds = %80
%85 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str.1, i64 0, i64 0), i32 2, i32 2, double 1.410000e+02, double 1.410000e+02)
br label %88
86: ; preds = %80
%87 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 0), i32 2, i32 2, double %82, double 1.410000e+02)
br label %88
88: ; preds = %86, %84
%89 = getelementptr inbounds [3 x double], [3 x double]* %4, i64 0, i64 0
%90 = getelementptr inbounds [3 x double], [3 x double]* %5, i64 0, i64 0
%91 = call double @vector_dot_product3(double* %89, double* %90)
%92 = fcmp une double %91, 9.800000e+01
%93 = select i1 %92, i8* getelementptr inbounds ([26 x i8], [26 x i8]* @str.6, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @str, i64 0, i64 0)
%94 = call i32 @puts(i8* dereferenceable(1) %93)
%95 = getelementptr inbounds [3 x double], [3 x double]* %6, i64 0, i64 0
%96 = call i32 @vector_cross_product3(double* %89, double* %90, double* %95)
%97 = load double, double* %95
%98 = fcmp une double %97, -2.000000e+00
br i1 %98, label %99, label %101
99: ; preds = %88
%100 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.4, i64 0, i64 0), i32 0, double %97, double -2.000000e+00)
br label %103
101: ; preds = %88
%102 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.5, i64 0, i64 0), i32 0, double -2.000000e+00, double -2.000000e+00)
br label %103
103: ; preds = %99, %101
%104 = getelementptr inbounds [3 x double], [3 x double]* %6, i64 0, i64 1
%105 = load double, double* %104
%106 = fcmp une double %105, 4.000000e+00
br i1 %106, label %109, label %107
107: ; preds = %103
%108 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.5, i64 0, i64 0), i32 1, double 4.000000e+00, double 4.000000e+00)
br label %111
109: ; preds = %103
%110 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.4, i64 0, i64 0), i32 1, double %105, double 4.000000e+00)
br label %111
111: ; preds = %109, %107
%112 = getelementptr inbounds [3 x double], [3 x double]* %6, i64 0, i64 2
%113 = load double, double* %112
%114 = fcmp une double %113, -2.000000e+00
br i1 %114, label %117, label %115
115: ; preds = %111
%116 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.5, i64 0, i64 0), i32 2, double -2.000000e+00, double -2.000000e+00)
br label %119
117: ; preds = %111
%118 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.4, i64 0, i64 0), i32 2, double %113, double -2.000000e+00)
br label %119
119: ; preds = %117, %115
%120 = call i32 @vector_add3(double* %89, double* %90, double* %95)
%121 = load double, double* %95
%122 = fcmp une double %121, 7.000000e+00
br i1 %122, label %123, label %125
123: ; preds = %119
%124 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.4, i64 0, i64 0), i32 0, double %121, double 7.000000e+00)
br label %127
125: ; preds = %119
%126 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.5, i64 0, i64 0), i32 0, double 7.000000e+00, double 7.000000e+00)
br label %127
127: ; preds = %123, %125
%128 = load double, double* %104
%129 = fcmp une double %128, 1.100000e+01
br i1 %129, label %132, label %130
130: ; preds = %127
%131 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.5, i64 0, i64 0), i32 1, double 1.100000e+01, double 1.100000e+01)
br label %134
132: ; preds = %127
%133 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.4, i64 0, i64 0), i32 1, double %128, double 1.100000e+01)
br label %134
134: ; preds = %132, %130
%135 = load double, double* %112
%136 = fcmp une double %135, 1.500000e+01
br i1 %136, label %139, label %137
137: ; preds = %134
%138 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.5, i64 0, i64 0), i32 2, double 1.500000e+01, double 1.500000e+01)
br label %141
139: ; preds = %134
%140 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.4, i64 0, i64 0), i32 2, double %135, double 1.500000e+01)
br label %141
141: ; preds = %139, %137
%142 = call i32 @vector_scale3(double* %89, double 9.800000e+01, double* %95)
%143 = load double, double* %95
%144 = fcmp une double %143, 2.940000e+02
br i1 %144, label %145, label %147
145: ; preds = %141
%146 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.4, i64 0, i64 0), i32 0, double %143, double 2.940000e+02)
br label %149
147: ; preds = %141
%148 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.5, i64 0, i64 0), i32 0, double 2.940000e+02, double 2.940000e+02)
br label %149
149: ; preds = %145, %147
%150 = load double, double* %104
%151 = fcmp une double %150, 4.900000e+02
br i1 %151, label %154, label %152
152: ; preds = %149
%153 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.5, i64 0, i64 0), i32 1, double 4.900000e+02, double 4.900000e+02)
br label %156
154: ; preds = %149
%155 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.4, i64 0, i64 0), i32 1, double %150, double 4.900000e+02)
br label %156
156: ; preds = %154, %152
%157 = load double, double* %112
%158 = fcmp une double %157, 6.860000e+02
br i1 %158, label %161, label %159
159: ; preds = %156
%160 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.5, i64 0, i64 0), i32 2, double 6.860000e+02, double 6.860000e+02)
br label %163
161: ; preds = %156
%162 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.4, i64 0, i64 0), i32 2, double %157, double 6.860000e+02)
br label %163
163: ; preds = %161, %159
ret i32 0
}