#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 */
typedef int uint8_t;
typedef long double int64_t;
typedef int /*<<< orphan*/ e;
typedef int /*<<< orphan*/ d;
typedef int /*<<< orphan*/ c;
typedef int /*<<< orphan*/ b;
typedef int /*<<< orphan*/ a;

/* Variables and functions */
int /*<<< orphan*/ printf(char *, ...);
long double sqrt(int);
int main(void) {
  uint8_t a = 55;
  int64_t *b = (int64_t *)33848, c = 87773272636473231;
  char d = 'r';
  long double e = c * c / sqrt(7374764);
  printf(
      "variable de tipo uint8_t con nombre a y valor %d, de tamaño %lu byte\n",
      a, sizeof(a));
  printf(
      "variable de tipo int64_t* con nombre b y valor %p, de tamaño %lu byte\n",
      b, sizeof(b));
  printf(
      "variable de tipo int64_t con nombre c y valor %ld, de tamaño %lu byte\n",
      c, sizeof(c));
  printf("variable de tipo char con nombre d y valor %c, de tamaño %lu byte\n",
         d, sizeof(d));
  printf("variable de tipo long double con nombre e y valor %Lf, de tamaño %lu "
         "byte\n",
         e, sizeof(e));
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
movl   $0x0,-0x4(%rbp)
movl   $0x37,-0x8(%rbp)
movq   $0x8438,-0x10(%rbp)
fldt   0xebc(%rip)
fstpt  -0x20(%rbp)
movb   $0x72,-0x21(%rbp)
fldt   -0x20(%rbp)
fmul   %st,%st(0)
fstpt  -0x4c(%rbp)
mov    $0x7087ac,%edi
call   1040 <sqrt@plt>
fldt   -0x4c(%rbp)
fdivp  %st,%st(1)
fstpt  -0x40(%rbp)
mov    -0x8(%rbp),%esi
lea    0xea1(%rip),%rdi
xor    %eax,%eax
mov    %al,-0x41(%rbp)
mov    $0x4,%edx
call   1030 <printf@plt>
mov    -0x41(%rbp),%al
mov    -0x10(%rbp),%rsi
lea    0xecb(%rip),%rdi
mov    $0x8,%edx
call   1030 <printf@plt>
mov    -0x41(%rbp),%al
fldt   -0x20(%rbp)
mov    %rsp,%rcx
fstpt  (%rcx)
lea    0xef7(%rip),%rdi
mov    $0x10,%esi
call   1030 <printf@plt>
mov    -0x41(%rbp),%al
movsbl -0x21(%rbp),%esi
lea    0xf27(%rip),%rdi
mov    $0x1,%edx
call   1030 <printf@plt>
fldt   -0x40(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
lea    0xf52(%rip),%rdi
xor    %eax,%eax
mov    $0x10,%esi
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
sub    $0x28,%rsp
mov    $0x7087ac,%edi
call   1040 <sqrt@plt>
fldt   0xecc(%rip)
fdivp  %st,%st(1)
fstpt  0x1c(%rsp)
lea    0xedf(%rip),%rdi
mov    $0x4,%edx
mov    $0x37,%esi
xor    %eax,%eax
call   1030 <printf@plt>
lea    0xf0e(%rip),%rdi
mov    $0x8438,%esi
mov    $0x8,%edx
xor    %eax,%eax
call   1030 <printf@plt>
fldt   0xea0(%rip)
fstpt  (%rsp)
lea    0xf35(%rip),%rdi
mov    $0x10,%esi
xor    %eax,%eax
call   1030 <printf@plt>
lea    0xf6a(%rip),%rdi
mov    $0x1,%edx
mov    $0x72,%esi
xor    %eax,%eax
call   1030 <printf@plt>
fldt   0x1c(%rsp)
fstpt  (%rsp)
lea    0xf8f(%rip),%rdi
mov    $0x10,%esi
xor    %eax,%eax
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x28,%rsp
ret

LLVM IR (-O0):
@.str = [71 x i8] c"variable de tipo uint8_t con nombre a y valor %d, de tama\C3\B1o %lu byte\0A\00"
@.str.1 = [72 x i8] c"variable de tipo int64_t* con nombre b y valor %p, de tama\C3\B1o %lu byte\0A\00"
@.str.2 = [72 x i8] c"variable de tipo int64_t con nombre c y valor %ld, de tama\C3\B1o %lu byte\0A\00"
@.str.3 = [68 x i8] c"variable de tipo char con nombre d y valor %c, de tama\C3\B1o %lu byte\0A\00"
@.str.4 = [76 x i8] c"variable de tipo long double con nombre e y valor %Lf, de tama\C3\B1o %lu byte\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca x86_fp80*
%4 = alloca x86_fp80
%5 = alloca i8
%6 = alloca x86_fp80
store i32 0, i32* %1
store i32 55, i32* %2
store x86_fp80* inttoptr (i64 33848 to x86_fp80*), x86_fp80** %3
store x86_fp80 0xK40379BEAA9C8229FC780, x86_fp80* %4
store i8 114, i8* %5
%7 = load x86_fp80, x86_fp80* %4
%8 = load x86_fp80, x86_fp80* %4
%9 = fmul x86_fp80 %7, %8
%10 = call x86_fp80 @sqrt(i32 7374764)
%11 = fdiv x86_fp80 %9, %10
store x86_fp80 %11, x86_fp80* %6
%12 = load i32, i32* %2
%13 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([71 x i8], [71 x i8]* @.str, i64 0, i64 0), i32 %12, i64 4)
%14 = load x86_fp80*, x86_fp80** %3
%15 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([72 x i8], [72 x i8]* @.str.1, i64 0, i64 0), x86_fp80* %14, i64 8)
%16 = load x86_fp80, x86_fp80* %4
%17 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([72 x i8], [72 x i8]* @.str.2, i64 0, i64 0), x86_fp80 %16, i64 16)
%18 = load i8, i8* %5
%19 = sext i8 %18 to i32
%20 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([68 x i8], [68 x i8]* @.str.3, i64 0, i64 0), i32 %19, i64 1)
%21 = load x86_fp80, x86_fp80* %6
%22 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([76 x i8], [76 x i8]* @.str.4, i64 0, i64 0), x86_fp80 %21, i64 16)
ret i32 0
}

