#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*/ imprime(int, int, float **);
int /*<<< orphan*/ procesado(int, int, int, int, float **, float **);
int main() {
  float entrada[10][5] = {
      {1.0, 2017.0, 2.0, 2.0, 100.0},   {3.0, 2017.0, 2.0, 2.0, 120.0},
      {5.0, 2017.0, 2.0, 2.0, 20.0},    {100.0, 2017.0, 2.0, 2.0, 120.0},
      {3.0, 2017.0, 2.0, 3.0, 200.0},   {1.0, 2017.0, 2.0, 3.0, 1000.0},
      {100.0, 2017.0, 2.0, 6.0, 900.0}, {1.0, 2017.0, 2.0, 3.0, 99.0},
      {4.0, 2017.0, 3.0, 3.0, 10.0},    {1.0, 2017.0, 6.0, 20.0, 500.0},
  };
  float tabla[200][12] = {0};
  int i = 0;
  procesado(10, 5, 200, 12, entrada, tabla);
  imprime(200, 12, tabla);
  return (0);
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x2660,%rsp
movl   $0x0,-0x4(%rbp)
lea    -0xd0(%rbp),%rdi
lea    0xea0(%rip),%rsi
mov    $0xc8,%edx
call   1050 <memcpy@plt>
lea    -0x2650(%rbp),%rdi
xor    %esi,%esi
mov    $0x2580,%edx
call   1030 <memset@plt>
movl   $0x0,-0x2654(%rbp)
lea    -0xd0(%rbp),%r8
lea    -0x2650(%rbp),%r9
mov    $0xa,%edi
mov    $0x5,%esi
mov    $0xc8,%edx
mov    $0xc,%ecx
call   1060 <procesado@plt>
lea    -0x2650(%rbp),%rdx
mov    $0xc8,%edi
mov    $0xc,%esi
call   1040 <imprime@plt>
xor    %eax,%eax
add    $0x2660,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %r14
push   %rbx
sub    $0x2658,%rsp
lea    0xeaf(%rip),%rsi
mov    %rsp,%r14
mov    $0xc8,%edx
mov    %r14,%rdi
call   1050 <memcpy@plt>
lea    0xd0(%rsp),%rbx
mov    $0x2580,%edx
mov    %rbx,%rdi
xor    %esi,%esi
call   1030 <memset@plt>
mov    $0xa,%edi
mov    $0x5,%esi
mov    $0xc8,%edx
mov    $0xc,%ecx
mov    %r14,%r8
mov    %rbx,%r9
call   1060 <procesado@plt>
mov    $0xc8,%edi
mov    $0xc,%esi
mov    %rbx,%rdx
call   1040 <imprime@plt>
xor    %eax,%eax
add    $0x2658,%rsp
pop    %rbx
pop    %r14
ret

LLVM IR (-O0):
@__const.main.entrada = [10 x [5 x float]] [[5 x float] [float 1.000000e+00, float 2.017000e+03, float 2.000000e+00, float 2.000000e+00, float 1.000000e+02], [5 x float] [float 3.000000e+00, float 2.017000e+03, float 2.000000e+00, float 2.000000e+00, float 1.200000e+02], [5 x float] [float 5.000000e+00, float 2.017000e+03, float 2.000000e+00, float 2.000000e+00, float 2.000000e+01], [5 x float] [float 1.000000e+02, float 2.017000e+03, float 2.000000e+00, float 2.000000e+00, float 1.200000e+02], [5 x float] [float 3.000000e+00, float 2.017000e+03, float 2.000000e+00, float 3.000000e+00, float 2.000000e+02], [5 x float] [float 1.000000e+00, float 2.017000e+03, float 2.000000e+00, float 3.000000e+00, float 1.000000e+03], [5 x float] [float 1.000000e+02, float 2.017000e+03, float 2.000000e+00, float 6.000000e+00, float 9.000000e+02], [5 x float] [float 1.000000e+00, float 2.017000e+03, float 2.000000e+00, float 3.000000e+00, float 9.900000e+01], [5 x float] [float 4.000000e+00, float 2.017000e+03, float 3.000000e+00, float 3.000000e+00, float 1.000000e+01], [5 x float] [float 1.000000e+00, float 2.017000e+03, float 6.000000e+00, float 2.000000e+01, float 5.000000e+02]]
define i32 @main() {
%1 = alloca i32
%2 = alloca [10 x [5 x float]]
%3 = alloca [200 x [12 x float]]
%4 = alloca i32
store i32 0, i32* %1
%5 = bitcast [10 x [5 x float]]* %2 to i8*
%6 = bitcast [200 x [12 x float]]* %3 to i8*
store i32 0, i32* %4
%7 = getelementptr inbounds [10 x [5 x float]], [10 x [5 x float]]* %2, i64 0, i64 0
%8 = bitcast [5 x float]* %7 to float**
%9 = getelementptr inbounds [200 x [12 x float]], [200 x [12 x float]]* %3, i64 0, i64 0
%10 = bitcast [12 x float]* %9 to float**
%11 = call i32 @procesado(i32 10, i32 5, i32 200, i32 12, float** %8, float** %10)
%12 = getelementptr inbounds [200 x [12 x float]], [200 x [12 x float]]* %3, i64 0, i64 0
%13 = bitcast [12 x float]* %12 to float**
%14 = call i32 @imprime(i32 200, i32 12, float** %13)
ret i32 0
}

LLVM IR (-O2):
@__const.main.entrada = [10 x [5 x float]] [[5 x float] [float 1.000000e+00, float 2.017000e+03, float 2.000000e+00, float 2.000000e+00, float 1.000000e+02], [5 x float] [float 3.000000e+00, float 2.017000e+03, float 2.000000e+00, float 2.000000e+00, float 1.200000e+02], [5 x float] [float 5.000000e+00, float 2.017000e+03, float 2.000000e+00, float 2.000000e+00, float 2.000000e+01], [5 x float] [float 1.000000e+02, float 2.017000e+03, float 2.000000e+00, float 2.000000e+00, float 1.200000e+02], [5 x float] [float 3.000000e+00, float 2.017000e+03, float 2.000000e+00, float 3.000000e+00, float 2.000000e+02], [5 x float] [float 1.000000e+00, float 2.017000e+03, float 2.000000e+00, float 3.000000e+00, float 1.000000e+03], [5 x float] [float 1.000000e+02, float 2.017000e+03, float 2.000000e+00, float 6.000000e+00, float 9.000000e+02], [5 x float] [float 1.000000e+00, float 2.017000e+03, float 2.000000e+00, float 3.000000e+00, float 9.900000e+01], [5 x float] [float 4.000000e+00, float 2.017000e+03, float 3.000000e+00, float 3.000000e+00, float 1.000000e+01], [5 x float] [float 1.000000e+00, float 2.017000e+03, float 6.000000e+00, float 2.000000e+01, float 5.000000e+02]]
define i32 @main() {
%1 = alloca [10 x [5 x float]]
%2 = alloca [200 x [12 x float]]
%3 = bitcast [10 x [5 x float]]* %1 to i8*
%4 = bitcast [200 x [12 x float]]* %2 to i8*
%5 = bitcast [10 x [5 x float]]* %1 to float**
%6 = bitcast [200 x [12 x float]]* %2 to float**
%7 = call i32 @procesado(i32 10, i32 5, i32 200, i32 12, float** %5, float** %6)
%8 = call i32 @imprime(i32 200, i32 12, float** %6)
ret i32 0
}