#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*/ getchar();
int /*<<< orphan*/ iniB(double *, double *);
int /*<<< orphan*/ iniMatriz(double **, double *);
int /*<<< orphan*/ inicializaciones(double *, double *, double *, double *);
scalar_t__ malloc(int);
int /*<<< orphan*/ printf(char *, ...);
int /*<<< orphan*/ solSistema(double **, double *, double *);
int /*<<< orphan*/ system(char *);
int main() {
  double X[7] = {40, 45, 50, 55, 60, 65, 70};
  double Y[7] = {390, 340, 290, 250, 210, 180, 160};
  double h[7 - 1];
  double A[7 - 1];
  double a[7 - 1];
  double b[7 - 1];
  double c[7 - 1];
  double d[7 - 1];
  double **matriz;
  double v[7];
  double B[7 - 2];
  int i;
  matriz = (double **)malloc((7 - 2) * sizeof(int *));
  for (i = 0; i < 7 - 2; i++)
    matriz[i] = (double *)malloc((7 - 2) * sizeof(int));
  inicializaciones(h, X, Y, A);
  iniB(B, A);
  iniMatriz(matriz, h);
  solSistema(matriz, B, v);
  for (i = 0; i < 7 - 1; i++) {
    a[i] = (v[i + 1] - v[i]) / (6 * h[i]);
    b[i] = v[i] / 2;
    c[i] = A[i] - ((2 * v[i] + v[i + 1]) / 6) * h[i];
    d[i] = Y[i];
  }
  for (i = 0; i < 6; i++)
    printf(" a%d:%lf", i, a[i]);
  printf("\n");
  for (i = 0; i < 6; i++)
    printf(" b%d:%lf", i, b[i]);
  printf("\n");
  for (i = 0; i < 6; i++)
    printf(" c%d:%lf", i, c[i]);
  printf("\n");
  for (i = 0; i < 6; i++)
    printf(" d%d:%lf", i, d[i]);
  printf("\n");
  getchar();
  system("PAUSE");
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x220,%rsp
movl   $0x0,-0x4(%rbp)
lea    -0x40(%rbp),%rdi
lea    0xe63(%rip),%rsi
mov    $0x38,%edx
call   1080 <memcpy@plt>
lea    -0x80(%rbp),%rdi
lea    0xe8e(%rip),%rsi
mov    $0x38,%edx
call   1080 <memcpy@plt>
mov    $0x28,%edi
call   1090 <malloc@plt>
mov    %rax,-0x1a8(%rbp)
movl   $0x0,-0x214(%rbp)
cmpl   $0x5,-0x214(%rbp)
jge    1227 <main+0x97>
mov    $0x14,%edi
call   1090 <malloc@plt>
mov    %rax,%rdx
mov    -0x1a8(%rbp),%rax
movslq -0x214(%rbp),%rcx
mov    %rdx,(%rax,%rcx,8)
mov    -0x214(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x214(%rbp)
jmp    11e7 <main+0x57>
lea    -0xb0(%rbp),%rdi
lea    -0x40(%rbp),%rsi
lea    -0x80(%rbp),%rdx
lea    -0xe0(%rbp),%rcx
call   10b0 <inicializaciones@plt>
lea    -0x210(%rbp),%rdi
lea    -0xe0(%rbp),%rsi
call   1060 <iniB@plt>
mov    -0x1a8(%rbp),%rdi
lea    -0xb0(%rbp),%rsi
call   1050 <iniMatriz@plt>
mov    -0x1a8(%rbp),%rdi
lea    -0x210(%rbp),%rsi
lea    -0x1e0(%rbp),%rdx
call   10a0 <solSistema@plt>
movl   $0x0,-0x214(%rbp)
cmpl   $0x6,-0x214(%rbp)
jge    13cd <main+0x23d>
mov    -0x214(%rbp),%eax
add    $0x1,%eax
cltq
movsd  -0x1e0(%rbp,%rax,8),%xmm0
ff ff
movslq -0x214(%rbp),%rax
subsd  -0x1e0(%rbp,%rax,8),%xmm0
ff ff
movslq -0x214(%rbp),%rax
movsd  0xd34(%rip),%xmm1
mulsd  -0xb0(%rbp,%rax,8),%xmm1
ff ff
divsd  %xmm1,%xmm0
movslq -0x214(%rbp),%rax
movsd  %xmm0,-0x110(%rbp,%rax,8)
ff ff
movslq -0x214(%rbp),%rax
movsd  -0x1e0(%rbp,%rax,8),%xmm0
ff ff
movsd  0xd07(%rip),%xmm1
divsd  %xmm1,%xmm0
movslq -0x214(%rbp),%rax
movsd  %xmm0,-0x140(%rbp,%rax,8)
ff ff
movslq -0x214(%rbp),%rax
movsd  -0xe0(%rbp,%rax,8),%xmm1
ff ff
movslq -0x214(%rbp),%rax
movsd  -0x1e0(%rbp,%rax,8),%xmm0
ff ff
mov    -0x214(%rbp),%eax
add    $0x1,%eax
cltq
movsd  -0x1e0(%rbp,%rax,8),%xmm2
ff ff
addsd  %xmm0,%xmm0
addsd  %xmm2,%xmm0
movsd  0xca7(%rip),%xmm2
divsd  %xmm2,%xmm0
movslq -0x214(%rbp),%rax
movsd  -0xb0(%rbp,%rax,8),%xmm2
ff ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movslq -0x214(%rbp),%rax
movsd  %xmm0,-0x170(%rbp,%rax,8)
ff ff
movslq -0x214(%rbp),%rax
movsd  -0x80(%rbp,%rax,8),%xmm0
movslq -0x214(%rbp),%rax
movsd  %xmm0,-0x1a0(%rbp,%rax,8)
ff ff
mov    -0x214(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x214(%rbp)
jmp    128c <main+0xfc>
movl   $0x0,-0x214(%rbp)
cmpl   $0x6,-0x214(%rbp)
jge    141c <main+0x28c>
mov    -0x214(%rbp),%esi
movslq -0x214(%rbp),%rax
movsd  -0x110(%rbp,%rax,8),%xmm0
ff ff
lea    0xc87(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    -0x214(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x214(%rbp)
jmp    13d7 <main+0x247>
lea    0xc6e(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x214(%rbp)
cmpl   $0x6,-0x214(%rbp)
jge    1479 <main+0x2e9>
mov    -0x214(%rbp),%esi
movslq -0x214(%rbp),%rax
movsd  -0x140(%rbp,%rax,8),%xmm0
ff ff
lea    0xc35(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    -0x214(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x214(%rbp)
jmp    1434 <main+0x2a4>
lea    0xc11(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x214(%rbp)
cmpl   $0x6,-0x214(%rbp)
jge    14d6 <main+0x346>
mov    -0x214(%rbp),%esi
movslq -0x214(%rbp),%rax
movsd  -0x170(%rbp,%rax,8),%xmm0
ff ff
lea    0xbe1(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    -0x214(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x214(%rbp)
jmp    1491 <main+0x301>
lea    0xbb4(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x214(%rbp)
cmpl   $0x6,-0x214(%rbp)
jge    1533 <main+0x3a3>
mov    -0x214(%rbp),%esi
movslq -0x214(%rbp),%rax
movsd  -0x1a0(%rbp,%rax,8),%xmm0
ff ff
lea    0xb8d(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    -0x214(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x214(%rbp)
jmp    14ee <main+0x35e>
lea    0xb57(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    $0x0,%al
call   1070 <getchar@plt>
lea    0xb5f(%rip),%rdi
call   1030 <system@plt>
xor    %eax,%eax
add    $0x220,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %r15
push   %r14
push   %r12
push   %rbx
sub    $0x208,%rsp
mov    0xeab(%rip),%rax
mov    %rax,0x1d0(%rsp)
movaps 0xe8c(%rip),%xmm0
movaps %xmm0,0x1c0(%rsp)
movaps 0xe6d(%rip),%xmm0
movaps %xmm0,0x1b0(%rsp)
movaps 0xe4e(%rip),%xmm0
movaps %xmm0,0x1a0(%rsp)
mov    0xeaf(%rip),%rax
mov    %rax,0xf0(%rsp)
movaps 0xe90(%rip),%xmm0
movaps %xmm0,0xe0(%rsp)
movaps 0xe71(%rip),%xmm0
movaps %xmm0,0xd0(%rsp)
movaps 0xe52(%rip),%xmm0
movaps %xmm0,0xc0(%rsp)
mov    $0x28,%edi
call   1090 <malloc@plt>
mov    %rax,%rbx
mov    $0x14,%edi
call   1090 <malloc@plt>
mov    %rax,(%rbx)
mov    $0x14,%edi
call   1090 <malloc@plt>
mov    %rax,0x8(%rbx)
mov    $0x14,%edi
call   1090 <malloc@plt>
mov    %rax,0x10(%rbx)
mov    $0x14,%edi
call   1090 <malloc@plt>
mov    %rax,0x18(%rbx)
mov    $0x14,%edi
call   1090 <malloc@plt>
mov    %rax,0x20(%rbx)
lea    0x130(%rsp),%r14
lea    0x1a0(%rsp),%rsi
lea    0xc0(%rsp),%rdx
lea    0x100(%rsp),%r15
mov    %r14,%rdi
mov    %r15,%rcx
call   10b0 <inicializaciones@plt>
lea    0x1e0(%rsp),%r12
mov    %r12,%rdi
mov    %r15,%rsi
call   1070 <iniB@plt>
mov    %rbx,%rdi
mov    %r14,%rsi
call   1060 <iniMatriz@plt>
lea    0x160(%rsp),%rdx
mov    %rbx,%rdi
mov    %r12,%rsi
call   10a0 <solSistema@plt>
movsd  0x160(%rsp),%xmm6
movsd  0x168(%rsp),%xmm5
movapd %xmm5,%xmm8
subsd  %xmm6,%xmm8
movsd  0x130(%rsp),%xmm4
movsd  0x138(%rsp),%xmm3
movsd  0xd06(%rip),%xmm1
movapd %xmm6,%xmm9
addsd  %xmm6,%xmm6
addsd  %xmm5,%xmm6
movsd  0xd01(%rip),%xmm0
divsd  %xmm0,%xmm6
mulsd  %xmm4,%xmm6
mulsd  %xmm1,%xmm4
divsd  %xmm4,%xmm8
movsd  0x170(%rsp),%xmm4
movapd %xmm4,%xmm2
subsd  %xmm5,%xmm2
movapd %xmm5,%xmm11
addsd  %xmm5,%xmm5
addsd  %xmm4,%xmm5
divsd  %xmm0,%xmm5
mulsd  %xmm3,%xmm5
movapd %xmm5,%xmm10
mulsd  %xmm1,%xmm3
divsd  %xmm3,%xmm2
movsd  %xmm2,0x50(%rsp)
movsd  0x178(%rsp),%xmm5
movapd %xmm5,%xmm2
subsd  %xmm4,%xmm2
movsd  0x140(%rsp),%xmm3
movapd %xmm4,%xmm13
addsd  %xmm4,%xmm4
addsd  %xmm5,%xmm4
divsd  %xmm0,%xmm4
mulsd  %xmm3,%xmm4
movapd %xmm4,%xmm12
mulsd  %xmm1,%xmm3
divsd  %xmm3,%xmm2
movsd  %xmm2,0x38(%rsp)
movsd  0x180(%rsp),%xmm4
movapd %xmm4,%xmm2
subsd  %xmm5,%xmm2
movsd  0x148(%rsp),%xmm3
movapd %xmm5,%xmm15
addsd  %xmm5,%xmm5
addsd  %xmm4,%xmm5
divsd  %xmm0,%xmm5
mulsd  %xmm3,%xmm5
movapd %xmm5,%xmm14
mulsd  %xmm1,%xmm3
divsd  %xmm3,%xmm2
movsd  %xmm2,0x18(%rsp)
movsd  0x188(%rsp),%xmm5
movapd %xmm5,%xmm2
subsd  %xmm4,%xmm2
movapd %xmm4,%xmm7
addsd  %xmm4,%xmm4
addsd  %xmm5,%xmm4
divsd  %xmm0,%xmm4
movsd  0x150(%rsp),%xmm3
mulsd  %xmm3,%xmm4
mulsd  %xmm1,%xmm3
divsd  %xmm3,%xmm2
movsd  %xmm2,0x10(%rsp)
movsd  0x190(%rsp),%xmm3
movapd %xmm3,%xmm2
subsd  %xmm5,%xmm2
movsd  0x158(%rsp),%xmm0
mulsd  %xmm0,%xmm1
divsd  %xmm1,%xmm2
movsd  %xmm2,0x8(%rsp)
movsd  0xbbf(%rip),%xmm1
mulsd  %xmm1,%xmm9
movsd  %xmm9,0x20(%rsp)
mulsd  %xmm1,%xmm11
movsd  %xmm11,0x28(%rsp)
mulsd  %xmm1,%xmm13
movsd  %xmm13,0x30(%rsp)
mulsd  %xmm1,%xmm15
movsd  %xmm15,0x40(%rsp)
mulsd  %xmm1,%xmm7
movsd  %xmm7,0x48(%rsp)
mulsd  %xmm5,%xmm1
movsd  %xmm1,0x58(%rsp)
addsd  %xmm5,%xmm5
addsd  %xmm3,%xmm5
divsd  0xb73(%rip),%xmm5
mulsd  %xmm0,%xmm5
addsd  0x100(%rsp),%xmm6
movsd  %xmm6,0x60(%rsp)
addsd  0x108(%rsp),%xmm10
movsd  %xmm10,0x68(%rsp)
addsd  0x110(%rsp),%xmm12
movsd  %xmm12,0x70(%rsp)
addsd  0x118(%rsp),%xmm14
movsd  %xmm14,0x78(%rsp)
addsd  0x120(%rsp),%xmm4
movsd  %xmm4,0x80(%rsp)
addsd  0x128(%rsp),%xmm5
movsd  %xmm5,0x88(%rsp)
movsd  0xc0(%rsp),%xmm1
movsd  %xmm1,0x90(%rsp)
movsd  0xc8(%rsp),%xmm1
movsd  %xmm1,0x98(%rsp)
movsd  0xd0(%rsp),%xmm1
movsd  %xmm1,0xa0(%rsp)
movsd  0xd8(%rsp),%xmm1
movsd  %xmm1,0xa8(%rsp)
movsd  0xe0(%rsp),%xmm1
movsd  %xmm1,0xb0(%rsp)
movsd  0xe8(%rsp),%xmm1
movsd  %xmm1,0xb8(%rsp)
lea    0xb1e(%rip),%rbx
mov    %rbx,%rdi
xor    %esi,%esi
movapd %xmm8,%xmm0
mov    $0x1,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
mov    $0x1,%esi
movsd  0x50(%rsp),%xmm0
mov    $0x1,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
mov    $0x2,%esi
movsd  0x38(%rsp),%xmm0
mov    $0x1,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
mov    $0x3,%esi
movsd  0x18(%rsp),%xmm0
mov    $0x1,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
mov    $0x4,%esi
movsd  0x10(%rsp),%xmm0
mov    $0x1,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
mov    $0x5,%esi
movsd  0x8(%rsp),%xmm0
mov    $0x1,%al
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0xa9c(%rip),%rbx
mov    %rbx,%rdi
xor    %esi,%esi
movsd  0x20(%rsp),%xmm0
mov    $0x1,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
mov    $0x1,%esi
movsd  0x28(%rsp),%xmm0
mov    $0x1,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
mov    $0x2,%esi
movsd  0x30(%rsp),%xmm0
mov    $0x1,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
mov    $0x3,%esi
movsd  0x40(%rsp),%xmm0
mov    $0x1,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
mov    $0x4,%esi
movsd  0x48(%rsp),%xmm0
mov    $0x1,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
mov    $0x5,%esi
movsd  0x58(%rsp),%xmm0
mov    $0x1,%al
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0xa19(%rip),%rbx
mov    %rbx,%rdi
xor    %esi,%esi
movsd  0x60(%rsp),%xmm0
mov    $0x1,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
mov    $0x1,%esi
movsd  0x68(%rsp),%xmm0
mov    $0x1,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
mov    $0x2,%esi
movsd  0x70(%rsp),%xmm0
mov    $0x1,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
mov    $0x3,%esi
movsd  0x78(%rsp),%xmm0
mov    $0x1,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
mov    $0x4,%esi
movsd  0x80(%rsp),%xmm0
mov    $0x1,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
mov    $0x5,%esi
movsd  0x88(%rsp),%xmm0
mov    $0x1,%al
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x990(%rip),%rbx
mov    %rbx,%rdi
xor    %esi,%esi
movsd  0x90(%rsp),%xmm0
mov    $0x1,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
mov    $0x1,%esi
movsd  0x98(%rsp),%xmm0
mov    $0x1,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
mov    $0x2,%esi
movsd  0xa0(%rsp),%xmm0
mov    $0x1,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
mov    $0x3,%esi
movsd  0xa8(%rsp),%xmm0
mov    $0x1,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
mov    $0x4,%esi
movsd  0xb0(%rsp),%xmm0
mov    $0x1,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
mov    $0x5,%esi
movsd  0xb8(%rsp),%xmm0
mov    $0x1,%al
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
xor    %eax,%eax
call   1080 <getchar@plt>
lea    0x8f4(%rip),%rdi
call   1040 <system@plt>
xor    %eax,%eax
add    $0x208,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
ret

LLVM IR (-O0):
@__const.main.X = [7 x double] [double 4.000000e+01, double 4.500000e+01, double 5.000000e+01, double 5.500000e+01, double 6.000000e+01, double 6.500000e+01, double 7.000000e+01]
@__const.main.Y = [7 x double] [double 3.900000e+02, double 3.400000e+02, double 2.900000e+02, double 2.500000e+02, double 2.100000e+02, double 1.800000e+02, double 1.600000e+02]
@.str = [9 x i8] c" a%d:%lf\00"
@.str.1 = [2 x i8] c"\0A\00"
@.str.2 = [9 x i8] c" b%d:%lf\00"
@.str.3 = [9 x i8] c" c%d:%lf\00"
@.str.4 = [9 x i8] c" d%d:%lf\00"
@.str.5 = [6 x i8] c"PAUSE\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca [7 x double]
%3 = alloca [7 x double]
%4 = alloca [6 x double]
%5 = alloca [6 x double]
%6 = alloca [6 x double]
%7 = alloca [6 x double]
%8 = alloca [6 x double]
%9 = alloca [6 x double]
%10 = alloca double**
%11 = alloca [7 x double]
%12 = alloca [5 x double]
%13 = alloca i32
store i32 0, i32* %1
%14 = bitcast [7 x double]* %2 to i8*
%15 = bitcast [7 x double]* %3 to i8*
%16 = call i64 @malloc(i32 40)
%17 = inttoptr i64 %16 to double**
store double** %17, double*** %10
store i32 0, i32* %13
br label %18
18: ; preds = %28, %0
%19 = load i32, i32* %13
%20 = icmp slt i32 %19, 5
br i1 %20, label %21, label %31
21: ; preds = %18
%22 = call i64 @malloc(i32 20)
%23 = inttoptr i64 %22 to double*
%24 = load double**, double*** %10
%25 = load i32, i32* %13
%26 = sext i32 %25 to i64
%27 = getelementptr inbounds double*, double** %24, i64 %26
store double* %23, double** %27
br label %28
28: ; preds = %21
%29 = load i32, i32* %13
%30 = add nsw i32 %29, 1
store i32 %30, i32* %13
br label %18
31: ; preds = %18
%32 = getelementptr inbounds [6 x double], [6 x double]* %4, i64 0, i64 0
%33 = getelementptr inbounds [7 x double], [7 x double]* %2, i64 0, i64 0
%34 = getelementptr inbounds [7 x double], [7 x double]* %3, i64 0, i64 0
%35 = getelementptr inbounds [6 x double], [6 x double]* %5, i64 0, i64 0
%36 = call i32 @inicializaciones(double* %32, double* %33, double* %34, double* %35)
%37 = getelementptr inbounds [5 x double], [5 x double]* %12, i64 0, i64 0
%38 = getelementptr inbounds [6 x double], [6 x double]* %5, i64 0, i64 0
%39 = call i32 @iniB(double* %37, double* %38)
%40 = load double**, double*** %10
%41 = getelementptr inbounds [6 x double], [6 x double]* %4, i64 0, i64 0
%42 = call i32 @iniMatriz(double** %40, double* %41)
%43 = load double**, double*** %10
%44 = getelementptr inbounds [5 x double], [5 x double]* %12, i64 0, i64 0
%45 = getelementptr inbounds [7 x double], [7 x double]* %11, i64 0, i64 0
%46 = call i32 @solSistema(double** %43, double* %44, double* %45)
store i32 0, i32* %13
br label %47
47: ; preds = %109, %31
%48 = load i32, i32* %13
%49 = icmp slt i32 %48, 6
br i1 %49, label %50, label %112
50: ; preds = %47
%51 = load i32, i32* %13
%52 = add nsw i32 %51, 1
%53 = sext i32 %52 to i64
%54 = getelementptr inbounds [7 x double], [7 x double]* %11, i64 0, i64 %53
%55 = load double, double* %54
%56 = load i32, i32* %13
%57 = sext i32 %56 to i64
%58 = getelementptr inbounds [7 x double], [7 x double]* %11, i64 0, i64 %57
%59 = load double, double* %58
%60 = fsub double %55, %59
%61 = load i32, i32* %13
%62 = sext i32 %61 to i64
%63 = getelementptr inbounds [6 x double], [6 x double]* %4, i64 0, i64 %62
%64 = load double, double* %63
%65 = fmul double 6.000000e+00, %64
%66 = fdiv double %60, %65
%67 = load i32, i32* %13
%68 = sext i32 %67 to i64
%69 = getelementptr inbounds [6 x double], [6 x double]* %6, i64 0, i64 %68
store double %66, double* %69
%70 = load i32, i32* %13
%71 = sext i32 %70 to i64
%72 = getelementptr inbounds [7 x double], [7 x double]* %11, i64 0, i64 %71
%73 = load double, double* %72
%74 = fdiv double %73, 2.000000e+00
%75 = load i32, i32* %13
%76 = sext i32 %75 to i64
%77 = getelementptr inbounds [6 x double], [6 x double]* %7, i64 0, i64 %76
store double %74, double* %77
%78 = load i32, i32* %13
%79 = sext i32 %78 to i64
%80 = getelementptr inbounds [6 x double], [6 x double]* %5, i64 0, i64 %79
%81 = load double, double* %80
%82 = load i32, i32* %13
%83 = sext i32 %82 to i64
%84 = getelementptr inbounds [7 x double], [7 x double]* %11, i64 0, i64 %83
%85 = load double, double* %84
%86 = load i32, i32* %13
%87 = add nsw i32 %86, 1
%88 = sext i32 %87 to i64
%89 = getelementptr inbounds [7 x double], [7 x double]* %11, i64 0, i64 %88
%90 = load double, double* %89
%91 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %85, double %90)
%92 = fdiv double %91, 6.000000e+00
%93 = load i32, i32* %13
%94 = sext i32 %93 to i64
%95 = getelementptr inbounds [6 x double], [6 x double]* %4, i64 0, i64 %94
%96 = load double, double* %95
%97 = fneg double %92
%98 = call double @llvm.fmuladd.f64(double %97, double %96, double %81)
%99 = load i32, i32* %13
%100 = sext i32 %99 to i64
%101 = getelementptr inbounds [6 x double], [6 x double]* %8, i64 0, i64 %100
store double %98, double* %101
%102 = load i32, i32* %13
%103 = sext i32 %102 to i64
%104 = getelementptr inbounds [7 x double], [7 x double]* %3, i64 0, i64 %103
%105 = load double, double* %104
%106 = load i32, i32* %13
%107 = sext i32 %106 to i64
%108 = getelementptr inbounds [6 x double], [6 x double]* %9, i64 0, i64 %107
store double %105, double* %108
br label %109
109: ; preds = %50
%110 = load i32, i32* %13
%111 = add nsw i32 %110, 1
store i32 %111, i32* %13
br label %47
112: ; preds = %47
store i32 0, i32* %13
br label %113
113: ; preds = %123, %112
%114 = load i32, i32* %13
%115 = icmp slt i32 %114, 6
br i1 %115, label %116, label %126
116: ; preds = %113
%117 = load i32, i32* %13
%118 = load i32, i32* %13
%119 = sext i32 %118 to i64
%120 = getelementptr inbounds [6 x double], [6 x double]* %6, i64 0, i64 %119
%121 = load double, double* %120
%122 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0), i32 %117, double %121)
br label %123
123: ; preds = %116
%124 = load i32, i32* %13
%125 = add nsw i32 %124, 1
store i32 %125, i32* %13
br label %113
126: ; preds = %113
%127 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
store i32 0, i32* %13
br label %128
128: ; preds = %138, %126
%129 = load i32, i32* %13
%130 = icmp slt i32 %129, 6
br i1 %130, label %131, label %141
131: ; preds = %128
%132 = load i32, i32* %13
%133 = load i32, i32* %13
%134 = sext i32 %133 to i64
%135 = getelementptr inbounds [6 x double], [6 x double]* %7, i64 0, i64 %134
%136 = load double, double* %135
%137 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), i32 %132, double %136)
br label %138
138: ; preds = %131
%139 = load i32, i32* %13
%140 = add nsw i32 %139, 1
store i32 %140, i32* %13
br label %128
141: ; preds = %128
%142 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
store i32 0, i32* %13
br label %143
143: ; preds = %153, %141
%144 = load i32, i32* %13
%145 = icmp slt i32 %144, 6
br i1 %145, label %146, label %156
146: ; preds = %143
%147 = load i32, i32* %13
%148 = load i32, i32* %13
%149 = sext i32 %148 to i64
%150 = getelementptr inbounds [6 x double], [6 x double]* %8, i64 0, i64 %149
%151 = load double, double* %150
%152 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.3, i64 0, i64 0), i32 %147, double %151)
br label %153
153: ; preds = %146
%154 = load i32, i32* %13
%155 = add nsw i32 %154, 1
store i32 %155, i32* %13
br label %143
156: ; preds = %143
%157 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
store i32 0, i32* %13
br label %158
158: ; preds = %168, %156
%159 = load i32, i32* %13
%160 = icmp slt i32 %159, 6
br i1 %160, label %161, label %171
161: ; preds = %158
%162 = load i32, i32* %13
%163 = load i32, i32* %13
%164 = sext i32 %163 to i64
%165 = getelementptr inbounds [6 x double], [6 x double]* %9, i64 0, i64 %164
%166 = load double, double* %165
%167 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.4, i64 0, i64 0), i32 %162, double %166)
br label %168
168: ; preds = %161
%169 = load i32, i32* %13
%170 = add nsw i32 %169, 1
store i32 %170, i32* %13
br label %158
171: ; preds = %158
%172 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
%173 = call i32 (...) @getchar()
%174 = call i32 @system(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0))
ret i32 0
}

LLVM IR (-O2):
@__const.main.X = [7 x double] [double 4.000000e+01, double 4.500000e+01, double 5.000000e+01, double 5.500000e+01, double 6.000000e+01, double 6.500000e+01, double 7.000000e+01]
@__const.main.Y = [7 x double] [double 3.900000e+02, double 3.400000e+02, double 2.900000e+02, double 2.500000e+02, double 2.100000e+02, double 1.800000e+02, double 1.600000e+02]
@.str = [9 x i8] c" a%d:%lf\00"
@.str.2 = [9 x i8] c" b%d:%lf\00"
@.str.3 = [9 x i8] c" c%d:%lf\00"
@.str.4 = [9 x i8] c" d%d:%lf\00"
@.str.5 = [6 x i8] c"PAUSE\00"
define i32 @main() {
%1 = alloca [7 x double]
%2 = alloca [7 x double]
%3 = alloca [6 x double]
%4 = alloca [6 x double]
%5 = alloca [7 x double]
%6 = alloca [5 x double]
%7 = bitcast [7 x double]* %1 to i8*
%8 = bitcast [7 x double]* %2 to i8*
%9 = bitcast [6 x double]* %3 to i8*
%10 = bitcast [6 x double]* %4 to i8*
%11 = bitcast [7 x double]* %5 to i8*
%12 = bitcast [5 x double]* %6 to i8*
%13 = tail call i64 @malloc(i32 40)
%14 = inttoptr i64 %13 to double**
%15 = tail call i64 @malloc(i32 20)
%16 = inttoptr i64 %15 to double*
store double* %16, double** %14
%17 = tail call i64 @malloc(i32 20)
%18 = inttoptr i64 %17 to double*
%19 = getelementptr inbounds double*, double** %14, i64 1
store double* %18, double** %19
%20 = tail call i64 @malloc(i32 20)
%21 = inttoptr i64 %20 to double*
%22 = getelementptr inbounds double*, double** %14, i64 2
store double* %21, double** %22
%23 = tail call i64 @malloc(i32 20)
%24 = inttoptr i64 %23 to double*
%25 = getelementptr inbounds double*, double** %14, i64 3
store double* %24, double** %25
%26 = tail call i64 @malloc(i32 20)
%27 = inttoptr i64 %26 to double*
%28 = getelementptr inbounds double*, double** %14, i64 4
store double* %27, double** %28
%29 = getelementptr inbounds [6 x double], [6 x double]* %3, i64 0, i64 0
%30 = getelementptr inbounds [7 x double], [7 x double]* %1, i64 0, i64 0
%31 = getelementptr inbounds [7 x double], [7 x double]* %2, i64 0, i64 0
%32 = getelementptr inbounds [6 x double], [6 x double]* %4, i64 0, i64 0
%33 = call i32 @inicializaciones(double* %29, double* %30, double* %31, double* %32)
%34 = getelementptr inbounds [5 x double], [5 x double]* %6, i64 0, i64 0
%35 = call i32 @iniB(double* %34, double* %32)
%36 = call i32 @iniMatriz(double** %14, double* %29)
%37 = getelementptr inbounds [7 x double], [7 x double]* %5, i64 0, i64 0
%38 = call i32 @solSistema(double** %14, double* %34, double* %37)
%39 = load double, double* %31
%40 = getelementptr inbounds [7 x double], [7 x double]* %2, i64 0, i64 1
%41 = load double, double* %40
%42 = getelementptr inbounds [7 x double], [7 x double]* %2, i64 0, i64 2
%43 = load double, double* %42
%44 = getelementptr inbounds [7 x double], [7 x double]* %2, i64 0, i64 3
%45 = load double, double* %44
%46 = getelementptr inbounds [7 x double], [7 x double]* %2, i64 0, i64 4
%47 = load double, double* %46
%48 = getelementptr inbounds [7 x double], [7 x double]* %2, i64 0, i64 5
%49 = load double, double* %48
%50 = getelementptr inbounds [7 x double], [7 x double]* %5, i64 0, i64 1
%51 = load double, double* %50
%52 = load double, double* %37
%53 = fsub double %51, %52
%54 = load double, double* %29
%55 = fmul double %54, 6.000000e+00
%56 = fdiv double %53, %55
%57 = fmul double %52, 5.000000e-01
%58 = load double, double* %32
%59 = call double @llvm.fmuladd.f64(double %52, double 2.000000e+00, double %51)
%60 = fdiv double %59, -6.000000e+00
%61 = call double @llvm.fmuladd.f64(double %60, double %54, double %58)
%62 = getelementptr inbounds [7 x double], [7 x double]* %5, i64 0, i64 2
%63 = load double, double* %62
%64 = fsub double %63, %51
%65 = getelementptr inbounds [6 x double], [6 x double]* %3, i64 0, i64 1
%66 = load double, double* %65
%67 = fmul double %66, 6.000000e+00
%68 = fdiv double %64, %67
%69 = fmul double %51, 5.000000e-01
%70 = getelementptr inbounds [6 x double], [6 x double]* %4, i64 0, i64 1
%71 = load double, double* %70
%72 = call double @llvm.fmuladd.f64(double %51, double 2.000000e+00, double %63)
%73 = fdiv double %72, -6.000000e+00
%74 = call double @llvm.fmuladd.f64(double %73, double %66, double %71)
%75 = getelementptr inbounds [7 x double], [7 x double]* %5, i64 0, i64 3
%76 = load double, double* %75
%77 = fsub double %76, %63
%78 = getelementptr inbounds [6 x double], [6 x double]* %3, i64 0, i64 2
%79 = load double, double* %78
%80 = fmul double %79, 6.000000e+00
%81 = fdiv double %77, %80
%82 = fmul double %63, 5.000000e-01
%83 = getelementptr inbounds [6 x double], [6 x double]* %4, i64 0, i64 2
%84 = load double, double* %83
%85 = call double @llvm.fmuladd.f64(double %63, double 2.000000e+00, double %76)
%86 = fdiv double %85, -6.000000e+00
%87 = call double @llvm.fmuladd.f64(double %86, double %79, double %84)
%88 = getelementptr inbounds [7 x double], [7 x double]* %5, i64 0, i64 4
%89 = load double, double* %88
%90 = fsub double %89, %76
%91 = getelementptr inbounds [6 x double], [6 x double]* %3, i64 0, i64 3
%92 = load double, double* %91
%93 = fmul double %92, 6.000000e+00
%94 = fdiv double %90, %93
%95 = fmul double %76, 5.000000e-01
%96 = getelementptr inbounds [6 x double], [6 x double]* %4, i64 0, i64 3
%97 = load double, double* %96
%98 = call double @llvm.fmuladd.f64(double %76, double 2.000000e+00, double %89)
%99 = fdiv double %98, -6.000000e+00
%100 = call double @llvm.fmuladd.f64(double %99, double %92, double %97)
%101 = getelementptr inbounds [7 x double], [7 x double]* %5, i64 0, i64 5
%102 = load double, double* %101
%103 = fsub double %102, %89
%104 = getelementptr inbounds [6 x double], [6 x double]* %3, i64 0, i64 4
%105 = load double, double* %104
%106 = fmul double %105, 6.000000e+00
%107 = fdiv double %103, %106
%108 = fmul double %89, 5.000000e-01
%109 = getelementptr inbounds [6 x double], [6 x double]* %4, i64 0, i64 4
%110 = load double, double* %109
%111 = call double @llvm.fmuladd.f64(double %89, double 2.000000e+00, double %102)
%112 = fdiv double %111, -6.000000e+00
%113 = call double @llvm.fmuladd.f64(double %112, double %105, double %110)
%114 = getelementptr inbounds [7 x double], [7 x double]* %5, i64 0, i64 6
%115 = load double, double* %114
%116 = fsub double %115, %102
%117 = getelementptr inbounds [6 x double], [6 x double]* %3, i64 0, i64 5
%118 = load double, double* %117
%119 = fmul double %118, 6.000000e+00
%120 = fdiv double %116, %119
%121 = fmul double %102, 5.000000e-01
%122 = getelementptr inbounds [6 x double], [6 x double]* %4, i64 0, i64 5
%123 = load double, double* %122
%124 = call double @llvm.fmuladd.f64(double %102, double 2.000000e+00, double %115)
%125 = fdiv double %124, -6.000000e+00
%126 = call double @llvm.fmuladd.f64(double %125, double %118, double %123)
%127 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0), i32 0, double %56)
%128 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0), i32 1, double %68)
%129 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0), i32 2, double %81)
%130 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0), i32 3, double %94)
%131 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0), i32 4, double %107)
%132 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0), i32 5, double %120)
%133 = call i32 @putchar(i32 10)
%134 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), i32 0, double %57)
%135 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), i32 1, double %69)
%136 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), i32 2, double %82)
%137 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), i32 3, double %95)
%138 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), i32 4, double %108)
%139 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), i32 5, double %121)
%140 = call i32 @putchar(i32 10)
%141 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.3, i64 0, i64 0), i32 0, double %61)
%142 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.3, i64 0, i64 0), i32 1, double %74)
%143 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.3, i64 0, i64 0), i32 2, double %87)
%144 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.3, i64 0, i64 0), i32 3, double %100)
%145 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.3, i64 0, i64 0), i32 4, double %113)
%146 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.3, i64 0, i64 0), i32 5, double %126)
%147 = call i32 @putchar(i32 10)
%148 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.4, i64 0, i64 0), i32 0, double %39)
%149 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.4, i64 0, i64 0), i32 1, double %41)
%150 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.4, i64 0, i64 0), i32 2, double %43)
%151 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.4, i64 0, i64 0), i32 3, double %45)
%152 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.4, i64 0, i64 0), i32 4, double %47)
%153 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.4, i64 0, i64 0), i32 5, double %49)
%154 = call i32 @putchar(i32 10)
%155 = call i32 (...) @getchar()
%156 = call i32 @system(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0))
ret i32 0
}