LLVM IR (-O2):
@.str = [71 x i8] c"variable de tipo uint8_t con nombre a y valor %d, de tama\C3\B1o %lu byte\0A\00"
@.str.1 = [72 x i8] c"variable de tipo int64_t* con nombre b y valor %p, de tama\C3\B1o %lu byte\0A\00"
@.str.2 = [72 x i8] c"variable de tipo int64_t con nombre c y valor %ld, de tama\C3\B1o %lu byte\0A\00"
@.str.3 = [68 x i8] c"variable de tipo char con nombre d y valor %c, de tama\C3\B1o %lu byte\0A\00"
@.str.4 = [76 x i8] c"variable de tipo long double con nombre e y valor %Lf, de tama\C3\B1o %lu byte\0A\00"
define i32 @main() {
%1 = tail call x86_fp80 @sqrt(i32 7374764)
%2 = fdiv x86_fp80 0xK406FBDEC016658CD43B6, %1
%3 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([71 x i8], [71 x i8]* @.str, i64 0, i64 0), i32 55, i64 4)
%4 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([72 x i8], [72 x i8]* @.str.1, i64 0, i64 0), x86_fp80* inttoptr (i64 33848 to x86_fp80*), i64 8)
%5 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([72 x i8], [72 x i8]* @.str.2, i64 0, i64 0), x86_fp80 0xK40379BEAA9C8229FC780, i64 16)
%6 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([68 x i8], [68 x i8]* @.str.3, i64 0, i64 0), i32 114, i64 1)
%7 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([76 x i8], [76 x i8]* @.str.4, i64 0, i64 0), x86_fp80 %2, i64 16)
ret i32 0
}