int main(void) {
  int i, j;
  double sum = 0.0, *w, *term;
  static double x[] = {0.0, 1.0, 1.5, 2.0, 2.5, 3.0};
  static double q[] = {0.0, 1.0, 1.5, 2.0, 2.5, 3.0};
  w = dvector(1, 5);
  term = dvector(1, 5);
  vander(x, w, q, 5);
  printf("\nSolution vector:\n");
  for (i = 1; i <= 5; i++)
    printf("%7s%1d%2s %12f \n", "w[", i, "]=", w[i]);
  printf("\nTest of solution vector:\n");
  printf("%14s %11s\n", "mtrx*sol'n", "original");
  for (i = 1; i <= 5; i++) {
    term[i] = w[i];
    sum += w[i];
  }
  printf("%12.4f %12.4f\n", sum, q[1]);
  for (i = 2; i <= 5; i++) {
    sum = 0.0;
    for (j = 1; j <= 5; j++) {
      term[j] *= x[j];
      sum += term[j];
    }
    printf("%12.4f %12.4f\n", sum, q[i]);
  }
  free_dvector(term, 1, 5);
  free_dvector(w, 1, 5);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
movl   $0x0,-0x4(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x18(%rbp)
mov    $0x1,%edi
mov    $0x5,%esi
mov    $0x0,%al
call   1040 <dvector@plt>
cltq
mov    %rax,-0x20(%rbp)
mov    $0x1,%edi
mov    $0x5,%esi
mov    $0x0,%al
call   1040 <dvector@plt>
cltq
mov    %rax,-0x28(%rbp)
mov    -0x20(%rbp),%rsi
lea    0x2ec0(%rip),%rdi
lea    0x2ee9(%rip),%rdx
mov    $0x5,%ecx
mov    $0x0,%al
call   1060 <vander@plt>
lea    0xe56(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x8(%rbp)
cmpl   $0x5,-0x8(%rbp)
jg     11fc <main+0xbc>
mov    -0x8(%rbp),%edx
mov    -0x20(%rbp),%rax
movslq -0x8(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
lea    0xe3a(%rip),%rdi
lea    0xe44(%rip),%rsi
lea    0xe40(%rip),%rcx
mov    $0x1,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    11b8 <main+0x78>
lea    0xe27(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xe34(%rip),%rdi
lea    0xe38(%rip),%rsi
lea    0xe3c(%rip),%rdx
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x8(%rbp)
cmpl   $0x5,-0x8(%rbp)
jg     1276 <main+0x136>
mov    -0x20(%rbp),%rax
movslq -0x8(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x8(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%rax
movslq -0x8(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
addsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x18(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    122d <main+0xed>
movsd  -0x18(%rbp),%xmm0
movsd  0x2e05(%rip),%xmm1
lea    0xdda(%rip),%rdi
mov    $0x2,%al
call   1030 <printf@plt>
movl   $0x2,-0x8(%rbp)
cmpl   $0x5,-0x8(%rbp)
jg     1333 <main+0x1f3>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x18(%rbp)
movl   $0x1,-0xc(%rbp)
cmpl   $0x5,-0xc(%rbp)
jg     1302 <main+0x1c2>
movslq -0xc(%rbp),%rcx
lea    0x2d8a(%rip),%rax
movsd  (%rax,%rcx,8),%xmm0
mov    -0x28(%rbp),%rax
movslq -0xc(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x28(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
addsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x18(%rbp)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    12b1 <main+0x171>
movsd  -0x18(%rbp),%xmm0
movslq -0x8(%rbp),%rcx
lea    0x2d6e(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
lea    0xd46(%rip),%rdi
mov    $0x2,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1298 <main+0x158>
mov    -0x28(%rbp),%rdi
mov    $0x1,%esi
mov    $0x5,%edx
mov    $0x0,%al
call   1050 <free_dvector@plt>
mov    -0x20(%rbp),%rdi
mov    $0x1,%esi
mov    $0x5,%edx
mov    $0x0,%al
call   1050 <free_dvector@plt>
xor    %eax,%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    $0x1,%edi
mov    $0x5,%esi
xor    %eax,%eax
call   1050 <dvector@plt>
movslq %eax,%r14
mov    $0x1,%edi
mov    $0x5,%esi
xor    %eax,%eax
call   1050 <dvector@plt>
movslq %eax,%rbx
lea    0x2ec8(%rip),%rdi
lea    0x2ef1(%rip),%rdx
mov    %r14,%rsi
mov    $0x5,%ecx
xor    %eax,%eax
call   1070 <vander@plt>
lea    0xea8(%rip),%rdi
call   1030 <puts@plt>
movsd  0x8(%r14),%xmm0
lea    0xe51(%rip),%r12
lea    0xe5b(%rip),%r13
lea    0xe57(%rip),%r15
mov    %r12,%rdi
mov    %r13,%rsi
mov    $0x1,%edx
mov    %r15,%rcx
mov    $0x1,%al
call   1040 <printf@plt>
movsd  0x10(%r14),%xmm0
mov    %r12,%rdi
mov    %r13,%rsi
mov    $0x2,%edx
mov    %r15,%rcx
mov    $0x1,%al
call   1040 <printf@plt>
movsd  0x18(%r14),%xmm0
mov    %r12,%rdi
mov    %r13,%rsi
mov    $0x3,%edx
mov    %r15,%rcx
mov    $0x1,%al
call   1040 <printf@plt>
movsd  0x20(%r14),%xmm0
mov    %r12,%rdi
mov    %r13,%rsi
mov    $0x4,%edx
mov    %r15,%rcx
mov    $0x1,%al
call   1040 <printf@plt>
movsd  0x28(%r14),%xmm0
mov    %r12,%rdi
mov    %r13,%rsi
mov    $0x5,%edx
mov    %r15,%rcx
mov    $0x1,%al
call   1040 <printf@plt>
lea    0xe12(%rip),%rdi
call   1030 <puts@plt>
lea    0xdc6(%rip),%rdi
lea    0xdca(%rip),%rsi
lea    0xdce(%rip),%rdx
xor    %eax,%eax
call   1040 <printf@plt>
movsd  0x8(%r14),%xmm0
movsd  %xmm0,0x8(%rbx)
xorpd  %xmm1,%xmm1
movsd  0x8(%r14),%xmm0
addsd  %xmm1,%xmm0
movsd  0x10(%r14),%xmm1
movsd  %xmm1,0x10(%rbx)
addsd  0x10(%r14),%xmm0
movsd  0x18(%r14),%xmm1
movsd  %xmm1,0x18(%rbx)
addsd  0x18(%r14),%xmm0
movsd  0x20(%r14),%xmm1
movsd  %xmm1,0x20(%rbx)
addsd  0x20(%r14),%xmm0
movsd  0x28(%r14),%xmm1
movsd  %xmm1,0x28(%rbx)
addsd  0x28(%r14),%xmm0
movsd  0x2db5(%rip),%xmm1
lea    0xd64(%rip),%r15
mov    %r15,%rdi
mov    $0x2,%al
call   1040 <printf@plt>
movsd  0x2d6c(%rip),%xmm0
mulsd  0x8(%rbx),%xmm0
movsd  %xmm0,0x8(%rbx)
addsd  0xd02(%rip),%xmm0
movsd  0x2d5a(%rip),%xmm1
mulsd  0x10(%rbx),%xmm1
movsd  %xmm1,0x10(%rbx)
addsd  %xmm0,%xmm1
movsd  0x2d4c(%rip),%xmm2
mulsd  0x18(%rbx),%xmm2
movsd  %xmm2,0x18(%rbx)
addsd  %xmm1,%xmm2
movsd  0x2d3e(%rip),%xmm1
mulsd  0x20(%rbx),%xmm1
movsd  %xmm1,0x20(%rbx)
movsd  0x2d34(%rip),%xmm0
mulsd  0x28(%rbx),%xmm0
addsd  %xmm2,%xmm1
movsd  %xmm0,0x28(%rbx)
addsd  %xmm1,%xmm0
movsd  0x2d32(%rip),%xmm1
mov    %r15,%rdi
mov    $0x2,%al
call   1040 <printf@plt>
movsd  0x2ce8(%rip),%xmm0
mulsd  0x8(%rbx),%xmm0
movsd  %xmm0,0x8(%rbx)
addsd  0xc7e(%rip),%xmm0
movsd  0x2cd6(%rip),%xmm1
mulsd  0x10(%rbx),%xmm1
movsd  %xmm1,0x10(%rbx)
addsd  %xmm0,%xmm1
movsd  0x2cc8(%rip),%xmm2
mulsd  0x18(%rbx),%xmm2
movsd  %xmm2,0x18(%rbx)
addsd  %xmm1,%xmm2
movsd  0x2cba(%rip),%xmm1
mulsd  0x20(%rbx),%xmm1
movsd  %xmm1,0x20(%rbx)
movsd  0x2cb0(%rip),%xmm0
mulsd  0x28(%rbx),%xmm0
addsd  %xmm2,%xmm1
movsd  %xmm0,0x28(%rbx)
addsd  %xmm1,%xmm0
movsd  0x2cb6(%rip),%xmm1
mov    %r15,%rdi
mov    $0x2,%al
call   1040 <printf@plt>
movsd  0x2c64(%rip),%xmm0
mulsd  0x8(%rbx),%xmm0
movsd  %xmm0,0x8(%rbx)
addsd  0xbfa(%rip),%xmm0
movsd  0x2c52(%rip),%xmm1
mulsd  0x10(%rbx),%xmm1
movsd  %xmm1,0x10(%rbx)
addsd  %xmm0,%xmm1
movsd  0x2c44(%rip),%xmm2
mulsd  0x18(%rbx),%xmm2
movsd  %xmm2,0x18(%rbx)
addsd  %xmm1,%xmm2
movsd  0x2c36(%rip),%xmm1
mulsd  0x20(%rbx),%xmm1
movsd  %xmm1,0x20(%rbx)
movsd  0x2c2c(%rip),%xmm0
mulsd  0x28(%rbx),%xmm0
addsd  %xmm2,%xmm1
movsd  %xmm0,0x28(%rbx)
addsd  %xmm1,%xmm0
movsd  0x2c3a(%rip),%xmm1
mov    %r15,%rdi
mov    $0x2,%al
call   1040 <printf@plt>
movsd  0x2be0(%rip),%xmm0
mulsd  0x8(%rbx),%xmm0
movsd  %xmm0,0x8(%rbx)
addsd  0xb76(%rip),%xmm0
movsd  0x2bce(%rip),%xmm1
mulsd  0x10(%rbx),%xmm1
movsd  %xmm1,0x10(%rbx)
addsd  %xmm0,%xmm1
movsd  0x2bc0(%rip),%xmm2
mulsd  0x18(%rbx),%xmm2
movsd  %xmm2,0x18(%rbx)
addsd  %xmm1,%xmm2
movsd  0x2bb2(%rip),%xmm1
mulsd  0x20(%rbx),%xmm1
movsd  %xmm1,0x20(%rbx)
movsd  0x2ba8(%rip),%xmm0
mulsd  0x28(%rbx),%xmm0
addsd  %xmm2,%xmm1
movsd  %xmm0,0x28(%rbx)
addsd  %xmm1,%xmm0
movsd  0x2bbe(%rip),%xmm1
mov    %r15,%rdi
mov    $0x2,%al
call   1040 <printf@plt>
mov    %rbx,%rdi
mov    $0x1,%esi
mov    $0x5,%edx
xor    %eax,%eax
call   1060 <free_dvector@plt>
mov    %r14,%rdi
mov    $0x1,%esi
mov    $0x5,%edx
xor    %eax,%eax
call   1060 <free_dvector@plt>
xor    %eax,%eax
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
ret

LLVM IR (-O0):
@main.x = internal global [6 x double] [double 0.000000e+00, double 1.000000e+00, double 1.500000e+00, double 2.000000e+00, double 2.500000e+00, double 3.000000e+00]
@main.q = internal global [6 x double] [double 0.000000e+00, double 1.000000e+00, double 1.500000e+00, double 2.000000e+00, double 2.500000e+00, double 3.000000e+00]
@.str = [19 x i8] c"\0ASolution vector:\0A\00"
@.str.1 = [17 x i8] c"%7s%1d%2s %12f \0A\00"
@.str.2 = [3 x i8] c"w[\00"
@.str.3 = [3 x i8] c"]=\00"
@.str.4 = [27 x i8] c"\0ATest of solution vector:\0A\00"
@.str.5 = [11 x i8] c"%14s %11s\0A\00"
@.str.6 = [11 x i8] c"mtrx*sol'n\00"
@.str.7 = [9 x i8] c"original\00"
@.str.8 = [15 x i8] c"%12.4f %12.4f\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
%4 = alloca double
%5 = alloca double*
%6 = alloca double*
store i32 0, i32* %1
store double 0.000000e+00, double* %4
%7 = call i32 (i32, i32, ...) bitcast (i32 (...)* @dvector to i32 (i32, i32, ...)*)(i32 1, i32 5)
%8 = sext i32 %7 to i64
%9 = inttoptr i64 %8 to double*
store double* %9, double** %5
%10 = call i32 (i32, i32, ...) bitcast (i32 (...)* @dvector to i32 (i32, i32, ...)*)(i32 1, i32 5)
%11 = sext i32 %10 to i64
%12 = inttoptr i64 %11 to double*
store double* %12, double** %6
%13 = load double*, double** %5
%14 = call i32 (double*, double*, double*, i32, ...) bitcast (i32 (...)* @vander to i32 (double*, double*, double*, i32, ...)*)(double* getelementptr inbounds ([6 x double], [6 x double]* @main.x, i64 0, i64 0), double* %13, double* getelementptr inbounds ([6 x double], [6 x double]* @main.q, i64 0, i64 0), i32 5)
%15 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str, i64 0, i64 0))
store i32 1, i32* %2
br label %16
16: ; preds = %27, %0
%17 = load i32, i32* %2
%18 = icmp sle i32 %17, 5
br i1 %18, label %19, label %30
19: ; preds = %16
%20 = load i32, i32* %2
%21 = load double*, double** %5
%22 = load i32, i32* %2
%23 = sext i32 %22 to i64
%24 = getelementptr inbounds double, double* %21, i64 %23
%25 = load double, double* %24
%26 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i32 %20, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0), double %25)
br label %27
27: ; preds = %19
%28 = load i32, i32* %2
%29 = add nsw i32 %28, 1
store i32 %29, i32* %2
br label %16
30: ; preds = %16
%31 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.4, i64 0, i64 0))
%32 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.5, i64 0, i64 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.6, i64 0, i64 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.7, i64 0, i64 0))
store i32 1, i32* %2
br label %33
33: ; preds = %53, %30
%34 = load i32, i32* %2
%35 = icmp sle i32 %34, 5
br i1 %35, label %36, label %56
36: ; preds = %33
%37 = load double*, double** %5
%38 = load i32, i32* %2
%39 = sext i32 %38 to i64
%40 = getelementptr inbounds double, double* %37, i64 %39
%41 = load double, double* %40
%42 = load double*, double** %6
%43 = load i32, i32* %2
%44 = sext i32 %43 to i64
%45 = getelementptr inbounds double, double* %42, i64 %44
store double %41, double* %45
%46 = load double*, double** %5
%47 = load i32, i32* %2
%48 = sext i32 %47 to i64
%49 = getelementptr inbounds double, double* %46, i64 %48
%50 = load double, double* %49
%51 = load double, double* %4
%52 = fadd double %51, %50
store double %52, double* %4
br label %53
53: ; preds = %36
%54 = load i32, i32* %2
%55 = add nsw i32 %54, 1
store i32 %55, i32* %2
br label %33
56: ; preds = %33
%57 = load double, double* %4
%58 = load double, double* getelementptr inbounds ([6 x double], [6 x double]* @main.q, i64 0, i64 1)
%59 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.8, i64 0, i64 0), double %57, double %58)
store i32 2, i32* %2
br label %60
60: ; preds = %95, %56
%61 = load i32, i32* %2
%62 = icmp sle i32 %61, 5
br i1 %62, label %63, label %98
63: ; preds = %60
store double 0.000000e+00, double* %4
store i32 1, i32* %3
br label %64
64: ; preds = %85, %63
%65 = load i32, i32* %3
%66 = icmp sle i32 %65, 5
br i1 %66, label %67, label %88
67: ; preds = %64
%68 = load i32, i32* %3
%69 = sext i32 %68 to i64
%70 = getelementptr inbounds [6 x double], [6 x double]* @main.x, i64 0, i64 %69
%71 = load double, double* %70
%72 = load double*, double** %6
%73 = load i32, i32* %3
%74 = sext i32 %73 to i64
%75 = getelementptr inbounds double, double* %72, i64 %74
%76 = load double, double* %75
%77 = fmul double %76, %71
store double %77, double* %75
%78 = load double*, double** %6
%79 = load i32, i32* %3
%80 = sext i32 %79 to i64
%81 = getelementptr inbounds double, double* %78, i64 %80
%82 = load double, double* %81
%83 = load double, double* %4
%84 = fadd double %83, %82
store double %84, double* %4
br label %85
85: ; preds = %67
%86 = load i32, i32* %3
%87 = add nsw i32 %86, 1
store i32 %87, i32* %3
br label %64
88: ; preds = %64
%89 = load double, double* %4
%90 = load i32, i32* %2
%91 = sext i32 %90 to i64
%92 = getelementptr inbounds [6 x double], [6 x double]* @main.q, i64 0, i64 %91
%93 = load double, double* %92
%94 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.8, i64 0, i64 0), double %89, double %93)
br label %95
95: ; preds = %88
%96 = load i32, i32* %2
%97 = add nsw i32 %96, 1
store i32 %97, i32* %2
br label %60
98: ; preds = %60
%99 = load double*, double** %6
%100 = call i32 (double*, i32, i32, ...) bitcast (i32 (...)* @free_dvector to i32 (double*, i32, i32, ...)*)(double* %99, i32 1, i32 5)
%101 = load double*, double** %5
%102 = call i32 (double*, i32, i32, ...) bitcast (i32 (...)* @free_dvector to i32 (double*, i32, i32, ...)*)(double* %101, i32 1, i32 5)
ret i32 0
}

