int main(int argc, char **argv) {
  char _entero_1bytes = 1;
  short _entero_2bytes = 1;
  int _entero_4bytes = 1;
  long _entero_8bytes = 1;
  printf("bytes de char:\t%d\n", sizeof(_entero_1bytes));
  printf("bytes de short:\t%d\n", sizeof(_entero_2bytes));
  printf("bytes de int:\t%d\n", sizeof(_entero_4bytes));
  printf("bytes de long:\t%d\n", sizeof(_entero_8bytes));
  unsigned int _sin_signo_4bytes = 1;
  printf("bytes de int sin signo:\t%d\n", sizeof(_sin_signo_4bytes));
  float _decimal_4bytes = 340282346638528859811704183484516925440.0f;
  double _decimal_8bytes =
      179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0;
  printf("bytes de float:\t%d\n", sizeof(_decimal_4bytes));
  printf("bytes de double:\t%d\n", sizeof(_decimal_8bytes));
  char _texto_1bytes = '!';
  printf("bytes de char:\t%d\n", sizeof(_texto_1bytes));
  char _texto_6entradas[6];
  _texto_6entradas[0] = '@';
  _texto_6entradas[1] = '#';
  _texto_6entradas[2] = '$';
  _texto_6entradas[3] = '%';
  _texto_6entradas[4] = '&';
  _texto_6entradas[5] = '\0';
  printf("bytes de char 0:\t%d -> %c\n", sizeof(_texto_6entradas[0]),
         _texto_6entradas[0]);
  printf("bytes de char 1:\t%d -> %c\n", sizeof(_texto_6entradas[1]),
         _texto_6entradas[1]);
  printf("bytes de char 2:\t%d -> %c\n", sizeof(_texto_6entradas[2]),
         _texto_6entradas[2]);
  printf("bytes de char 3:\t%d -> %c\n", sizeof(_texto_6entradas[3]),
         _texto_6entradas[3]);
  printf("bytes de char 4:\t%d -> %c\n", sizeof(_texto_6entradas[4]),
         _texto_6entradas[4]);
  printf("bytes de char 5:\t%d -> %c\n", sizeof(_texto_6entradas[5]),
         _texto_6entradas[5]);
  printf("bytes de todo el arreglo char:\t%d -> %s\n", sizeof(_texto_6entradas),
         _texto_6entradas);
  int _entero_6entradas[6];
  _entero_6entradas[0] = 10;
  _entero_6entradas[1] = 11;
  _entero_6entradas[2] = 12;
  _entero_6entradas[3] = 13;
  _entero_6entradas[4] = 14;
  _entero_6entradas[5] = 15;
  printf("bytes de entero 0:\t%d -> %d\n", sizeof(_entero_6entradas[0]),
         _entero_6entradas[0]);
  printf("bytes de entero 1:\t%d -> %d\n", sizeof(_entero_6entradas[1]),
         _entero_6entradas[1]);
  printf("bytes de entero 2:\t%d -> %d\n", sizeof(_entero_6entradas[2]),
         _entero_6entradas[2]);
  printf("bytes de entero 3:\t%d -> %d\n", sizeof(_entero_6entradas[3]),
         _entero_6entradas[3]);
  printf("bytes de entero 4:\t%d -> %d\n", sizeof(_entero_6entradas[4]),
         _entero_6entradas[4]);
  printf("bytes de entero 5:\t%d -> %d\n", sizeof(_entero_6entradas[5]),
         _entero_6entradas[5]);
  printf("bytes de todo el arreglo entero:\t%d -> %d\n",
         sizeof(_entero_6entradas), _entero_6entradas);
  double _decimal_variable = 2.2;
  double *_decimal_puntero = &_decimal_variable;
  printf("variable: %lf\n", _decimal_variable);
  printf("direccion de variable: %p\n", &_decimal_variable);
  printf("puntero: %p\n", _decimal_puntero);
  printf("direccion de puntero: %p\n", &_decimal_puntero);
  printf("valor de variable apuntada por puntero: %lf\n", *_decimal_puntero);
  typedef struct tipo_compuesto {
    int i;
    double d;
    char c;
  } tipo_compuesto;
  tipo_compuesto _estructura;
  _estructura.i = 1;
  _estructura.d = 1.1;
  _estructura.c = '1';
  return (0);
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x80,%rsp
movl   $0x0,-0x4(%rbp)
mov    %edi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movb   $0x1,-0x11(%rbp)
movw   $0x1,-0x14(%rbp)
movl   $0x1,-0x18(%rbp)
movq   $0x1,-0x20(%rbp)
lea    0xed3(%rip),%rdi
mov    $0x1,%esi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xed3(%rip),%rdi
mov    $0x2,%esi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xed4(%rip),%rdi
mov    $0x4,%esi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xed3(%rip),%rdi
mov    $0x8,%esi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x24(%rbp)
lea    0xecc(%rip),%rdi
mov    $0x4,%esi
mov    $0x0,%al
call   1030 <printf@plt>
movss  0xe68(%rip),%xmm0
movss  %xmm0,-0x28(%rbp)
movsd  0xe53(%rip),%xmm0
movsd  %xmm0,-0x30(%rbp)
lea    0xebb(%rip),%rdi
mov    $0x4,%esi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xebc(%rip),%rdi
mov    $0x8,%esi
mov    $0x0,%al
call   1030 <printf@plt>
movb   $0x21,-0x31(%rbp)
lea    0xe29(%rip),%rdi
mov    $0x1,%esi
mov    $0x0,%al
call   1030 <printf@plt>
movb   $0x40,-0x37(%rbp)
movb   $0x23,-0x36(%rbp)
movb   $0x24,-0x35(%rbp)
movb   $0x25,-0x34(%rbp)
movb   $0x26,-0x33(%rbp)
movb   $0x0,-0x32(%rbp)
movsbl -0x37(%rbp),%edx
lea    0xe8b(%rip),%rdi
mov    $0x1,%esi
mov    $0x0,%al
call   1030 <printf@plt>
movsbl -0x36(%rbp),%edx
lea    0xe8f(%rip),%rdi
mov    $0x1,%esi
mov    $0x0,%al
call   1030 <printf@plt>
movsbl -0x35(%rbp),%edx
lea    0xe93(%rip),%rdi
mov    $0x1,%esi
mov    $0x0,%al
call   1030 <printf@plt>
movsbl -0x34(%rbp),%edx
lea    0xe97(%rip),%rdi
mov    $0x1,%esi
mov    $0x0,%al
call   1030 <printf@plt>
movsbl -0x33(%rbp),%edx
lea    0xe9b(%rip),%rdi
mov    $0x1,%esi
mov    $0x0,%al
call   1030 <printf@plt>
movsbl -0x32(%rbp),%edx
lea    0xe9f(%rip),%rdi
mov    $0x1,%esi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0x37(%rbp),%rdx
lea    0xea3(%rip),%rdi
mov    $0x6,%esi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0xa,-0x50(%rbp)
movl   $0xb,-0x4c(%rbp)
movl   $0xc,-0x48(%rbp)
movl   $0xd,-0x44(%rbp)
movl   $0xe,-0x40(%rbp)
movl   $0xf,-0x3c(%rbp)
mov    -0x50(%rbp),%edx
lea    0xe8c(%rip),%rdi
mov    $0x4,%esi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x4c(%rbp),%edx
lea    0xe93(%rip),%rdi
mov    $0x4,%esi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x48(%rbp),%edx
lea    0xe9a(%rip),%rdi
mov    $0x4,%esi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x44(%rbp),%edx
lea    0xea1(%rip),%rdi
mov    $0x4,%esi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x40(%rbp),%edx
lea    0xea8(%rip),%rdi
mov    $0x4,%esi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x3c(%rbp),%edx
lea    0xeaf(%rip),%rdi
mov    $0x4,%esi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0x50(%rbp),%rdx
lea    0xeb5(%rip),%rdi
mov    $0x18,%esi
mov    $0x0,%al
call   1030 <printf@plt>
movsd  0xc83(%rip),%xmm0
movsd  %xmm0,-0x58(%rbp)
lea    -0x58(%rbp),%rax
mov    %rax,-0x60(%rbp)
movsd  -0x58(%rbp),%xmm0
lea    0xeb3(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
lea    0xeb4(%rip),%rdi
lea    -0x58(%rbp),%rsi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x60(%rbp),%rsi
lea    0xec6(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xeab(%rip),%rdi
lea    -0x60(%rbp),%rsi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x60(%rbp),%rax
movsd  (%rax),%xmm0
lea    0xeab(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movl   $0x1,-0x78(%rbp)
movsd  0xc00(%rip),%xmm0
movsd  %xmm0,-0x70(%rbp)
movb   $0x31,-0x68(%rbp)
xor    %eax,%eax
add    $0x80,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbx
sub    $0x40,%rsp
lea    0xefc(%rip),%rbx
mov    $0x1,%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1030 <printf@plt>
lea    0xef9(%rip),%rdi
mov    $0x2,%esi
xor    %eax,%eax
call   1030 <printf@plt>
lea    0xefa(%rip),%rdi
mov    $0x4,%esi
xor    %eax,%eax
call   1030 <printf@plt>
lea    0xef9(%rip),%rdi
mov    $0x8,%esi
xor    %eax,%eax
call   1030 <printf@plt>
lea    0xef9(%rip),%rdi
mov    $0x4,%esi
xor    %eax,%eax
call   1030 <printf@plt>
lea    0xf02(%rip),%rdi
mov    $0x4,%esi
xor    %eax,%eax
call   1030 <printf@plt>
lea    0xf03(%rip),%rdi
mov    $0x8,%esi
xor    %eax,%eax
call   1030 <printf@plt>
mov    $0x1,%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1030 <printf@plt>
movl   $0x25242340,0xa(%rsp)
25
movw   $0x26,0xe(%rsp)
lea    0xee7(%rip),%rdi
mov    $0x1,%esi
mov    $0x40,%edx
xor    %eax,%eax
call   1030 <printf@plt>
lea    0xeea(%rip),%rdi
mov    $0x1,%esi
mov    $0x23,%edx
xor    %eax,%eax
call   1030 <printf@plt>
lea    0xeed(%rip),%rdi
mov    $0x1,%esi
mov    $0x24,%edx
xor    %eax,%eax
call   1030 <printf@plt>
lea    0xef0(%rip),%rdi
mov    $0x1,%esi
mov    $0x25,%edx
xor    %eax,%eax
call   1030 <printf@plt>
lea    0xef3(%rip),%rdi
mov    $0x1,%esi
mov    $0x26,%edx
xor    %eax,%eax
call   1030 <printf@plt>
lea    0xef6(%rip),%rdi
mov    $0x1,%esi
xor    %edx,%edx
xor    %eax,%eax
call   1030 <printf@plt>
lea    0xefc(%rip),%rdi
lea    0xa(%rsp),%rdx
mov    $0x6,%esi
xor    %eax,%eax
call   1030 <printf@plt>
movaps 0xd99(%rip),%xmm0
movaps %xmm0,0x20(%rsp)
movabs $0xf0000000e,%rax
mov    %rax,0x30(%rsp)
lea    0xef2(%rip),%rdi
mov    $0x4,%esi
mov    $0xa,%edx
xor    %eax,%eax
call   1030 <printf@plt>
lea    0xef7(%rip),%rdi
mov    $0x4,%esi
mov    $0xb,%edx
xor    %eax,%eax
call   1030 <printf@plt>
lea    0xefc(%rip),%rdi
mov    $0x4,%esi
mov    $0xc,%edx
xor    %eax,%eax
call   1030 <printf@plt>
lea    0xf01(%rip),%rdi
mov    $0x4,%esi
mov    $0xd,%edx
xor    %eax,%eax
call   1030 <printf@plt>
lea    0xf06(%rip),%rdi
mov    $0x4,%esi
mov    $0xe,%edx
xor    %eax,%eax
call   1030 <printf@plt>
lea    0xf0b(%rip),%rdi
mov    $0x4,%esi
mov    $0xf,%edx
xor    %eax,%eax
call   1030 <printf@plt>
lea    0xf10(%rip),%rdi
lea    0x20(%rsp),%rdx
mov    $0x18,%esi
xor    %eax,%eax
call   1030 <printf@plt>
movabs $0x400199999999999a,%rax
99 01 40
mov    %rax,0x18(%rsp)
lea    0x18(%rsp),%rbx
mov    %rbx,0x10(%rsp)
lea    0xf0a(%rip),%rdi
movsd  0xcc5(%rip),%xmm0
mov    $0x1,%al
call   1030 <printf@plt>
lea    0xf03(%rip),%rdi
mov    %rbx,%rsi
xor    %eax,%eax
call   1030 <printf@plt>
lea    0xf1a(%rip),%rdi
mov    %rbx,%rsi
xor    %eax,%eax
call   1030 <printf@plt>
lea    0xefc(%rip),%rdi
lea    0x10(%rsp),%rsi
xor    %eax,%eax
call   1030 <printf@plt>
mov    0x10(%rsp),%rax
movsd  (%rax),%xmm0
lea    0xefa(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x40,%rsp
pop    %rbx
ret

LLVM IR (-O0):
%struct.tipo_compuesto = type { i32, double, i8 }
@.str = [19 x i8] c"bytes de char:\09%d\0A\00"
@.str.1 = [20 x i8] c"bytes de short:\09%d\0A\00"
@.str.2 = [18 x i8] c"bytes de int:\09%d\0A\00"
@.str.3 = [19 x i8] c"bytes de long:\09%d\0A\00"
@.str.4 = [28 x i8] c"bytes de int sin signo:\09%d\0A\00"
@.str.5 = [20 x i8] c"bytes de float:\09%d\0A\00"
@.str.6 = [21 x i8] c"bytes de double:\09%d\0A\00"
@.str.7 = [27 x i8] c"bytes de char 0:\09%d -> %c\0A\00"
@.str.8 = [27 x i8] c"bytes de char 1:\09%d -> %c\0A\00"
@.str.9 = [27 x i8] c"bytes de char 2:\09%d -> %c\0A\00"
@.str.10 = [27 x i8] c"bytes de char 3:\09%d -> %c\0A\00"
@.str.11 = [27 x i8] c"bytes de char 4:\09%d -> %c\0A\00"
@.str.12 = [27 x i8] c"bytes de char 5:\09%d -> %c\0A\00"
@.str.13 = [41 x i8] c"bytes de todo el arreglo char:\09%d -> %s\0A\00"
@.str.14 = [29 x i8] c"bytes de entero 0:\09%d -> %d\0A\00"
@.str.15 = [29 x i8] c"bytes de entero 1:\09%d -> %d\0A\00"
@.str.16 = [29 x i8] c"bytes de entero 2:\09%d -> %d\0A\00"
@.str.17 = [29 x i8] c"bytes de entero 3:\09%d -> %d\0A\00"
@.str.18 = [29 x i8] c"bytes de entero 4:\09%d -> %d\0A\00"
@.str.19 = [29 x i8] c"bytes de entero 5:\09%d -> %d\0A\00"
@.str.20 = [43 x i8] c"bytes de todo el arreglo entero:\09%d -> %d\0A\00"
@.str.21 = [15 x i8] c"variable: %lf\0A\00"
@.str.22 = [27 x i8] c"direccion de variable: %p\0A\00"
@.str.23 = [13 x i8] c"puntero: %p\0A\00"
@.str.24 = [26 x i8] c"direccion de puntero: %p\0A\00"
@.str.25 = [45 x i8] c"valor de variable apuntada por puntero: %lf\0A\00"
define i32 @main(i32 %0, i8** %1) {
%3 = alloca i32
%4 = alloca i32
%5 = alloca i8**
%6 = alloca i8
%7 = alloca i16
%8 = alloca i32
%9 = alloca i64
%10 = alloca i32
%11 = alloca float
%12 = alloca double
%13 = alloca i8
%14 = alloca [6 x i8]
%15 = alloca [6 x i32]
%16 = alloca double
%17 = alloca double*
%18 = alloca %struct.tipo_compuesto
store i32 0, i32* %3
store i32 %0, i32* %4
store i8** %1, i8*** %5
store i8 1, i8* %6
store i16 1, i16* %7
store i32 1, i32* %8
store i64 1, i64* %9
%19 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str, i64 0, i64 0), i64 1)
%20 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.1, i64 0, i64 0), i64 2)
%21 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.2, i64 0, i64 0), i64 4)
%22 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.3, i64 0, i64 0), i64 8)
store i32 1, i32* %10
%23 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.4, i64 0, i64 0), i64 4)
store float 0x47EFFFFFE0000000, float* %11
store double 0x7FEFFFFFFFFFFFFF, double* %12
%24 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.5, i64 0, i64 0), i64 4)
%25 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.6, i64 0, i64 0), i64 8)
store i8 33, i8* %13
%26 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str, i64 0, i64 0), i64 1)
%27 = getelementptr inbounds [6 x i8], [6 x i8]* %14, i64 0, i64 0
store i8 64, i8* %27
%28 = getelementptr inbounds [6 x i8], [6 x i8]* %14, i64 0, i64 1
store i8 35, i8* %28
%29 = getelementptr inbounds [6 x i8], [6 x i8]* %14, i64 0, i64 2
store i8 36, i8* %29
%30 = getelementptr inbounds [6 x i8], [6 x i8]* %14, i64 0, i64 3
store i8 37, i8* %30
%31 = getelementptr inbounds [6 x i8], [6 x i8]* %14, i64 0, i64 4
store i8 38, i8* %31
%32 = getelementptr inbounds [6 x i8], [6 x i8]* %14, i64 0, i64 5
store i8 0, i8* %32
%33 = getelementptr inbounds [6 x i8], [6 x i8]* %14, i64 0, i64 0
%34 = load i8, i8* %33
%35 = sext i8 %34 to i32
%36 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.7, i64 0, i64 0), i64 1, i32 %35)
%37 = getelementptr inbounds [6 x i8], [6 x i8]* %14, i64 0, i64 1
%38 = load i8, i8* %37
%39 = sext i8 %38 to i32
%40 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.8, i64 0, i64 0), i64 1, i32 %39)
%41 = getelementptr inbounds [6 x i8], [6 x i8]* %14, i64 0, i64 2
%42 = load i8, i8* %41
%43 = sext i8 %42 to i32
%44 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.9, i64 0, i64 0), i64 1, i32 %43)
%45 = getelementptr inbounds [6 x i8], [6 x i8]* %14, i64 0, i64 3
%46 = load i8, i8* %45
%47 = sext i8 %46 to i32
%48 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.10, i64 0, i64 0), i64 1, i32 %47)
%49 = getelementptr inbounds [6 x i8], [6 x i8]* %14, i64 0, i64 4
%50 = load i8, i8* %49
%51 = sext i8 %50 to i32
%52 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.11, i64 0, i64 0), i64 1, i32 %51)
%53 = getelementptr inbounds [6 x i8], [6 x i8]* %14, i64 0, i64 5
%54 = load i8, i8* %53
%55 = sext i8 %54 to i32
%56 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.12, i64 0, i64 0), i64 1, i32 %55)
%57 = getelementptr inbounds [6 x i8], [6 x i8]* %14, i64 0, i64 0
%58 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([41 x i8], [41 x i8]* @.str.13, i64 0, i64 0), i64 6, i8* %57)
%59 = getelementptr inbounds [6 x i32], [6 x i32]* %15, i64 0, i64 0
store i32 10, i32* %59
%60 = getelementptr inbounds [6 x i32], [6 x i32]* %15, i64 0, i64 1
store i32 11, i32* %60
%61 = getelementptr inbounds [6 x i32], [6 x i32]* %15, i64 0, i64 2
store i32 12, i32* %61
%62 = getelementptr inbounds [6 x i32], [6 x i32]* %15, i64 0, i64 3
store i32 13, i32* %62
%63 = getelementptr inbounds [6 x i32], [6 x i32]* %15, i64 0, i64 4
store i32 14, i32* %63
%64 = getelementptr inbounds [6 x i32], [6 x i32]* %15, i64 0, i64 5
store i32 15, i32* %64
%65 = getelementptr inbounds [6 x i32], [6 x i32]* %15, i64 0, i64 0
%66 = load i32, i32* %65
%67 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.14, i64 0, i64 0), i64 4, i32 %66)
%68 = getelementptr inbounds [6 x i32], [6 x i32]* %15, i64 0, i64 1
%69 = load i32, i32* %68
%70 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.15, i64 0, i64 0), i64 4, i32 %69)
%71 = getelementptr inbounds [6 x i32], [6 x i32]* %15, i64 0, i64 2
%72 = load i32, i32* %71
%73 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.16, i64 0, i64 0), i64 4, i32 %72)
%74 = getelementptr inbounds [6 x i32], [6 x i32]* %15, i64 0, i64 3
%75 = load i32, i32* %74
%76 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.17, i64 0, i64 0), i64 4, i32 %75)
%77 = getelementptr inbounds [6 x i32], [6 x i32]* %15, i64 0, i64 4
%78 = load i32, i32* %77
%79 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.18, i64 0, i64 0), i64 4, i32 %78)
%80 = getelementptr inbounds [6 x i32], [6 x i32]* %15, i64 0, i64 5
%81 = load i32, i32* %80
%82 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.19, i64 0, i64 0), i64 4, i32 %81)
%83 = getelementptr inbounds [6 x i32], [6 x i32]* %15, i64 0, i64 0
%84 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.20, i64 0, i64 0), i64 24, i32* %83)
store double 2.200000e+00, double* %16
store double* %16, double** %17
%85 = load double, double* %16
%86 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.21, i64 0, i64 0), double %85)
%87 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.22, i64 0, i64 0), double* %16)
%88 = load double*, double** %17
%89 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.23, i64 0, i64 0), double* %88)
%90 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.24, i64 0, i64 0), double** %17)
%91 = load double*, double** %17
%92 = load double, double* %91
%93 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.25, i64 0, i64 0), double %92)
%94 = getelementptr inbounds %struct.tipo_compuesto, %struct.tipo_compuesto* %18, i32 0, i32 0
store i32 1, i32* %94
%95 = getelementptr inbounds %struct.tipo_compuesto, %struct.tipo_compuesto* %18, i32 0, i32 1
store double 1.100000e+00, double* %95
%96 = getelementptr inbounds %struct.tipo_compuesto, %struct.tipo_compuesto* %18, i32 0, i32 2
store i8 49, i8* %96
ret i32 0
}

