#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*/ getD(int, int, double *, double *);
int /*<<< orphan*/ getInts(int, int *, double *, int *, double *, double *,
                           double *, int *, int *, int *, double *, double *,
                           double *, double *);
int /*<<< orphan*/ getJ(int, double *, double *, double *);
int /*<<< orphan*/ getK(int, double *, double *, double *);
int /*<<< orphan*/ getS(int, int *, double *, int *, double *, double *,
                        double *, int *, int *, int *, double *, double *,
                        double *, double *);
int /*<<< orphan*/ getT(int, int *, double *, int *, double *, double *,
                        double *, int *, int *, int *, double *, double *,
                        double *, double *);
int /*<<< orphan*/ getV(int, int *, double *, int *, double *, double *,
                        double *, int *, int *, int *, double *, double *,
                        double *, int, int *, double *, double *, double *,
                        double *);
int gjacobi(double *, double *, int, double *, double *, double *, double *);
int /*<<< orphan*/ printf(char *, int, double, double, double, double, double);
int main() {
  int i = 0;
  int nat = 2;
  int nbf = 10;
  int nocc = 1, info;
  int iter, maxiter = 5;
  double h[100], S[100], T[100], V[100], Ints[1540];
  double D[100], J[100], K[100];
  double orbe[10], orbs[100], temp[100];
  double temp1[10], temp2[10];
  double H[100];
  double energy, eone, ej, ek;
  double enuke = 1.428571;
  int atno[] = {
      1,
      1,
  };
  double x[] = {
      0.0,
      0.0,
  };
  double y[] = {
      0.0,
      0.0,
  };
  double z[] = {
      -0.35,
      0.35,
  };
  double xcenter[] = {
      0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  };
  double ycenter[] = {
      0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  };
  double zcenter[] = {
      -0.35, -0.35, -0.35, -0.35, -0.35, 0.35, 0.35, 0.35, 0.35, 0.35,
  };
  int lpower[] = {
      0, 0, 1, 0, 0, 0, 0, 1, 0, 0,
  };
  int mpower[] = {
      0, 0, 0, 1, 0, 0, 0, 0, 1, 0,
  };
  int npower[] = {
      0, 0, 0, 0, 1, 0, 0, 0, 0, 1,
  };
  double normc[] = {
      1.00000010954, 1.0, 1.0, 1.0, 1.0, 1.00000010954, 1.0, 1.0, 1.0, 1.0,
  };
  int istart[] = {
      0, 3, 4, 5, 6, 7, 10, 11, 12, 13,
  };
  int nprim[] = {
      3, 1, 1, 1, 1, 3, 1, 1, 1, 1,
  };
  double alpha[] = {
      18.731137, 2.825394, 0.640122, 0.161278, 1.1, 1.1, 1.1,
      18.731137, 2.825394, 0.640122, 0.161278, 1.1, 1.1, 1.1,
  };
  double coef[] = {
      0.033495, 0.234727, 0.813757, 1.0, 1.0, 1.0, 1.0,
      0.033495, 0.234727, 0.813757, 1.0, 1.0, 1.0, 1.0,
  };
  double normp[] = {
      6.4170171128,  1.55317129726,  0.510043429599, 0.181380852627,
      1.60576114265, 1.60576114265,  1.60576114265,  6.4170171128,
      1.55317129726, 0.510043429599, 0.181380852627, 1.60576114265,
      1.60576114265, 1.60576114265,
  };
  getS(nbf, nprim, normc, istart, xcenter, ycenter, zcenter, lpower, mpower,
       npower, normp, coef, alpha, S);
  getT(nbf, nprim, normc, istart, xcenter, ycenter, zcenter, lpower, mpower,
       npower, normp, coef, alpha, T);
  getV(nbf, nprim, normc, istart, xcenter, ycenter, zcenter, lpower, mpower,
       npower, normp, coef, alpha, nat, atno, x, y, z, V);
  getInts(nbf, nprim, normc, istart, xcenter, ycenter, zcenter, lpower, mpower,
          npower, normp, coef, alpha, Ints);
  for (i = 0; i < nbf * nbf; i++)
    h[i] = T[i] + V[i];
  getD(nbf, nocc, orbs, D);
  for (i = 0; i < nbf * nbf; i++) {
    orbs[i] = h[i];
    H[i] = h[i];
    temp[i] = S[i];
  }
  info = gjacobi(H, temp, nbf, orbe, orbs, temp1, temp2);
  for (iter = 0; iter < maxiter; iter++) {
    getD(nbf, nocc, orbs, D);
    getJ(nbf, D, Ints, J);
    getK(nbf, D, Ints, K);
    for (i = 0; i < nbf * nbf; i++) {
      H[i] = h[i] + 2 * J[i] - K[i];
      temp[i] = S[i];
    };
    info = gjacobi(H, temp, nbf, orbe, orbs, temp1, temp2);
    eone = 0.;
    for (i = 0; i < nbf * nbf; i++)
      eone += h[i] * D[i];
    ej = 0.;
    for (i = 0; i < nbf * nbf; i++)
      ej += D[i] * J[i];
    ek = 0.;
    for (i = 0; i < nbf * nbf; i++)
      ek += D[i] * K[i];
    energy = enuke + 2 * eone + 2 * ej - ek;
    printf("%d %f %f %f %f %f\n", iter, energy, enuke, eone, ej, ek);
  }
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x54f8,%rsp
movl   $0x0,-0x2c(%rbp)
movl   $0x0,-0x30(%rbp)
movl   $0x2,-0x34(%rbp)
movl   $0xa,-0x38(%rbp)
movl   $0x1,-0x3c(%rbp)
movl   $0x5,-0x48(%rbp)
movsd  0xe0a(%rip),%xmm0
movsd  %xmm0,-0x50c8(%rbp)
ff
mov    0xe03(%rip),%rax
mov    %rax,-0x50d0(%rbp)
lea    -0x50e0(%rbp),%rdi
xor    %esi,%esi
mov    $0x10,%edx
call   1080 <memset@plt>
lea    -0x50f0(%rbp),%rdi
xor    %esi,%esi
mov    $0x10,%edx
call   1080 <memset@plt>
mov    0xdd7(%rip),%rax
mov    %rax,-0x5100(%rbp)
mov    0xdd1(%rip),%rax
mov    %rax,-0x50f8(%rbp)
lea    -0x5150(%rbp),%rdi
xor    %esi,%esi
mov    $0x50,%edx
call   1080 <memset@plt>
lea    -0x51a0(%rbp),%rdi
xor    %esi,%esi
mov    $0x50,%edx
call   1080 <memset@plt>
lea    -0x51f0(%rbp),%rdi
lea    0xd9e(%rip),%rsi
mov    $0x50,%edx
call   10a0 <memcpy@plt>
lea    -0x5220(%rbp),%rdi
xor    %esi,%esi
mov    $0x28,%edx
call   1080 <memset@plt>
movl   $0x1,-0x5218(%rbp)
movl   $0x1,-0x5204(%rbp)
lea    -0x5250(%rbp),%rdi
xor    %esi,%esi
mov    $0x28,%edx
call   1080 <memset@plt>
movl   $0x1,-0x5244(%rbp)
movl   $0x1,-0x5230(%rbp)
lea    -0x5280(%rbp),%rdi
xor    %esi,%esi
mov    $0x28,%edx
call   1080 <memset@plt>
movl   $0x1,-0x5270(%rbp)
movl   $0x1,-0x525c(%rbp)
lea    -0x52d0(%rbp),%rdi
lea    0xd61(%rip),%rsi
mov    $0x50,%edx
call   10a0 <memcpy@plt>
lea    -0x5300(%rbp),%rdi
lea    0xd99(%rip),%rsi
mov    $0x28,%edx
call   10a0 <memcpy@plt>
lea    -0x5330(%rbp),%rdi
lea    0xdb1(%rip),%rsi
mov    $0x28,%edx
call   10a0 <memcpy@plt>
lea    -0x53a0(%rbp),%rdi
lea    0xdc9(%rip),%rsi
mov    $0x70,%edx
call   10a0 <memcpy@plt>
lea    -0x5410(%rbp),%rdi
lea    0xe21(%rip),%rsi
mov    $0x70,%edx
call   10a0 <memcpy@plt>
lea    -0x5480(%rbp),%rdi
lea    0xe79(%rip),%rsi
mov    $0x70,%edx
call   10a0 <memcpy@plt>
mov    -0x38(%rbp),%edi
lea    -0x5330(%rbp),%rsi
lea    -0x52d0(%rbp),%rdx
lea    -0x5300(%rbp),%rcx
lea    -0x5150(%rbp),%r8
lea    -0x51a0(%rbp),%r9
lea    -0x51f0(%rbp),%r13
lea    -0x5220(%rbp),%r12
lea    -0x5250(%rbp),%r15
lea    -0x5280(%rbp),%r14
lea    -0x5480(%rbp),%rbx
lea    -0x5410(%rbp),%r11
lea    -0x53a0(%rbp),%r10
lea    -0x690(%rbp),%rax
mov    %r13,(%rsp)
mov    %r12,0x8(%rsp)
mov    %r15,0x10(%rsp)
mov    %r14,0x18(%rsp)
mov    %rbx,0x20(%rsp)
mov    %r11,0x28(%rsp)
mov    %r10,0x30(%rsp)
mov    %rax,0x38(%rsp)
call   10d0 <getS@plt>
mov    -0x38(%rbp),%edi
lea    -0x5330(%rbp),%rsi
lea    -0x52d0(%rbp),%rdx
lea    -0x5300(%rbp),%rcx
lea    -0x5150(%rbp),%r8
lea    -0x51a0(%rbp),%r9
lea    -0x51f0(%rbp),%r13
lea    -0x5220(%rbp),%r12
lea    -0x5250(%rbp),%r15
lea    -0x5280(%rbp),%r14
lea    -0x5480(%rbp),%rbx
lea    -0x5410(%rbp),%r11
lea    -0x53a0(%rbp),%r10
lea    -0x9b0(%rbp),%rax
mov    %r13,(%rsp)
mov    %r12,0x8(%rsp)
mov    %r15,0x10(%rsp)
mov    %r14,0x18(%rsp)
mov    %rbx,0x20(%rsp)
mov    %r11,0x28(%rsp)
mov    %r10,0x30(%rsp)
mov    %rax,0x38(%rsp)
call   1050 <getT@plt>
mov    -0x38(%rbp),%edi
lea    -0x5330(%rbp),%rsi
lea    -0x52d0(%rbp),%rdx
lea    -0x5300(%rbp),%rcx
lea    -0x5150(%rbp),%r8
lea    -0x51a0(%rbp),%r9
lea    -0x51f0(%rbp),%rax
mov    %rax,-0x54b0(%rbp)
lea    -0x5220(%rbp),%rax
mov    %rax,-0x54a8(%rbp)
lea    -0x5250(%rbp),%rax
mov    %rax,-0x54a0(%rbp)
lea    -0x5280(%rbp),%rax
mov    %rax,-0x5498(%rbp)
lea    -0x5480(%rbp),%rax
mov    %rax,-0x5490(%rbp)
lea    -0x5410(%rbp),%r13
lea    -0x53a0(%rbp),%r12
mov    -0x34(%rbp),%r15d
lea    -0x50d0(%rbp),%r14
lea    -0x50e0(%rbp),%rbx
lea    -0x50f0(%rbp),%r11
lea    -0x5100(%rbp),%r10
lea    -0xcd0(%rbp),%rax
mov    %rax,-0x5488(%rbp)
mov    -0x54b0(%rbp),%rax
mov    %rax,(%rsp)
mov    -0x54a8(%rbp),%rax
mov    %rax,0x8(%rsp)
mov    -0x54a0(%rbp),%rax
mov    %rax,0x10(%rsp)
mov    -0x5498(%rbp),%rax
mov    %rax,0x18(%rsp)
mov    -0x5490(%rbp),%rax
mov    %rax,0x20(%rsp)
mov    -0x5488(%rbp),%rax
mov    %r13,0x28(%rsp)
mov    %r12,0x30(%rsp)
mov    %r15d,0x38(%rsp)
mov    %r14,0x40(%rsp)
mov    %rbx,0x48(%rsp)
mov    %r11,0x50(%rsp)
mov    %r10,0x58(%rsp)
mov    %rax,0x60(%rsp)
call   1060 <getV@plt>
mov    -0x38(%rbp),%edi
lea    -0x5330(%rbp),%rsi
lea    -0x52d0(%rbp),%rdx
lea    -0x5300(%rbp),%rcx
lea    -0x5150(%rbp),%r8
lea    -0x51a0(%rbp),%r9
lea    -0x51f0(%rbp),%r13
lea    -0x5220(%rbp),%r12
lea    -0x5250(%rbp),%r15
lea    -0x5280(%rbp),%r14
lea    -0x5480(%rbp),%rbx
lea    -0x5410(%rbp),%r11
lea    -0x53a0(%rbp),%r10
lea    -0x3cf0(%rbp),%rax
mov    %r13,(%rsp)
mov    %r12,0x8(%rsp)
mov    %r15,0x10(%rsp)
mov    %r14,0x18(%rsp)
mov    %rbx,0x20(%rsp)
mov    %r11,0x28(%rsp)
mov    %r10,0x30(%rsp)
mov    %rax,0x38(%rsp)
call   1090 <getInts@plt>
movl   $0x0,-0x30(%rbp)
mov    -0x30(%rbp),%eax
mov    -0x38(%rbp),%ecx
imul   -0x38(%rbp),%ecx
cmp    %ecx,%eax
jge    1694 <main+0x4e4>
movslq -0x30(%rbp),%rax
movsd  -0x9b0(%rbp,%rax,8),%xmm0
ff ff
movslq -0x30(%rbp),%rax
addsd  -0xcd0(%rbp,%rax,8),%xmm0
ff ff
movslq -0x30(%rbp),%rax
movsd  %xmm0,-0x370(%rbp,%rax,8)
ff ff
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    164d <main+0x49d>
mov    -0x38(%rbp),%edi
mov    -0x3c(%rbp),%esi
lea    -0x49c0(%rbp),%rdx
lea    -0x4010(%rbp),%rcx
call   1040 <getD@plt>
movl   $0x0,-0x30(%rbp)
mov    -0x30(%rbp),%eax
mov    -0x38(%rbp),%ecx
imul   -0x38(%rbp),%ecx
cmp    %ecx,%eax
jge    1722 <main+0x572>
movslq -0x30(%rbp),%rax
movsd  -0x370(%rbp,%rax,8),%xmm0
ff ff
movslq -0x30(%rbp),%rax
movsd  %xmm0,-0x49c0(%rbp,%rax,8)
ff ff
movslq -0x30(%rbp),%rax
movsd  -0x370(%rbp,%rax,8),%xmm0
ff ff
movslq -0x30(%rbp),%rax
movsd  %xmm0,-0x50a0(%rbp,%rax,8)
ff ff
movslq -0x30(%rbp),%rax
movsd  -0x690(%rbp,%rax,8),%xmm0
ff ff
movslq -0x30(%rbp),%rax
movsd  %xmm0,-0x4ce0(%rbp,%rax,8)
ff ff
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    16b4 <main+0x504>
lea    -0x50a0(%rbp),%rdi
lea    -0x4ce0(%rbp),%rsi
mov    -0x38(%rbp),%edx
lea    -0x46a0(%rbp),%rcx
lea    -0x49c0(%rbp),%r8
lea    -0x4d30(%rbp),%r9
lea    -0x4d80(%rbp),%rax
mov    %rax,(%rsp)
call   10c0 <gjacobi@plt>
mov    %eax,-0x40(%rbp)
movl   $0x0,-0x44(%rbp)
mov    -0x44(%rbp),%eax
cmp    -0x48(%rbp),%eax
jge    1a20 <main+0x870>
mov    -0x38(%rbp),%edi
mov    -0x3c(%rbp),%esi
lea    -0x49c0(%rbp),%rdx
lea    -0x4010(%rbp),%rcx
call   1040 <getD@plt>
mov    -0x38(%rbp),%edi
lea    -0x4010(%rbp),%rsi
lea    -0x3cf0(%rbp),%rdx
lea    -0x4330(%rbp),%rcx
call   1030 <getJ@plt>
mov    -0x38(%rbp),%edi
lea    -0x4010(%rbp),%rsi
lea    -0x3cf0(%rbp),%rdx
lea    -0x4650(%rbp),%rcx
call   10b0 <getK@plt>
movl   $0x0,-0x30(%rbp)
mov    -0x30(%rbp),%eax
mov    -0x38(%rbp),%ecx
imul   -0x38(%rbp),%ecx
cmp    %ecx,%eax
jge    183e <main+0x68e>
movslq -0x30(%rbp),%rax
movsd  -0x370(%rbp,%rax,8),%xmm1
ff ff
movslq -0x30(%rbp),%rax
movsd  -0x4330(%rbp,%rax,8),%xmm0
ff ff
addsd  %xmm0,%xmm0
addsd  %xmm1,%xmm0
movslq -0x30(%rbp),%rax
subsd  -0x4650(%rbp,%rax,8),%xmm0
ff ff
movslq -0x30(%rbp),%rax
movsd  %xmm0,-0x50a0(%rbp,%rax,8)
ff ff
movslq -0x30(%rbp),%rax
movsd  -0x690(%rbp,%rax,8),%xmm0
ff ff
movslq -0x30(%rbp),%rax
movsd  %xmm0,-0x4ce0(%rbp,%rax,8)
ff ff
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    17c8 <main+0x618>
lea    -0x50a0(%rbp),%rdi
lea    -0x4ce0(%rbp),%rsi
mov    -0x38(%rbp),%edx
lea    -0x46a0(%rbp),%rcx
lea    -0x49c0(%rbp),%r8
lea    -0x4d30(%rbp),%r9
lea    -0x4d80(%rbp),%rax
mov    %rax,(%rsp)
call   10c0 <gjacobi@plt>
mov    %eax,-0x40(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x50b0(%rbp)
ff
movl   $0x0,-0x30(%rbp)
mov    -0x30(%rbp),%eax
mov    -0x38(%rbp),%ecx
imul   -0x38(%rbp),%ecx
cmp    %ecx,%eax
jge    18db <main+0x72b>
movslq -0x30(%rbp),%rax
movsd  -0x370(%rbp,%rax,8),%xmm0
ff ff
movslq -0x30(%rbp),%rax
movsd  -0x4010(%rbp,%rax,8),%xmm2
ff ff
movsd  -0x50b0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50b0(%rbp)
ff
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    1889 <main+0x6d9>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x50b8(%rbp)
ff
movl   $0x0,-0x30(%rbp)
mov    -0x30(%rbp),%eax
mov    -0x38(%rbp),%ecx
imul   -0x38(%rbp),%ecx
cmp    %ecx,%eax
jge    193f <main+0x78f>
movslq -0x30(%rbp),%rax
movsd  -0x4010(%rbp,%rax,8),%xmm0
ff ff
movslq -0x30(%rbp),%rax
movsd  -0x4330(%rbp,%rax,8),%xmm2
ff ff
movsd  -0x50b8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50b8(%rbp)
ff
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    18ed <main+0x73d>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x50c0(%rbp)
ff
movl   $0x0,-0x30(%rbp)
mov    -0x30(%rbp),%eax
mov    -0x38(%rbp),%ecx
imul   -0x38(%rbp),%ecx
cmp    %ecx,%eax
jge    19a3 <main+0x7f3>
movslq -0x30(%rbp),%rax
movsd  -0x4010(%rbp,%rax,8),%xmm0
ff ff
movslq -0x30(%rbp),%rax
movsd  -0x4650(%rbp,%rax,8),%xmm2
ff ff
movsd  -0x50c0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50c0(%rbp)
ff
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    1951 <main+0x7a1>
movsd  -0x50c8(%rbp),%xmm0
ff
movsd  -0x50b0(%rbp),%xmm1
ff
addsd  %xmm1,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x50b8(%rbp),%xmm0
ff
addsd  %xmm0,%xmm0
addsd  %xmm1,%xmm0
subsd  -0x50c0(%rbp),%xmm0
ff
movsd  %xmm0,-0x50a8(%rbp)
ff
mov    -0x44(%rbp),%esi
movsd  -0x50a8(%rbp),%xmm0
ff
movsd  -0x50c8(%rbp),%xmm1
ff
movsd  -0x50b0(%rbp),%xmm2
ff
movsd  -0x50b8(%rbp),%xmm3
ff
movsd  -0x50c0(%rbp),%xmm4
ff
lea    0x863(%rip),%rdi
call   1070 <printf@plt>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    1762 <main+0x5b2>
xor    %eax,%eax
add    $0x54f8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x5418,%rsp
movabs $0x100000001,%rax
mov    %rax,0x8(%rsp)
xorps  %xmm0,%xmm0
movaps %xmm0,0x120(%rsp)
movaps %xmm0,0x110(%rsp)
movaps 0xe36(%rip),%xmm1
movaps %xmm1,0x100(%rsp)
movaps %xmm0,0x210(%rsp)
movaps %xmm0,0x200(%rsp)
movaps %xmm0,0x1f0(%rsp)
movaps %xmm0,0x1e0(%rsp)
movaps %xmm0,0x1d0(%rsp)
movaps %xmm0,0x1c0(%rsp)
movaps %xmm0,0x1b0(%rsp)
movaps %xmm0,0x1a0(%rsp)
movaps %xmm0,0x190(%rsp)
movaps %xmm0,0x180(%rsp)
movaps 0xe27(%rip),%xmm1
movaps %xmm1,0x340(%rsp)
movaps 0xe08(%rip),%xmm1
movaps %xmm1,0x330(%rsp)
movaps 0xde9(%rip),%xmm1
movaps %xmm1,0x320(%rsp)
movaps 0xdca(%rip),%xmm1
movaps %xmm1,0x310(%rsp)
movapd 0xdaa(%rip),%xmm1
movapd %xmm1,0x300(%rsp)
movaps %xmm0,0x10(%rsp)
movaps %xmm0,0x20(%rsp)
movq   $0x0,0x30(%rsp)
movl   $0x1,0x18(%rsp)
movl   $0x1,0x2c(%rsp)
movaps %xmm0,0xd0(%rsp)
movaps %xmm0,0xe0(%rsp)
movq   $0x0,0xf0(%rsp)
movl   $0x1,0xdc(%rsp)
movl   $0x1,0xf0(%rsp)
movaps %xmm0,0xb0(%rsp)
movaps %xmm0,0xa0(%rsp)
movq   $0x0,0xc0(%rsp)
movl   $0x1,0xb0(%rsp)
movl   $0x1,0xc4(%rsp)
movaps 0xda3(%rip),%xmm0
movaps %xmm0,0x170(%rsp)
movaps 0xd84(%rip),%xmm0
movaps %xmm0,0x160(%rsp)
movaps 0xd65(%rip),%xmm0
movaps %xmm0,0x150(%rsp)
movaps 0xd46(%rip),%xmm0
movaps %xmm0,0x140(%rsp)
movaps 0xd27(%rip),%xmm0
movaps %xmm0,0x130(%rsp)
mov    0xd88(%rip),%rax
mov    %rax,0x90(%rsp)
movaps 0xd69(%rip),%xmm0
movaps %xmm0,0x80(%rsp)
movaps 0xd4a(%rip),%xmm0
movaps %xmm0,0x70(%rsp)
mov    0xd8e(%rip),%rax
mov    %rax,0x60(%rsp)
movaps 0xd72(%rip),%xmm0
movaps %xmm0,0x50(%rsp)
movaps 0xd56(%rip),%xmm0
movaps %xmm0,0x40(%rsp)
movaps 0xdda(%rip),%xmm0
movaps %xmm0,0x280(%rsp)
movaps 0xdbb(%rip),%xmm0
movaps %xmm0,0x270(%rsp)
movaps 0xd9c(%rip),%xmm0
movaps %xmm0,0x260(%rsp)
movaps 0xd7d(%rip),%xmm0
movaps %xmm0,0x250(%rsp)
movaps 0xd5e(%rip),%xmm0
movaps %xmm0,0x240(%rsp)
movaps 0xd3f(%rip),%xmm0
movaps %xmm0,0x230(%rsp)
movaps 0xd20(%rip),%xmm0
movaps %xmm0,0x220(%rsp)
movaps 0xde1(%rip),%xmm0
movaps %xmm0,0x2f0(%rsp)
movaps 0xdc2(%rip),%xmm0
movaps %xmm0,0x2e0(%rsp)
movaps 0xda3(%rip),%xmm0
movaps %xmm0,0x2d0(%rsp)
movaps 0xd84(%rip),%xmm0
movaps %xmm0,0x2c0(%rsp)
movaps 0xd65(%rip),%xmm0
movaps %xmm0,0x2b0(%rsp)
movaps 0xd46(%rip),%xmm0
movaps %xmm0,0x2a0(%rsp)
movaps 0xd27(%rip),%xmm0
movaps %xmm0,0x290(%rsp)
movaps 0xde8(%rip),%xmm0
movaps %xmm0,0x3b0(%rsp)
movaps 0xdc9(%rip),%xmm0
movaps %xmm0,0x3a0(%rsp)
movaps 0xdaa(%rip),%xmm0
movaps %xmm0,0x390(%rsp)
movaps 0xd8b(%rip),%xmm0
movaps %xmm0,0x380(%rsp)
movaps 0xd6c(%rip),%xmm0
movaps %xmm0,0x370(%rsp)
movaps 0xd4d(%rip),%xmm0
movaps %xmm0,0x360(%rsp)
movapd 0xd2d(%rip),%xmm0
movapd %xmm0,0x350(%rsp)
lea    0x1a90(%rsp),%r10
lea    0x220(%rsp),%rbx
lea    0x290(%rsp),%r12
lea    0x350(%rsp),%r14
lea    0xa0(%rsp),%rbp
lea    0xd0(%rsp),%rax
lea    0x10(%rsp),%r13
lea    0x300(%rsp),%r11
lea    0x40(%rsp),%rsi
lea    0x130(%rsp),%rdx
lea    0x70(%rsp),%rcx
lea    0x1d0(%rsp),%r8
lea    0x180(%rsp),%r9
mov    $0xa,%edi
push   %r10
push   %rbx
push   %r12
push   %r14
mov    %r14,%r15
push   %rbp
mov    %rbp,%r14
push   %rax
mov    %rax,%rbp
push   %r13
push   %r11
mov    %r11,%rbx
call   10c0 <getS@plt>
add    $0x40,%rsp
lea    0x1450(%rsp),%rax
mov    $0xa,%edi
lea    0x40(%rsp),%rsi
lea    0x130(%rsp),%rdx
lea    0x70(%rsp),%rcx
lea    0x1d0(%rsp),%r8
lea    0x180(%rsp),%r9
push   %rax
lea    0x228(%rsp),%rax
push   %rax
push   %r12
push   %r15
mov    %r15,%r12
push   %r14
mov    %r14,%r15
push   %rbp
mov    %rbp,%r14
push   %r13
push   %rbx
mov    %rbx,%r13
call   1050 <getT@plt>
add    $0x38,%rsp
lea    0x1138(%rsp),%rax
lea    0x108(%rsp),%rbx
lea    0x118(%rsp),%rbp
lea    0x128(%rsp),%r10
lea    0x10(%rsp),%r11
mov    $0xa,%edi
lea    0x48(%rsp),%rsi
lea    0x138(%rsp),%rdx
lea    0x78(%rsp),%rcx
lea    0x1d8(%rsp),%r8
lea    0x188(%rsp),%r9
push   %rax
push   %rbx
push   %rbp
push   %r10
push   %r11
push   $0x2
lea    0x258(%rsp),%rax
push   %rax
lea    0x2d0(%rsp),%rax
push   %rax
push   %r12
push   %r15
push   %r14
lea    0x70(%rsp),%rax
push   %rax
push   %r13
call   1060 <getV@plt>
add    $0x70,%rsp
lea    0x23f0(%rsp),%rax
mov    $0xa,%edi
lea    0x40(%rsp),%rsi
lea    0x130(%rsp),%rdx
lea    0x70(%rsp),%rcx
lea    0x1d0(%rsp),%r8
lea    0x180(%rsp),%r9
push   %rax
lea    0x228(%rsp),%rax
push   %rax
lea    0x2a0(%rsp),%rax
push   %rax
push   %r12
push   %r15
push   %r14
lea    0x40(%rsp),%rax
push   %rax
push   %r13
call   1080 <getInts@plt>
add    $0x40,%rsp
mov    $0x8,%eax
cs nopw 0x0(%rax,%rax,1)
movapd 0x1410(%rsp,%rax,8),%xmm0
movapd 0x1420(%rsp,%rax,8),%xmm1
movapd 0x1430(%rsp,%rax,8),%xmm2
movapd 0x1440(%rsp,%rax,8),%xmm3
addpd  0x10f0(%rsp,%rax,8),%xmm0
movapd %xmm0,0x790(%rsp,%rax,8)
addpd  0x1100(%rsp,%rax,8),%xmm1
movapd %xmm1,0x7a0(%rsp,%rax,8)
addpd  0x1110(%rsp,%rax,8),%xmm2
addpd  0x1120(%rsp,%rax,8),%xmm3
movapd %xmm2,0x7b0(%rsp,%rax,8)
movapd 0x1450(%rsp,%rax,8),%xmm0
addpd  0x1130(%rsp,%rax,8),%xmm0
movapd %xmm3,0x7c0(%rsp,%rax,8)
movapd %xmm0,0x7d0(%rsp,%rax,8)
add    $0xa,%rax
cmp    $0x6c,%rax
jne    16a0 <main+0x500>
lea    0x20d0(%rsp),%r14
lea    0x4b0(%rsp),%rbx
mov    $0xa,%edi
mov    $0x1,%esi
mov    %r14,%rdx
mov    %rbx,%rcx
call   1040 <getD@plt>
lea    0x7d0(%rsp),%r15
mov    $0x320,%edx
mov    %r14,%rdi
mov    %r15,%rsi
call   1090 <memcpy@plt>
lea    0x1770(%rsp),%rbp
mov    $0x320,%edx
mov    %rbp,%rdi
mov    %r15,%rsi
call   1090 <memcpy@plt>
lea    0x1db0(%rsp),%r12
lea    0x1a90(%rsp),%rsi
mov    $0x320,%edx
mov    %r12,%rdi
call   1090 <memcpy@plt>
sub    $0x8,%rsp
lea    0x3c8(%rsp),%rax
lea    0x468(%rsp),%rcx
lea    0x418(%rsp),%r9
mov    %rbp,%rdi
mov    %r12,%rsi
mov    $0xa,%edx
mov    %r14,%r8
push   %rax
call   10b0 <gjacobi@plt>
add    $0x10,%rsp
xor    %r13d,%r13d
lea    0x23f0(%rsp),%rbp
lea    0xa83(%rip),%r15
nopl   (%rax)
mov    $0xa,%edi
mov    $0x1,%esi
mov    %r14,%rdx
mov    %rbx,%rcx
call   1040 <getD@plt>
mov    $0xa,%edi
mov    %rbx,%rsi
mov    %rbp,%rdx
lea    0xe10(%rsp),%rcx
call   1030 <getJ@plt>
mov    $0xa,%edi
mov    %rbx,%rsi
mov    %rbp,%rdx
lea    0xaf0(%rsp),%rcx
call   10a0 <getK@plt>
mov    $0x320,%edx
mov    %r12,%rdi
lea    0x1a90(%rsp),%rsi
call   1090 <memcpy@plt>
mov    $0x2,%eax
nop
movapd 0xe00(%rsp,%rax,8),%xmm0
addpd  %xmm0,%xmm0
addpd  0x7c0(%rsp,%rax,8),%xmm0
movapd 0xe10(%rsp,%rax,8),%xmm1
subpd  0xae0(%rsp,%rax,8),%xmm0
addpd  %xmm1,%xmm1
addpd  0x7d0(%rsp,%rax,8),%xmm1
subpd  0xaf0(%rsp,%rax,8),%xmm1
movapd %xmm0,0x1760(%rsp,%rax,8)
movapd %xmm1,0x1770(%rsp,%rax,8)
add    $0x4,%rax
cmp    $0x66,%rax
jne    1850 <main+0x6b0>
sub    $0x8,%rsp
lea    0x1778(%rsp),%rdi
mov    %r12,%rsi
mov    $0xa,%edx
lea    0x468(%rsp),%rcx
mov    %r14,%r8
lea    0x418(%rsp),%r9
lea    0x3c8(%rsp),%rax
push   %rax
call   10b0 <gjacobi@plt>
add    $0x10,%rsp
xorpd  %xmm2,%xmm2
mov    $0x4,%eax
nopl   0x0(%rax)
movsd  0x7b0(%rsp,%rax,8),%xmm0
movsd  0x7b8(%rsp,%rax,8),%xmm1
mulsd  0x490(%rsp,%rax,8),%xmm0
mulsd  0x498(%rsp,%rax,8),%xmm1
addsd  %xmm2,%xmm0
movsd  0x7c0(%rsp,%rax,8),%xmm3
mulsd  0x4a0(%rsp,%rax,8),%xmm3
addsd  %xmm0,%xmm1
movsd  0x7c8(%rsp,%rax,8),%xmm0
mulsd  0x4a8(%rsp,%rax,8),%xmm0
addsd  %xmm1,%xmm3
movsd  0x7d0(%rsp,%rax,8),%xmm2
mulsd  0x4b0(%rsp,%rax,8),%xmm2
addsd  %xmm3,%xmm0
addsd  %xmm0,%xmm2
add    $0x5,%rax
cmp    $0x68,%rax
jne    18f0 <main+0x750>
xorpd  %xmm3,%xmm3
mov    $0x4,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movsd  0x490(%rsp,%rax,8),%xmm0
movsd  0x498(%rsp,%rax,8),%xmm1
mulsd  0xdf0(%rsp,%rax,8),%xmm0
mulsd  0xdf8(%rsp,%rax,8),%xmm1
addsd  %xmm3,%xmm0
movsd  0x4a0(%rsp,%rax,8),%xmm4
mulsd  0xe00(%rsp,%rax,8),%xmm4
addsd  %xmm0,%xmm1
movsd  0x4a8(%rsp,%rax,8),%xmm0
mulsd  0xe08(%rsp,%rax,8),%xmm0
addsd  %xmm1,%xmm4
movsd  0x4b0(%rsp,%rax,8),%xmm3
mulsd  0xe10(%rsp,%rax,8),%xmm3
addsd  %xmm4,%xmm0
addsd  %xmm0,%xmm3
add    $0x5,%rax
cmp    $0x68,%rax
jne    1980 <main+0x7e0>
xorpd  %xmm4,%xmm4
mov    $0x4,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movsd  0x490(%rsp,%rax,8),%xmm0
movsd  0x498(%rsp,%rax,8),%xmm1
mulsd  0xad0(%rsp,%rax,8),%xmm0
mulsd  0xad8(%rsp,%rax,8),%xmm1
addsd  %xmm4,%xmm0
movsd  0x4a0(%rsp,%rax,8),%xmm5
mulsd  0xae0(%rsp,%rax,8),%xmm5
addsd  %xmm0,%xmm1
movsd  0x4a8(%rsp,%rax,8),%xmm0
mulsd  0xae8(%rsp,%rax,8),%xmm0
addsd  %xmm1,%xmm5
movsd  0x4b0(%rsp,%rax,8),%xmm4
mulsd  0xaf0(%rsp,%rax,8),%xmm4
addsd  %xmm5,%xmm0
addsd  %xmm0,%xmm4
add    $0x5,%rax
cmp    $0x68,%rax
jne    1a10 <main+0x870>
movapd %xmm2,%xmm5
addsd  %xmm2,%xmm5
movsd  0x568(%rip),%xmm1
addsd  %xmm1,%xmm5
movapd %xmm3,%xmm0
addsd  %xmm3,%xmm0
addsd  %xmm5,%xmm0
subsd  %xmm4,%xmm0
mov    %r15,%rdi
mov    %r13d,%esi
call   1070 <printf@plt>
add    $0x1,%r13d
cmp    $0x5,%r13d
jne    17f0 <main+0x650>
xor    %eax,%eax
add    $0x5418,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
@__const.main.z = [2 x double] [double -3.500000e-01, double 3.500000e-01]
@__const.main.zcenter = [10 x double] [double -3.500000e-01, double -3.500000e-01, double -3.500000e-01, double -3.500000e-01, double -3.500000e-01, double 3.500000e-01, double 3.500000e-01, double 3.500000e-01, double 3.500000e-01, double 3.500000e-01]
@__const.main.normc = [10 x double] [double 0x3FF000001D67880F, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 0x3FF000001D67880F, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00]
@__const.main.istart = [10 x i32] [i32 0, i32 3, i32 4, i32 5, i32 6, i32 7, i32 10, i32 11, i32 12, i32 13]
@__const.main.nprim = [10 x i32] [i32 3, i32 1, i32 1, i32 1, i32 1, i32 3, i32 1, i32 1, i32 1, i32 1]
@__const.main.alpha = [14 x double] [double 0x4032BB2BCB5FE543, double 0x40069A682B62845A, double 6.401220e-01, double 1.612780e-01, double 1.100000e+00, double 1.100000e+00, double 1.100000e+00, double 0x4032BB2BCB5FE543, double 0x40069A682B62845A, double 6.401220e-01, double 1.612780e-01, double 1.100000e+00, double 1.100000e+00, double 1.100000e+00]
@__const.main.coef = [14 x double] [double 3.349500e-02, double 2.347270e-01, double 8.137570e-01, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 3.349500e-02, double 2.347270e-01, double 8.137570e-01, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00]
@__const.main.normp = [14 x double] [double 0x4019AB0688B564B4, double 0x3FF8D9CA256D14DE, double 0x3FE0524699355B34, double 0x3FC7377CDF13A7E0, double 0x3FF9B132988DE8D2, double 0x3FF9B132988DE8D2, double 0x3FF9B132988DE8D2, double 0x4019AB0688B564B4, double 0x3FF8D9CA256D14DE, double 0x3FE0524699355B34, double 0x3FC7377CDF13A7E0, double 0x3FF9B132988DE8D2, double 0x3FF9B132988DE8D2, double 0x3FF9B132988DE8D2]
@.str = [19 x i8] c"%d %f %f %f %f %f\0A\00"
define i32 @main() {
%1 = alloca [100 x double]
%2 = bitcast [100 x double]* %1 to i8*
%3 = alloca [100 x double]
%4 = bitcast [100 x double]* %3 to i8*
%5 = alloca [100 x double]
%6 = alloca [100 x double]
%7 = alloca [1540 x double]
%8 = alloca [100 x double]
%9 = alloca [100 x double]
%10 = alloca [100 x double]
%11 = alloca [10 x double]
%12 = alloca [100 x double]
%13 = bitcast [100 x double]* %12 to i8*
%14 = alloca [100 x double]
%15 = bitcast [100 x double]* %14 to i8*
%16 = alloca [10 x double]
%17 = alloca [10 x double]
%18 = alloca [100 x double]
%19 = bitcast [100 x double]* %18 to i8*
%20 = alloca i64
%21 = alloca [2 x double]
%22 = alloca [2 x double]
%23 = alloca [2 x double]
%24 = alloca [10 x double]
%25 = alloca [10 x double]
%26 = alloca [10 x double]
%27 = alloca [10 x i32]
%28 = alloca [10 x i32]
%29 = alloca [10 x i32]
%30 = alloca [10 x double]
%31 = alloca [10 x i32]
%32 = alloca [10 x i32]
%33 = alloca [14 x double]
%34 = alloca [14 x double]
%35 = alloca [14 x double]
%36 = bitcast [100 x double]* %5 to i8*
%37 = bitcast [100 x double]* %6 to i8*
%38 = bitcast [1540 x double]* %7 to i8*
%39 = bitcast [100 x double]* %8 to i8*
%40 = bitcast [100 x double]* %9 to i8*
%41 = bitcast [100 x double]* %10 to i8*
%42 = bitcast [10 x double]* %11 to i8*
%43 = bitcast [10 x double]* %16 to i8*
%44 = bitcast [10 x double]* %17 to i8*
%45 = bitcast i64* %20 to i8*
store i64 4294967297, i64* %20
%46 = bitcast [2 x double]* %21 to i8*
%47 = bitcast [2 x double]* %22 to i8*
%48 = bitcast [2 x double]* %23 to i8*
%49 = bitcast [10 x double]* %24 to i8*
%50 = bitcast [10 x double]* %25 to i8*
%51 = bitcast [10 x double]* %26 to i8*
%52 = bitcast [10 x i32]* %27 to i8*
%53 = getelementptr inbounds [10 x i32], [10 x i32]* %27, i64 0, i64 2
store i32 1, i32* %53
%54 = getelementptr inbounds [10 x i32], [10 x i32]* %27, i64 0, i64 7
store i32 1, i32* %54
%55 = bitcast [10 x i32]* %28 to i8*
%56 = getelementptr inbounds [10 x i32], [10 x i32]* %28, i64 0, i64 3
store i32 1, i32* %56
%57 = getelementptr inbounds [10 x i32], [10 x i32]* %28, i64 0, i64 8
store i32 1, i32* %57
%58 = bitcast [10 x i32]* %29 to i8*
%59 = getelementptr inbounds [10 x i32], [10 x i32]* %29, i64 0, i64 4
store i32 1, i32* %59
%60 = getelementptr inbounds [10 x i32], [10 x i32]* %29, i64 0, i64 9
store i32 1, i32* %60
%61 = bitcast [10 x double]* %30 to i8*
%62 = bitcast [10 x i32]* %31 to i8*
%63 = bitcast [10 x i32]* %32 to i8*
%64 = bitcast [14 x double]* %33 to i8*
%65 = bitcast [14 x double]* %34 to i8*
%66 = bitcast [14 x double]* %35 to i8*
%67 = getelementptr inbounds [10 x i32], [10 x i32]* %32, i64 0, i64 0
%68 = getelementptr inbounds [10 x double], [10 x double]* %30, i64 0, i64 0
%69 = getelementptr inbounds [10 x i32], [10 x i32]* %31, i64 0, i64 0
%70 = getelementptr inbounds [10 x double], [10 x double]* %24, i64 0, i64 0
%71 = getelementptr inbounds [10 x double], [10 x double]* %25, i64 0, i64 0
%72 = getelementptr inbounds [10 x double], [10 x double]* %26, i64 0, i64 0
%73 = getelementptr inbounds [10 x i32], [10 x i32]* %27, i64 0, i64 0
%74 = getelementptr inbounds [10 x i32], [10 x i32]* %28, i64 0, i64 0
%75 = getelementptr inbounds [10 x i32], [10 x i32]* %29, i64 0, i64 0
%76 = getelementptr inbounds [14 x double], [14 x double]* %35, i64 0, i64 0
%77 = getelementptr inbounds [14 x double], [14 x double]* %34, i64 0, i64 0
%78 = getelementptr inbounds [14 x double], [14 x double]* %33, i64 0, i64 0
%79 = getelementptr inbounds [100 x double], [100 x double]* %3, i64 0, i64 0
%80 = call i32 @getS(i32 10, i32* %67, double* %68, i32* %69, double* %70, double* %71, double* %72, i32* %73, i32* %74, i32* %75, double* %76, double* %77, double* %78, double* %79)
%81 = getelementptr inbounds [100 x double], [100 x double]* %5, i64 0, i64 0
%82 = call i32 @getT(i32 10, i32* %67, double* %68, i32* %69, double* %70, double* %71, double* %72, i32* %73, i32* %74, i32* %75, double* %76, double* %77, double* %78, double* %81)
%83 = bitcast i64* %20 to i32*
%84 = getelementptr inbounds [2 x double], [2 x double]* %21, i64 0, i64 0
%85 = getelementptr inbounds [2 x double], [2 x double]* %22, i64 0, i64 0
%86 = getelementptr inbounds [2 x double], [2 x double]* %23, i64 0, i64 0
%87 = getelementptr inbounds [100 x double], [100 x double]* %6, i64 0, i64 0
%88 = call i32 @getV(i32 10, i32* %67, double* %68, i32* %69, double* %70, double* %71, double* %72, i32* %73, i32* %74, i32* %75, double* %76, double* %77, double* %78, i32 2, i32* %83, double* %84, double* %85, double* %86, double* %87)
%89 = getelementptr inbounds [1540 x double], [1540 x double]* %7, i64 0, i64 0
%90 = call i32 @getInts(i32 10, i32* %67, double* %68, i32* %69, double* %70, double* %71, double* %72, i32* %73, i32* %74, i32* %75, double* %76, double* %77, double* %78, double* %89)
br label %91
91: ; preds = %91, %0
%92 = phi i64 [ 0, %0 ], [ %142, %91 ]
%93 = getelementptr inbounds [100 x double], [100 x double]* %5, i64 0, i64 %92
%94 = bitcast double* %93 to <2 x double>*
%95 = load <2 x double>, <2 x double>* %94
%96 = getelementptr inbounds [100 x double], [100 x double]* %6, i64 0, i64 %92
%97 = bitcast double* %96 to <2 x double>*
%98 = load <2 x double>, <2 x double>* %97
%99 = fadd <2 x double> %95, %98
%100 = getelementptr inbounds [100 x double], [100 x double]* %1, i64 0, i64 %92
%101 = bitcast double* %100 to <2 x double>*
store <2 x double> %99, <2 x double>* %101
%102 = add nuw nsw i64 %92, 2
%103 = getelementptr inbounds [100 x double], [100 x double]* %5, i64 0, i64 %102
%104 = bitcast double* %103 to <2 x double>*
%105 = load <2 x double>, <2 x double>* %104
%106 = getelementptr inbounds [100 x double], [100 x double]* %6, i64 0, i64 %102
%107 = bitcast double* %106 to <2 x double>*
%108 = load <2 x double>, <2 x double>* %107
%109 = fadd <2 x double> %105, %108
%110 = getelementptr inbounds [100 x double], [100 x double]* %1, i64 0, i64 %102
%111 = bitcast double* %110 to <2 x double>*
store <2 x double> %109, <2 x double>* %111
%112 = add nuw nsw i64 %92, 4
%113 = getelementptr inbounds [100 x double], [100 x double]* %5, i64 0, i64 %112
%114 = bitcast double* %113 to <2 x double>*
%115 = load <2 x double>, <2 x double>* %114
%116 = getelementptr inbounds [100 x double], [100 x double]* %6, i64 0, i64 %112
%117 = bitcast double* %116 to <2 x double>*
%118 = load <2 x double>, <2 x double>* %117
%119 = fadd <2 x double> %115, %118
%120 = getelementptr inbounds [100 x double], [100 x double]* %1, i64 0, i64 %112
%121 = bitcast double* %120 to <2 x double>*
store <2 x double> %119, <2 x double>* %121
%122 = add nuw nsw i64 %92, 6
%123 = getelementptr inbounds [100 x double], [100 x double]* %5, i64 0, i64 %122
%124 = bitcast double* %123 to <2 x double>*
%125 = load <2 x double>, <2 x double>* %124
%126 = getelementptr inbounds [100 x double], [100 x double]* %6, i64 0, i64 %122
%127 = bitcast double* %126 to <2 x double>*
%128 = load <2 x double>, <2 x double>* %127
%129 = fadd <2 x double> %125, %128
%130 = getelementptr inbounds [100 x double], [100 x double]* %1, i64 0, i64 %122
%131 = bitcast double* %130 to <2 x double>*
store <2 x double> %129, <2 x double>* %131
%132 = add nuw nsw i64 %92, 8
%133 = getelementptr inbounds [100 x double], [100 x double]* %5, i64 0, i64 %132
%134 = bitcast double* %133 to <2 x double>*
%135 = load <2 x double>, <2 x double>* %134
%136 = getelementptr inbounds [100 x double], [100 x double]* %6, i64 0, i64 %132
%137 = bitcast double* %136 to <2 x double>*
%138 = load <2 x double>, <2 x double>* %137
%139 = fadd <2 x double> %135, %138
%140 = getelementptr inbounds [100 x double], [100 x double]* %1, i64 0, i64 %132
%141 = bitcast double* %140 to <2 x double>*
store <2 x double> %139, <2 x double>* %141
%142 = add nuw nsw i64 %92, 10
%143 = icmp eq i64 %142, 100
br i1 %143, label %144, label %91
144: ; preds = %91
%145 = getelementptr inbounds [100 x double], [100 x double]* %12, i64 0, i64 0
%146 = getelementptr inbounds [100 x double], [100 x double]* %8, i64 0, i64 0
%147 = call i32 @getD(i32 10, i32 1, double* %145, double* %146)
%148 = getelementptr inbounds [100 x double], [100 x double]* %18, i64 0, i64 0
%149 = getelementptr inbounds [100 x double], [100 x double]* %14, i64 0, i64 0
%150 = getelementptr inbounds [10 x double], [10 x double]* %11, i64 0, i64 0
%151 = getelementptr inbounds [10 x double], [10 x double]* %16, i64 0, i64 0
%152 = getelementptr inbounds [10 x double], [10 x double]* %17, i64 0, i64 0
%153 = call i32 @gjacobi(double* %148, double* %149, i32 10, double* %150, double* %145, double* %151, double* %152)
%154 = getelementptr inbounds [100 x double], [100 x double]* %9, i64 0, i64 0
%155 = getelementptr inbounds [100 x double], [100 x double]* %10, i64 0, i64 0
br label %156
156: ; preds = %144, %296
%157 = phi i32 [ 0, %144 ], [ %301, %296 ]
%158 = call i32 @getD(i32 10, i32 1, double* %145, double* %146)
%159 = call i32 @getJ(i32 10, double* %146, double* %89, double* %154)
%160 = call i32 @getK(i32 10, double* %146, double* %89, double* %155)
br label %161
161: ; preds = %161, %156
%162 = phi i64 [ 0, %156 ], [ %190, %161 ]
%163 = getelementptr inbounds [100 x double], [100 x double]* %1, i64 0, i64 %162
%164 = bitcast double* %163 to <2 x double>*
%165 = load <2 x double>, <2 x double>* %164
%166 = getelementptr inbounds [100 x double], [100 x double]* %9, i64 0, i64 %162
%167 = bitcast double* %166 to <2 x double>*
%168 = load <2 x double>, <2 x double>* %167
%169 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %168, <2 x double> <double 2.000000e+00, double 2.000000e+00>, <2 x double> %165)
%170 = getelementptr inbounds [100 x double], [100 x double]* %10, i64 0, i64 %162
%171 = bitcast double* %170 to <2 x double>*
%172 = load <2 x double>, <2 x double>* %171
%173 = fsub <2 x double> %169, %172
%174 = getelementptr inbounds [100 x double], [100 x double]* %18, i64 0, i64 %162
%175 = bitcast double* %174 to <2 x double>*
store <2 x double> %173, <2 x double>* %175
%176 = or i64 %162, 2
%177 = getelementptr inbounds [100 x double], [100 x double]* %1, i64 0, i64 %176
%178 = bitcast double* %177 to <2 x double>*
%179 = load <2 x double>, <2 x double>* %178
%180 = getelementptr inbounds [100 x double], [100 x double]* %9, i64 0, i64 %176
%181 = bitcast double* %180 to <2 x double>*
%182 = load <2 x double>, <2 x double>* %181
%183 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %182, <2 x double> <double 2.000000e+00, double 2.000000e+00>, <2 x double> %179)
%184 = getelementptr inbounds [100 x double], [100 x double]* %10, i64 0, i64 %176
%185 = bitcast double* %184 to <2 x double>*
%186 = load <2 x double>, <2 x double>* %185
%187 = fsub <2 x double> %183, %186
%188 = getelementptr inbounds [100 x double], [100 x double]* %18, i64 0, i64 %176
%189 = bitcast double* %188 to <2 x double>*
store <2 x double> %187, <2 x double>* %189
%190 = add nuw nsw i64 %162, 4
%191 = icmp eq i64 %190, 100
br i1 %191, label %192, label %161
192: ; preds = %161
%193 = call i32 @gjacobi(double* %148, double* %149, i32 10, double* %150, double* %145, double* %151, double* %152)
br label %194
194: ; preds = %194, %192
%195 = phi i64 [ 0, %192 ], [ %226, %194 ]
%196 = phi double [ 0.000000e+00, %192 ], [ %225, %194 ]
%197 = getelementptr inbounds [100 x double], [100 x double]* %1, i64 0, i64 %195
%198 = load double, double* %197
%199 = getelementptr inbounds [100 x double], [100 x double]* %8, i64 0, i64 %195
%200 = load double, double* %199
%201 = call double @llvm.fmuladd.f64(double %198, double %200, double %196)
%202 = add nuw nsw i64 %195, 1
%203 = getelementptr inbounds [100 x double], [100 x double]* %1, i64 0, i64 %202
%204 = load double, double* %203
%205 = getelementptr inbounds [100 x double], [100 x double]* %8, i64 0, i64 %202
%206 = load double, double* %205
%207 = call double @llvm.fmuladd.f64(double %204, double %206, double %201)
%208 = add nuw nsw i64 %195, 2
%209 = getelementptr inbounds [100 x double], [100 x double]* %1, i64 0, i64 %208
%210 = load double, double* %209
%211 = getelementptr inbounds [100 x double], [100 x double]* %8, i64 0, i64 %208
%212 = load double, double* %211
%213 = call double @llvm.fmuladd.f64(double %210, double %212, double %207)
%214 = add nuw nsw i64 %195, 3
%215 = getelementptr inbounds [100 x double], [100 x double]* %1, i64 0, i64 %214
%216 = load double, double* %215
%217 = getelementptr inbounds [100 x double], [100 x double]* %8, i64 0, i64 %214
%218 = load double, double* %217
%219 = call double @llvm.fmuladd.f64(double %216, double %218, double %213)
%220 = add nuw nsw i64 %195, 4
%221 = getelementptr inbounds [100 x double], [100 x double]* %1, i64 0, i64 %220
%222 = load double, double* %221
%223 = getelementptr inbounds [100 x double], [100 x double]* %8, i64 0, i64 %220
%224 = load double, double* %223
%225 = call double @llvm.fmuladd.f64(double %222, double %224, double %219)
%226 = add nuw nsw i64 %195, 5
%227 = icmp eq i64 %226, 100
br i1 %227, label %228, label %194
228: ; preds = %194, %228
%229 = phi i64 [ %260, %228 ], [ 0, %194 ]
%230 = phi double [ %259, %228 ], [ 0.000000e+00, %194 ]
%231 = getelementptr inbounds [100 x double], [100 x double]* %8, i64 0, i64 %229
%232 = load double, double* %231
%233 = getelementptr inbounds [100 x double], [100 x double]* %9, i64 0, i64 %229
%234 = load double, double* %233
%235 = call double @llvm.fmuladd.f64(double %232, double %234, double %230)
%236 = add nuw nsw i64 %229, 1
%237 = getelementptr inbounds [100 x double], [100 x double]* %8, i64 0, i64 %236
%238 = load double, double* %237
%239 = getelementptr inbounds [100 x double], [100 x double]* %9, i64 0, i64 %236
%240 = load double, double* %239
%241 = call double @llvm.fmuladd.f64(double %238, double %240, double %235)
%242 = add nuw nsw i64 %229, 2
%243 = getelementptr inbounds [100 x double], [100 x double]* %8, i64 0, i64 %242
%244 = load double, double* %243
%245 = getelementptr inbounds [100 x double], [100 x double]* %9, i64 0, i64 %242
%246 = load double, double* %245
%247 = call double @llvm.fmuladd.f64(double %244, double %246, double %241)
%248 = add nuw nsw i64 %229, 3
%249 = getelementptr inbounds [100 x double], [100 x double]* %8, i64 0, i64 %248
%250 = load double, double* %249
%251 = getelementptr inbounds [100 x double], [100 x double]* %9, i64 0, i64 %248
%252 = load double, double* %251
%253 = call double @llvm.fmuladd.f64(double %250, double %252, double %247)
%254 = add nuw nsw i64 %229, 4
%255 = getelementptr inbounds [100 x double], [100 x double]* %8, i64 0, i64 %254
%256 = load double, double* %255
%257 = getelementptr inbounds [100 x double], [100 x double]* %9, i64 0, i64 %254
%258 = load double, double* %257
%259 = call double @llvm.fmuladd.f64(double %256, double %258, double %253)
%260 = add nuw nsw i64 %229, 5
%261 = icmp eq i64 %260, 100
br i1 %261, label %262, label %228
262: ; preds = %228, %262
%263 = phi i64 [ %294, %262 ], [ 0, %228 ]
%264 = phi double [ %293, %262 ], [ 0.000000e+00, %228 ]
%265 = getelementptr inbounds [100 x double], [100 x double]* %8, i64 0, i64 %263
%266 = load double, double* %265
%267 = getelementptr inbounds [100 x double], [100 x double]* %10, i64 0, i64 %263
%268 = load double, double* %267
%269 = call double @llvm.fmuladd.f64(double %266, double %268, double %264)
%270 = add nuw nsw i64 %263, 1
%271 = getelementptr inbounds [100 x double], [100 x double]* %8, i64 0, i64 %270
%272 = load double, double* %271
%273 = getelementptr inbounds [100 x double], [100 x double]* %10, i64 0, i64 %270
%274 = load double, double* %273
%275 = call double @llvm.fmuladd.f64(double %272, double %274, double %269)
%276 = add nuw nsw i64 %263, 2
%277 = getelementptr inbounds [100 x double], [100 x double]* %8, i64 0, i64 %276
%278 = load double, double* %277
%279 = getelementptr inbounds [100 x double], [100 x double]* %10, i64 0, i64 %276
%280 = load double, double* %279
%281 = call double @llvm.fmuladd.f64(double %278, double %280, double %275)
%282 = add nuw nsw i64 %263, 3
%283 = getelementptr inbounds [100 x double], [100 x double]* %8, i64 0, i64 %282
%284 = load double, double* %283
%285 = getelementptr inbounds [100 x double], [100 x double]* %10, i64 0, i64 %282
%286 = load double, double* %285
%287 = call double @llvm.fmuladd.f64(double %284, double %286, double %281)
%288 = add nuw nsw i64 %263, 4
%289 = getelementptr inbounds [100 x double], [100 x double]* %8, i64 0, i64 %288
%290 = load double, double* %289
%291 = getelementptr inbounds [100 x double], [100 x double]* %10, i64 0, i64 %288
%292 = load double, double* %291
%293 = call double @llvm.fmuladd.f64(double %290, double %292, double %287)
%294 = add nuw nsw i64 %263, 5
%295 = icmp eq i64 %294, 100
br i1 %295, label %296, label %262
296: ; preds = %262
%297 = call double @llvm.fmuladd.f64(double %225, double 2.000000e+00, double 0x3FF6DB6D43D03969)
%298 = call double @llvm.fmuladd.f64(double %259, double 2.000000e+00, double %297)
%299 = fsub double %298, %293
%300 = call i32 @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str, i64 0, i64 0), i32 %157, double %299, double 0x3FF6DB6D43D03969, double %225, double %259, double %293)
%301 = add nuw nsw i32 %157, 1
%302 = icmp eq i32 %301, 5
br i1 %302, label %303, label %156
303: ; preds = %296
ret i32 0
}