LLVM IR (-O2):
@main.x = internal global [6 x double] [double 0.000000e+00, double 1.000000e+00, double 1.500000e+00, double 2.000000e+00, double 2.500000e+00, double 3.000000e+00]
@main.q = internal global [6 x double] [double 0.000000e+00, double 1.000000e+00, double 1.500000e+00, double 2.000000e+00, double 2.500000e+00, double 3.000000e+00]
@.str.1 = [17 x i8] c"%7s%1d%2s %12f \0A\00"
@.str.2 = [3 x i8] c"w[\00"
@.str.3 = [3 x i8] c"]=\00"
@.str.5 = [11 x i8] c"%14s %11s\0A\00"
@.str.6 = [11 x i8] c"mtrx*sol'n\00"
@.str.7 = [9 x i8] c"original\00"
@.str.8 = [15 x i8] c"%12.4f %12.4f\0A\00"
@str = [18 x i8] c"\0ASolution vector:\00"
@str.9 = [26 x i8] c"\0ATest of solution vector:\00"
define i32 @main() {
%1 = tail call i32 (i32, i32, ...) bitcast (i32 (...)* @dvector to i32 (i32, i32, ...)*)(i32 1, i32 5)
%2 = sext i32 %1 to i64
%3 = inttoptr i64 %2 to double*
%4 = tail call i32 (i32, i32, ...) bitcast (i32 (...)* @dvector to i32 (i32, i32, ...)*)(i32 1, i32 5)
%5 = sext i32 %4 to i64
%6 = tail call i32 (double*, double*, double*, i32, ...) bitcast (i32 (...)* @vander to i32 (double*, double*, double*, i32, ...)*)(double* getelementptr inbounds ([6 x double], [6 x double]* @main.x, i64 0, i64 0), double* %3, double* getelementptr inbounds ([6 x double], [6 x double]* @main.q, i64 0, i64 0), i32 5)
%7 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([18 x i8], [18 x i8]* @str, i64 0, i64 0))
%8 = getelementptr inbounds double, double* %3, i64 1
%9 = load double, double* %8
%10 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i32 1, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0), double %9)
%11 = getelementptr inbounds double, double* %3, i64 2
%12 = load double, double* %11
%13 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i32 2, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0), double %12)
%14 = getelementptr inbounds double, double* %3, i64 3
%15 = load double, double* %14
%16 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i32 3, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0), double %15)
%17 = getelementptr inbounds double, double* %3, i64 4
%18 = load double, double* %17
%19 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i32 4, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0), double %18)
%20 = getelementptr inbounds double, double* %3, i64 5
%21 = load double, double* %20
%22 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i32 5, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0), double %21)
%23 = inttoptr i64 %5 to double*
%24 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([26 x i8], [26 x i8]* @str.9, i64 0, i64 0))
%25 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @.str.5, i64 0, i64 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.6, i64 0, i64 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.7, i64 0, i64 0))
%26 = load double, double* %8
%27 = getelementptr inbounds double, double* %23, i64 1
store double %26, double* %27
%28 = load double, double* %8
%29 = fadd double %28, 0.000000e+00
%30 = load double, double* %11
%31 = getelementptr inbounds double, double* %23, i64 2
store double %30, double* %31
%32 = load double, double* %11
%33 = fadd double %29, %32
%34 = load double, double* %14
%35 = getelementptr inbounds double, double* %23, i64 3
store double %34, double* %35
%36 = load double, double* %14
%37 = fadd double %33, %36
%38 = load double, double* %17
%39 = getelementptr inbounds double, double* %23, i64 4
store double %38, double* %39
%40 = load double, double* %17
%41 = fadd double %37, %40
%42 = load double, double* %20
%43 = getelementptr inbounds double, double* %23, i64 5
store double %42, double* %43
%44 = load double, double* %20
%45 = fadd double %41, %44
%46 = load double, double* getelementptr inbounds ([6 x double], [6 x double]* @main.q, i64 0, i64 1)
%47 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([15 x i8], [15 x i8]* @.str.8, i64 0, i64 0), double %45, double %46)
%48 = load double, double* getelementptr inbounds ([6 x double], [6 x double]* @main.x, i64 0, i64 1)
%49 = load double, double* %27
%50 = fmul double %48, %49
store double %50, double* %27
%51 = fadd double %50, 0.000000e+00
%52 = load double, double* getelementptr inbounds ([6 x double], [6 x double]* @main.x, i64 0, i64 2)
%53 = load double, double* %31
%54 = fmul double %52, %53
store double %54, double* %31
%55 = fadd double %51, %54
%56 = load double, double* getelementptr inbounds ([6 x double], [6 x double]* @main.x, i64 0, i64 3)
%57 = load double, double* %35
%58 = fmul double %56, %57
store double %58, double* %35
%59 = fadd double %55, %58
%60 = load double, double* getelementptr inbounds ([6 x double], [6 x double]* @main.x, i64 0, i64 4)
%61 = load double, double* %39
%62 = fmul double %60, %61
store double %62, double* %39
%63 = fadd double %59, %62
%64 = load double, double* getelementptr inbounds ([6 x double], [6 x double]* @main.x, i64 0, i64 5)
%65 = load double, double* %43
%66 = fmul double %64, %65
store double %66, double* %43
%67 = fadd double %63, %66
%68 = load double, double* getelementptr inbounds ([6 x double], [6 x double]* @main.q, i64 0, i64 2)
%69 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([15 x i8], [15 x i8]* @.str.8, i64 0, i64 0), double %67, double %68)
%70 = load double, double* getelementptr inbounds ([6 x double], [6 x double]* @main.x, i64 0, i64 1)
%71 = load double, double* %27
%72 = fmul double %70, %71
store double %72, double* %27
%73 = fadd double %72, 0.000000e+00
%74 = load double, double* getelementptr inbounds ([6 x double], [6 x double]* @main.x, i64 0, i64 2)
%75 = load double, double* %31
%76 = fmul double %74, %75
store double %76, double* %31
%77 = fadd double %73, %76
%78 = load double, double* getelementptr inbounds ([6 x double], [6 x double]* @main.x, i64 0, i64 3)
%79 = load double, double* %35
%80 = fmul double %78, %79
store double %80, double* %35
%81 = fadd double %77, %80
%82 = load double, double* getelementptr inbounds ([6 x double], [6 x double]* @main.x, i64 0, i64 4)
%83 = load double, double* %39
%84 = fmul double %82, %83
store double %84, double* %39
%85 = fadd double %81, %84
%86 = load double, double* getelementptr inbounds ([6 x double], [6 x double]* @main.x, i64 0, i64 5)
%87 = load double, double* %43
%88 = fmul double %86, %87
store double %88, double* %43
%89 = fadd double %85, %88
%90 = load double, double* getelementptr inbounds ([6 x double], [6 x double]* @main.q, i64 0, i64 3)
%91 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([15 x i8], [15 x i8]* @.str.8, i64 0, i64 0), double %89, double %90)
%92 = load double, double* getelementptr inbounds ([6 x double], [6 x double]* @main.x, i64 0, i64 1)
%93 = load double, double* %27
%94 = fmul double %92, %93
store double %94, double* %27
%95 = fadd double %94, 0.000000e+00
%96 = load double, double* getelementptr inbounds ([6 x double], [6 x double]* @main.x, i64 0, i64 2)
%97 = load double, double* %31
%98 = fmul double %96, %97
store double %98, double* %31
%99 = fadd double %95, %98
%100 = load double, double* getelementptr inbounds ([6 x double], [6 x double]* @main.x, i64 0, i64 3)
%101 = load double, double* %35
%102 = fmul double %100, %101
store double %102, double* %35
%103 = fadd double %99, %102
%104 = load double, double* getelementptr inbounds ([6 x double], [6 x double]* @main.x, i64 0, i64 4)
%105 = load double, double* %39
%106 = fmul double %104, %105
store double %106, double* %39
%107 = fadd double %103, %106
%108 = load double, double* getelementptr inbounds ([6 x double], [6 x double]* @main.x, i64 0, i64 5)
%109 = load double, double* %43
%110 = fmul double %108, %109
store double %110, double* %43
%111 = fadd double %107, %110
%112 = load double, double* getelementptr inbounds ([6 x double], [6 x double]* @main.q, i64 0, i64 4)
%113 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([15 x i8], [15 x i8]* @.str.8, i64 0, i64 0), double %111, double %112)
%114 = load double, double* getelementptr inbounds ([6 x double], [6 x double]* @main.x, i64 0, i64 1)
%115 = load double, double* %27
%116 = fmul double %114, %115
store double %116, double* %27
%117 = fadd double %116, 0.000000e+00
%118 = load double, double* getelementptr inbounds ([6 x double], [6 x double]* @main.x, i64 0, i64 2)
%119 = load double, double* %31
%120 = fmul double %118, %119
store double %120, double* %31
%121 = fadd double %117, %120
%122 = load double, double* getelementptr inbounds ([6 x double], [6 x double]* @main.x, i64 0, i64 3)
%123 = load double, double* %35
%124 = fmul double %122, %123
store double %124, double* %35
%125 = fadd double %121, %124
%126 = load double, double* getelementptr inbounds ([6 x double], [6 x double]* @main.x, i64 0, i64 4)
%127 = load double, double* %39
%128 = fmul double %126, %127
store double %128, double* %39
%129 = fadd double %125, %128
%130 = load double, double* getelementptr inbounds ([6 x double], [6 x double]* @main.x, i64 0, i64 5)
%131 = load double, double* %43
%132 = fmul double %130, %131
store double %132, double* %43
%133 = fadd double %129, %132
%134 = load double, double* getelementptr inbounds ([6 x double], [6 x double]* @main.q, i64 0, i64 5)
%135 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([15 x i8], [15 x i8]* @.str.8, i64 0, i64 0), double %133, double %134)
%136 = tail call i32 (double*, i32, i32, ...) bitcast (i32 (...)* @free_dvector to i32 (double*, i32, i32, ...)*)(double* %23, i32 1, i32 5)
%137 = tail call i32 (double*, i32, i32, ...) bitcast (i32 (...)* @free_dvector to i32 (double*, i32, i32, ...)*)(double* %3, i32 1, i32 5)
ret i32 0
}