LLVM IR (-O2):
@.str = [19 x i8] c"bytes de char:\09%d\0A\00"
@.str.1 = [20 x i8] c"bytes de short:\09%d\0A\00"
@.str.2 = [18 x i8] c"bytes de int:\09%d\0A\00"
@.str.3 = [19 x i8] c"bytes de long:\09%d\0A\00"
@.str.4 = [28 x i8] c"bytes de int sin signo:\09%d\0A\00"
@.str.5 = [20 x i8] c"bytes de float:\09%d\0A\00"
@.str.6 = [21 x i8] c"bytes de double:\09%d\0A\00"
@.str.7 = [27 x i8] c"bytes de char 0:\09%d -> %c\0A\00"
@.str.8 = [27 x i8] c"bytes de char 1:\09%d -> %c\0A\00"
@.str.9 = [27 x i8] c"bytes de char 2:\09%d -> %c\0A\00"
@.str.10 = [27 x i8] c"bytes de char 3:\09%d -> %c\0A\00"
@.str.11 = [27 x i8] c"bytes de char 4:\09%d -> %c\0A\00"
@.str.12 = [27 x i8] c"bytes de char 5:\09%d -> %c\0A\00"
@.str.13 = [41 x i8] c"bytes de todo el arreglo char:\09%d -> %s\0A\00"
@.str.14 = [29 x i8] c"bytes de entero 0:\09%d -> %d\0A\00"
@.str.15 = [29 x i8] c"bytes de entero 1:\09%d -> %d\0A\00"
@.str.16 = [29 x i8] c"bytes de entero 2:\09%d -> %d\0A\00"
@.str.17 = [29 x i8] c"bytes de entero 3:\09%d -> %d\0A\00"
@.str.18 = [29 x i8] c"bytes de entero 4:\09%d -> %d\0A\00"
@.str.19 = [29 x i8] c"bytes de entero 5:\09%d -> %d\0A\00"
@.str.20 = [43 x i8] c"bytes de todo el arreglo entero:\09%d -> %d\0A\00"
@.str.21 = [15 x i8] c"variable: %lf\0A\00"
@.str.22 = [27 x i8] c"direccion de variable: %p\0A\00"
@.str.23 = [13 x i8] c"puntero: %p\0A\00"
@.str.24 = [26 x i8] c"direccion de puntero: %p\0A\00"
@.str.25 = [45 x i8] c"valor de variable apuntada por puntero: %lf\0A\00"
define i32 @main(i32 %0, i8** nocapture readnone %1) {
%3 = alloca [6 x i8]
%4 = alloca [6 x i32]
%5 = alloca double
%6 = alloca double*
%7 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([19 x i8], [19 x i8]* @.str, i64 0, i64 0), i64 1)
%8 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([20 x i8], [20 x i8]* @.str.1, i64 0, i64 0), i64 2)
%9 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([18 x i8], [18 x i8]* @.str.2, i64 0, i64 0), i64 4)
%10 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([19 x i8], [19 x i8]* @.str.3, i64 0, i64 0), i64 8)
%11 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([28 x i8], [28 x i8]* @.str.4, i64 0, i64 0), i64 4)
%12 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([20 x i8], [20 x i8]* @.str.5, i64 0, i64 0), i64 4)
%13 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([21 x i8], [21 x i8]* @.str.6, i64 0, i64 0), i64 8)
%14 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([19 x i8], [19 x i8]* @.str, i64 0, i64 0), i64 1)
%15 = getelementptr inbounds [6 x i8], [6 x i8]* %3, i64 0, i64 0
store i8 64, i8* %15
%16 = getelementptr inbounds [6 x i8], [6 x i8]* %3, i64 0, i64 1
store i8 35, i8* %16
%17 = getelementptr inbounds [6 x i8], [6 x i8]* %3, i64 0, i64 2
store i8 36, i8* %17
%18 = getelementptr inbounds [6 x i8], [6 x i8]* %3, i64 0, i64 3
store i8 37, i8* %18
%19 = getelementptr inbounds [6 x i8], [6 x i8]* %3, i64 0, i64 4
store i8 38, i8* %19
%20 = getelementptr inbounds [6 x i8], [6 x i8]* %3, i64 0, i64 5
store i8 0, i8* %20
%21 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([27 x i8], [27 x i8]* @.str.7, i64 0, i64 0), i64 1, i32 64)
%22 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([27 x i8], [27 x i8]* @.str.8, i64 0, i64 0), i64 1, i32 35)
%23 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([27 x i8], [27 x i8]* @.str.9, i64 0, i64 0), i64 1, i32 36)
%24 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([27 x i8], [27 x i8]* @.str.10, i64 0, i64 0), i64 1, i32 37)
%25 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([27 x i8], [27 x i8]* @.str.11, i64 0, i64 0), i64 1, i32 38)
%26 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([27 x i8], [27 x i8]* @.str.12, i64 0, i64 0), i64 1, i32 0)
%27 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([41 x i8], [41 x i8]* @.str.13, i64 0, i64 0), i64 6, i8* %15)
%28 = bitcast [6 x i32]* %4 to i8*
%29 = getelementptr inbounds [6 x i32], [6 x i32]* %4, i64 0, i64 0
%30 = bitcast [6 x i32]* %4 to <4 x i32>*
store <4 x i32> <i32 10, i32 11, i32 12, i32 13>, <4 x i32>* %30
%31 = getelementptr inbounds [6 x i32], [6 x i32]* %4, i64 0, i64 4
store i32 14, i32* %31
%32 = getelementptr inbounds [6 x i32], [6 x i32]* %4, i64 0, i64 5
store i32 15, i32* %32
%33 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([29 x i8], [29 x i8]* @.str.14, i64 0, i64 0), i64 4, i32 10)
%34 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([29 x i8], [29 x i8]* @.str.15, i64 0, i64 0), i64 4, i32 11)
%35 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([29 x i8], [29 x i8]* @.str.16, i64 0, i64 0), i64 4, i32 12)
%36 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([29 x i8], [29 x i8]* @.str.17, i64 0, i64 0), i64 4, i32 13)
%37 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([29 x i8], [29 x i8]* @.str.18, i64 0, i64 0), i64 4, i32 14)
%38 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([29 x i8], [29 x i8]* @.str.19, i64 0, i64 0), i64 4, i32 15)
%39 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([43 x i8], [43 x i8]* @.str.20, i64 0, i64 0), i64 24, i32* %29)
%40 = bitcast double* %5 to i8*
store double 2.200000e+00, double* %5
%41 = bitcast double** %6 to i8*
store double* %5, double** %6
%42 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([15 x i8], [15 x i8]* @.str.21, i64 0, i64 0), double 2.200000e+00)
%43 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([27 x i8], [27 x i8]* @.str.22, i64 0, i64 0), double* %5)
%44 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([13 x i8], [13 x i8]* @.str.23, i64 0, i64 0), double* %5)
%45 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([26 x i8], [26 x i8]* @.str.24, i64 0, i64 0), double** %6)
%46 = load double*, double** %6
%47 = load double, double* %46
%48 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([45 x i8], [45 x i8]* @.str.25, i64 0, i64 0), double %47)
ret i32 0
}