#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*/ printf(char *, ...);
int main(void) {
  short max_int16 = 32767;
  unsigned short max_uint16 = 65535;
  int max_int32 = 2147483647;
  unsigned int max_uint32 = 4294967295;
  long long max_int64 = 9223372036854775807;
  unsigned long long max_uint64 = 18446744073709551615;
  float of_float = 2.51232123e38f;
  double of_double = 2.51232123e307;
  long double of_ldouble = 2.51232123e307;
  float uf_float = 9.876543210987654321e-40f;
  double uf_double = 9.876543210987654321e-314;
  long double uf_ldouble = 9.876543210987654321e-314;
  printf("The size of short is %zd\n", sizeof(short));
  printf("The max of short is %hd\n", max_int16);
  printf("short overflow is %hd.\n\n", max_int16 + 1);
  printf("The size of unsigned short is %zd\n", sizeof(unsigned short));
  printf("The max of unsigned short is %hu\n", max_uint16);
  printf("unsigned short overflow is %hu.\n\n", max_uint16 + 1);
  printf("The size of int is %zd\n", sizeof(int));
  printf("The max of int is %d\n", max_int32);
  printf("int overflow is %d.\n\n", max_int32 + 1);
  printf("The size of unsigned int is %zd\n", sizeof(unsigned int));
  printf("The max of int is %u\n", max_uint32);
  printf("unsigned int overflow is %u.\n\n", max_uint32 + 1);
  printf("The size of long is %zd\n", sizeof(long));
  printf("The max of long is %ld\n", max_int32);
  printf("long overflow is %ld.\n\n", max_int32 + 1);
  printf("The size of unsigned long is %zd\n", sizeof(unsigned long));
  printf("The max of unsigned long is %lu\n", max_uint32);
  printf("unsigned long overflow is %lu.\n\n", max_uint32 + 1);
  printf("and the size of long long is %zd\n", sizeof(long long));
  printf("The max of long long is %lld\n", max_int64);
  printf("unsigned int overflow is %lld.\n\n", max_int64 + 1);
  printf("and the size of unsigned long long is %zd\n",
         sizeof(unsigned long long));
  printf("The max of long long is %llu\n", max_uint64);
  printf("unsigned int overflow is %llu.\n\n", max_uint64 + 1);
  printf("The size of float is %zd\n", sizeof(float));
  printf("The size of double is %zd\n", sizeof(double));
  printf("The size of long double is %zd\n\n", sizeof(long double));
  printf("Decemal Overflow(Mutipled by 10.0f):\n");
  printf("float = %e, float * 10.0f = %e\n", of_float, of_float * 10);
  printf("double = %e, double * 10.0f = %e\n", of_double, of_double * 10);
  printf("long double = %Le, long double * 10.0f = %Le\n\n", of_ldouble,
         of_ldouble * 10);
  printf("Decemal Underflow(Divided by 1.0e5f):\n");
  printf("float = %e, float / 1.0e5f = %e\n", uf_float, uf_float / 1e5f);
  printf("double = %e, double / 1.0e5f = %e\n", uf_double, uf_double / 1e5f);
  printf("long double = %Le, long double / 1.0e5f = %Le\n", uf_ldouble,
         uf_ldouble / 1e5f);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0xa0,%rsp
movl   $0x0,-0x4(%rbp)
movw   $0x7fff,-0x6(%rbp)
movw   $0xffff,-0x8(%rbp)
movl   $0x7fffffff,-0xc(%rbp)
movl   $0xffffffff,-0x10(%rbp)
movabs $0x7fffffffffffffff,%rax
ff ff 7f
mov    %rax,-0x18(%rbp)
movq   $0xffffffffffffffff,-0x20(%rbp)
ff
movl   $0x7f3d018c,-0x24(%rbp)
movabs $0x7fc1e369003ff8b9,%rax
e3 c1 7f
mov    %rax,-0x30(%rbp)
fldl   0xe93(%rip)
fstpt  -0x40(%rbp)
movl   $0xac12e,-0x44(%rbp)
movabs $0x4a7847918,%rax
mov    %rax,-0x50(%rbp)
fldl   0xe7d(%rip)
fstpt  -0x60(%rbp)
lea    0xe93(%rip),%rdi
xor    %eax,%eax
mov    %al,-0x62(%rbp)
mov    $0x2,%esi
mov    %rsi,-0x80(%rbp)
call   1030 <printf@plt>
mov    -0x62(%rbp),%al
movswl -0x6(%rbp),%esi
lea    0xe8c(%rip),%rdi
call   1030 <printf@plt>
mov    -0x62(%rbp),%al
movswl -0x6(%rbp),%esi
add    $0x1,%esi
lea    0xe8f(%rip),%rdi
call   1030 <printf@plt>
mov    -0x80(%rbp),%rsi
mov    -0x62(%rbp),%al
lea    0xe95(%rip),%rdi
call   1030 <printf@plt>
mov    -0x62(%rbp),%al
movzwl -0x8(%rbp),%esi
lea    0xea5(%rip),%rdi
call   1030 <printf@plt>
mov    -0x62(%rbp),%al
movzwl -0x8(%rbp),%esi
add    $0x1,%esi
lea    0xeb1(%rip),%rdi
call   1030 <printf@plt>
mov    -0x62(%rbp),%al
lea    0xec4(%rip),%rdi
mov    $0x4,%esi
mov    %rsi,-0x78(%rbp)
call   1030 <printf@plt>
mov    -0x62(%rbp),%al
mov    -0xc(%rbp),%esi
lea    0xec1(%rip),%rdi
call   1030 <printf@plt>
mov    -0x62(%rbp),%al
mov    -0xc(%rbp),%esi
add    $0x1,%esi
lea    0xec2(%rip),%rdi
call   1030 <printf@plt>
mov    -0x78(%rbp),%rsi
mov    -0x62(%rbp),%al
lea    0xec5(%rip),%rdi
call   1030 <printf@plt>
mov    -0x62(%rbp),%al
mov    -0x10(%rbp),%esi
lea    0xed4(%rip),%rdi
call   1030 <printf@plt>
mov    -0x62(%rbp),%al
mov    -0x10(%rbp),%esi
add    $0x1,%esi
lea    0xed5(%rip),%rdi
call   1030 <printf@plt>
mov    -0x62(%rbp),%al
lea    0xee5(%rip),%rdi
mov    $0x8,%esi
mov    %rsi,-0x70(%rbp)
call   1030 <printf@plt>
mov    -0x62(%rbp),%al
mov    -0xc(%rbp),%esi
lea    0xee3(%rip),%rdi
call   1030 <printf@plt>
mov    -0x62(%rbp),%al
mov    -0xc(%rbp),%esi
add    $0x1,%esi
lea    0xee6(%rip),%rdi
call   1030 <printf@plt>
mov    -0x70(%rbp),%rsi
mov    -0x62(%rbp),%al
lea    0xeeb(%rip),%rdi
call   1030 <printf@plt>
mov    -0x62(%rbp),%al
mov    -0x10(%rbp),%esi
lea    0xefb(%rip),%rdi
call   1030 <printf@plt>
mov    -0x62(%rbp),%al
mov    -0x10(%rbp),%esi
add    $0x1,%esi
lea    0xf07(%rip),%rdi
call   1030 <printf@plt>
mov    -0x70(%rbp),%rsi
mov    -0x62(%rbp),%al
lea    0xf15(%rip),%rdi
call   1030 <printf@plt>
mov    -0x62(%rbp),%al
mov    -0x18(%rbp),%rsi
lea    0xf24(%rip),%rdi
call   1030 <printf@plt>
mov    -0x62(%rbp),%al
mov    -0x18(%rbp),%rsi
add    $0x1,%rsi
lea    0xf2b(%rip),%rdi
call   1030 <printf@plt>
mov    -0x70(%rbp),%rsi
mov    -0x62(%rbp),%al
lea    0xf39(%rip),%rdi
call   1030 <printf@plt>
mov    -0x62(%rbp),%al
mov    -0x20(%rbp),%rsi
lea    0xf51(%rip),%rdi
call   1030 <printf@plt>
mov    -0x62(%rbp),%al
mov    -0x20(%rbp),%rsi
add    $0x1,%rsi
lea    0xf58(%rip),%rdi
call   1030 <printf@plt>
mov    -0x78(%rbp),%rsi
mov    -0x62(%rbp),%al
lea    0xf66(%rip),%rdi
call   1030 <printf@plt>
mov    -0x70(%rbp),%rsi
mov    -0x62(%rbp),%al
lea    0xf6d(%rip),%rdi
call   1030 <printf@plt>
mov    -0x62(%rbp),%al
lea    0xf79(%rip),%rdi
mov    $0x10,%esi
call   1030 <printf@plt>
mov    -0x62(%rbp),%al
lea    0xf86(%rip),%rdi
call   1030 <printf@plt>
movss  -0x24(%rbp),%xmm1
cvtss2sd %xmm1,%xmm0
movss  0xc4d(%rip),%xmm2
mulss  %xmm2,%xmm1
cvtss2sd %xmm1,%xmm1
lea    0xf87(%rip),%rdi
mov    $0x2,%al
mov    %al,-0x61(%rbp)
call   1030 <printf@plt>
mov    -0x61(%rbp),%al
movsd  -0x30(%rbp),%xmm0
movsd  0xc14(%rip),%xmm2
movaps %xmm0,%xmm1
mulsd  %xmm2,%xmm1
lea    0xf7f(%rip),%rdi
call   1030 <printf@plt>
mov    -0x62(%rbp),%al
fldt   -0x40(%rbp)
flds   0xc05(%rip)
fmul   %st(1),%st
mov    %rsp,%rcx
fstpt  0x10(%rcx)
fstpt  (%rcx)
lea    0xf7f(%rip),%rdi
call   1030 <printf@plt>
mov    -0x62(%rbp),%al
lea    0xf9f(%rip),%rdi
call   1030 <printf@plt>
mov    -0x61(%rbp),%al
movss  -0x44(%rbp),%xmm1
cvtss2sd %xmm1,%xmm0
movss  0xbd0(%rip),%xmm2
divss  %xmm2,%xmm1
cvtss2sd %xmm1,%xmm1
lea    0xf9e(%rip),%rdi
call   1030 <printf@plt>
mov    -0x61(%rbp),%al
movsd  -0x50(%rbp),%xmm0
movsd  0xba0(%rip),%xmm2
movaps %xmm0,%xmm1
divsd  %xmm2,%xmm1
lea    0xf9c(%rip),%rdi
call   1030 <printf@plt>
fldt   -0x60(%rbp)
fld    %st(0)
flds   0xb8e(%rip)
fdivrp %st,%st(2)
mov    %rsp,%rax
fxch   %st(1)
fstpt  0x10(%rax)
fstpt  (%rax)
lea    0xf9c(%rip),%rdi
xor    %eax,%eax
call   1030 <printf@plt>
xor    %eax,%eax
add    $0xa0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbx
sub    $0x20,%rsp
lea    0xf34(%rip),%rdi
mov    $0x2,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xf3b(%rip),%rdi
mov    $0x7fff,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xf41(%rip),%rdi
mov    $0x8000,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xf47(%rip),%rdi
mov    $0x2,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xf57(%rip),%rdi
mov    $0xffff,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xf66(%rip),%rdi
mov    $0x10000,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xf75(%rip),%rdi
mov    $0x4,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xf7a(%rip),%rdi
mov    $0x7fffffff,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xf7d(%rip),%rdi
mov    $0x80000000,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xf80(%rip),%rdi
mov    $0x4,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xf8e(%rip),%rdi
mov    $0xffffffff,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xf91(%rip),%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xfa0(%rip),%rdi
mov    $0x8,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xfa6(%rip),%rdi
mov    $0x7fffffff,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xfab(%rip),%rdi
mov    $0x80000000,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xfb0(%rip),%rdi
mov    $0x8,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xfbf(%rip),%rdi
mov    $0xffffffff,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xfcd(%rip),%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xfde(%rip),%rdi
mov    $0x8,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xfed(%rip),%rdi
movabs $0x7fffffffffffffff,%rbx
ff ff 7f
mov    %rbx,%rsi
xor    %eax,%eax
call   1040 <printf@plt>
add    $0x1,%rbx
lea    0xfec(%rip),%rdi
mov    %rbx,%rsi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xffc(%rip),%rdi
mov    $0x8,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0x1014(%rip),%rdi
mov    $0xffffffffffffffff,%rsi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0x101d(%rip),%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0x102e(%rip),%rdi
mov    $0x4,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0x1035(%rip),%rdi
mov    $0x8,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0x103d(%rip),%rdi
mov    $0x10,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0x112f(%rip),%rdi
call   1030 <puts@plt>
lea    0x103f(%rip),%rdi
movsd  0xcbc(%rip),%xmm0
movsd  0xcbc(%rip),%xmm1
mov    $0x2,%al
call   1040 <printf@plt>
lea    0x1041(%rip),%rdi
movsd  0xcae(%rip),%xmm0
movsd  0xc9e(%rip),%xmm1
mov    $0x2,%al
call   1040 <printf@plt>
fldt   0xcc9(%rip)
fstpt  0x10(%rsp)
fldl   0xc8f(%rip)
fstpt  (%rsp)
lea    0x1032(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0x10eb(%rip),%rdi
call   1030 <puts@plt>
lea    0x1047(%rip),%rdi
movsd  0xc6b(%rip),%xmm0
movsd  0xc6b(%rip),%xmm1
mov    $0x2,%al
call   1040 <printf@plt>
lea    0x104a(%rip),%rdi
movsd  0xc5d(%rip),%xmm0
movsd  0xc5d(%rip),%xmm1
mov    $0x2,%al
call   1040 <printf@plt>
fldt   0xc70(%rip)
fstpt  0x10(%rsp)
fldl   0xc3e(%rip)
fstpt  (%rsp)
lea    0x103c(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
xor    %eax,%eax
add    $0x20,%rsp
pop    %rbx
ret

LLVM IR (-O0):
@.str = [26 x i8] c"The size of short is %zd\0A\00"
@.str.1 = [25 x i8] c"The max of short is %hd\0A\00"
@.str.2 = [25 x i8] c"short overflow is %hd.\0A\0A\00"
@.str.3 = [35 x i8] c"The size of unsigned short is %zd\0A\00"
@.str.4 = [34 x i8] c"The max of unsigned short is %hu\0A\00"
@.str.5 = [34 x i8] c"unsigned short overflow is %hu.\0A\0A\00"
@.str.6 = [24 x i8] c"The size of int is %zd\0A\00"
@.str.7 = [22 x i8] c"The max of int is %d\0A\00"
@.str.8 = [22 x i8] c"int overflow is %d.\0A\0A\00"
@.str.9 = [33 x i8] c"The size of unsigned int is %zd\0A\00"
@.str.10 = [22 x i8] c"The max of int is %u\0A\00"
@.str.11 = [31 x i8] c"unsigned int overflow is %u.\0A\0A\00"
@.str.12 = [25 x i8] c"The size of long is %zd\0A\00"
@.str.13 = [24 x i8] c"The max of long is %ld\0A\00"
@.str.14 = [24 x i8] c"long overflow is %ld.\0A\0A\00"
@.str.15 = [34 x i8] c"The size of unsigned long is %zd\0A\00"
@.str.16 = [33 x i8] c"The max of unsigned long is %lu\0A\00"
@.str.17 = [33 x i8] c"unsigned long overflow is %lu.\0A\0A\00"
@.str.18 = [34 x i8] c"and the size of long long is %zd\0A\00"
@.str.19 = [30 x i8] c"The max of long long is %lld\0A\00"
@.str.20 = [33 x i8] c"unsigned int overflow is %lld.\0A\0A\00"
@.str.21 = [43 x i8] c"and the size of unsigned long long is %zd\0A\00"
@.str.22 = [30 x i8] c"The max of long long is %llu\0A\00"
@.str.23 = [33 x i8] c"unsigned int overflow is %llu.\0A\0A\00"
@.str.24 = [26 x i8] c"The size of float is %zd\0A\00"
@.str.25 = [27 x i8] c"The size of double is %zd\0A\00"
@.str.26 = [33 x i8] c"The size of long double is %zd\0A\0A\00"
@.str.27 = [38 x i8] c"Decemal Overflow(Mutipled by 10.0f):\0A\00"
@.str.28 = [32 x i8] c"float = %e, float * 10.0f = %e\0A\00"
@.str.29 = [34 x i8] c"double = %e, double * 10.0f = %e\0A\00"
@.str.30 = [47 x i8] c"long double = %Le, long double * 10.0f = %Le\0A\0A\00"
@.str.31 = [39 x i8] c"Decemal Underflow(Divided by 1.0e5f):\0A\00"
@.str.32 = [33 x i8] c"float = %e, float / 1.0e5f = %e\0A\00"
@.str.33 = [35 x i8] c"double = %e, double / 1.0e5f = %e\0A\00"
@.str.34 = [47 x i8] c"long double = %Le, long double / 1.0e5f = %Le\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i16
%3 = alloca i16
%4 = alloca i32
%5 = alloca i32
%6 = alloca i64
%7 = alloca i64
%8 = alloca float
%9 = alloca double
%10 = alloca x86_fp80
%11 = alloca float
%12 = alloca double
%13 = alloca x86_fp80
store i32 0, i32* %1
store i16 32767, i16* %2
store i16 -1, i16* %3
store i32 2147483647, i32* %4
store i32 -1, i32* %5
store i64 9223372036854775807, i64* %6
store i64 -1, i64* %7
store float 0x47E7A03180000000, float* %8
store double 0x7FC1E369003FF8B9, double* %9
store x86_fp80 0xK43FC8F1B4801FFC5C800, x86_fp80* %10
store float 0x37D5825C00000000, float* %11
store double 0x4A7847918, double* %12
store x86_fp80 0xK3BEF94F08F2300000000, x86_fp80* %13
%14 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str, i64 0, i64 0), i64 2)
%15 = load i16, i16* %2
%16 = sext i16 %15 to i32
%17 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.1, i64 0, i64 0), i32 %16)
%18 = load i16, i16* %2
%19 = sext i16 %18 to i32
%20 = add nsw i32 %19, 1
%21 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.2, i64 0, i64 0), i32 %20)
%22 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.3, i64 0, i64 0), i64 2)
%23 = load i16, i16* %3
%24 = zext i16 %23 to i32
%25 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.4, i64 0, i64 0), i32 %24)
%26 = load i16, i16* %3
%27 = zext i16 %26 to i32
%28 = add nsw i32 %27, 1
%29 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.5, i64 0, i64 0), i32 %28)
%30 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.6, i64 0, i64 0), i64 4)
%31 = load i32, i32* %4
%32 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.7, i64 0, i64 0), i32 %31)
%33 = load i32, i32* %4
%34 = add nsw i32 %33, 1
%35 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.8, i64 0, i64 0), i32 %34)
%36 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.9, i64 0, i64 0), i64 4)
%37 = load i32, i32* %5
%38 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.10, i64 0, i64 0), i32 %37)
%39 = load i32, i32* %5
%40 = add i32 %39, 1
%41 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.11, i64 0, i64 0), i32 %40)
%42 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.12, i64 0, i64 0), i64 8)
%43 = load i32, i32* %4
%44 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.13, i64 0, i64 0), i32 %43)
%45 = load i32, i32* %4
%46 = add nsw i32 %45, 1
%47 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.14, i64 0, i64 0), i32 %46)
%48 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.15, i64 0, i64 0), i64 8)
%49 = load i32, i32* %5
%50 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.16, i64 0, i64 0), i32 %49)
%51 = load i32, i32* %5
%52 = add i32 %51, 1
%53 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.17, i64 0, i64 0), i32 %52)
%54 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.18, i64 0, i64 0), i64 8)
%55 = load i64, i64* %6
%56 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.19, i64 0, i64 0), i64 %55)
%57 = load i64, i64* %6
%58 = add nsw i64 %57, 1
%59 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.20, i64 0, i64 0), i64 %58)
%60 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.21, i64 0, i64 0), i64 8)
%61 = load i64, i64* %7
%62 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.22, i64 0, i64 0), i64 %61)
%63 = load i64, i64* %7
%64 = add i64 %63, 1
%65 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.23, i64 0, i64 0), i64 %64)
%66 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.24, i64 0, i64 0), i64 4)
%67 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.25, i64 0, i64 0), i64 8)
%68 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.26, i64 0, i64 0), i64 16)
%69 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.27, i64 0, i64 0))
%70 = load float, float* %8
%71 = fpext float %70 to double
%72 = load float, float* %8
%73 = fmul float %72, 1.000000e+01
%74 = fpext float %73 to double
%75 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.28, i64 0, i64 0), double %71, double %74)
%76 = load double, double* %9
%77 = load double, double* %9
%78 = fmul double %77, 1.000000e+01
%79 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.29, i64 0, i64 0), double %76, double %78)
%80 = load x86_fp80, x86_fp80* %10
%81 = load x86_fp80, x86_fp80* %10
%82 = fmul x86_fp80 %81, 0xK4002A000000000000000
%83 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.30, i64 0, i64 0), x86_fp80 %80, x86_fp80 %82)
%84 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.31, i64 0, i64 0))
%85 = load float, float* %11
%86 = fpext float %85 to double
%87 = load float, float* %11
%88 = fdiv float %87, 1.000000e+05
%89 = fpext float %88 to double
%90 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.32, i64 0, i64 0), double %86, double %89)
%91 = load double, double* %12
%92 = load double, double* %12
%93 = fdiv double %92, 1.000000e+05
%94 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.33, i64 0, i64 0), double %91, double %93)
%95 = load x86_fp80, x86_fp80* %13
%96 = load x86_fp80, x86_fp80* %13
%97 = fdiv x86_fp80 %96, 0xK400FC350000000000000
%98 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.34, i64 0, i64 0), x86_fp80 %95, x86_fp80 %97)
ret i32 0
}

LLVM IR (-O2):
@.str = [26 x i8] c"The size of short is %zd\0A\00"
@.str.1 = [25 x i8] c"The max of short is %hd\0A\00"
@.str.2 = [25 x i8] c"short overflow is %hd.\0A\0A\00"
@.str.3 = [35 x i8] c"The size of unsigned short is %zd\0A\00"
@.str.4 = [34 x i8] c"The max of unsigned short is %hu\0A\00"
@.str.5 = [34 x i8] c"unsigned short overflow is %hu.\0A\0A\00"
@.str.6 = [24 x i8] c"The size of int is %zd\0A\00"
@.str.7 = [22 x i8] c"The max of int is %d\0A\00"
@.str.8 = [22 x i8] c"int overflow is %d.\0A\0A\00"
@.str.9 = [33 x i8] c"The size of unsigned int is %zd\0A\00"
@.str.10 = [22 x i8] c"The max of int is %u\0A\00"
@.str.11 = [31 x i8] c"unsigned int overflow is %u.\0A\0A\00"
@.str.12 = [25 x i8] c"The size of long is %zd\0A\00"
@.str.13 = [24 x i8] c"The max of long is %ld\0A\00"
@.str.14 = [24 x i8] c"long overflow is %ld.\0A\0A\00"
@.str.15 = [34 x i8] c"The size of unsigned long is %zd\0A\00"
@.str.16 = [33 x i8] c"The max of unsigned long is %lu\0A\00"
@.str.17 = [33 x i8] c"unsigned long overflow is %lu.\0A\0A\00"
@.str.18 = [34 x i8] c"and the size of long long is %zd\0A\00"
@.str.19 = [30 x i8] c"The max of long long is %lld\0A\00"
@.str.20 = [33 x i8] c"unsigned int overflow is %lld.\0A\0A\00"
@.str.21 = [43 x i8] c"and the size of unsigned long long is %zd\0A\00"
@.str.22 = [30 x i8] c"The max of long long is %llu\0A\00"
@.str.23 = [33 x i8] c"unsigned int overflow is %llu.\0A\0A\00"
@.str.24 = [26 x i8] c"The size of float is %zd\0A\00"
@.str.25 = [27 x i8] c"The size of double is %zd\0A\00"
@.str.26 = [33 x i8] c"The size of long double is %zd\0A\0A\00"
@.str.28 = [32 x i8] c"float = %e, float * 10.0f = %e\0A\00"
@.str.29 = [34 x i8] c"double = %e, double * 10.0f = %e\0A\00"
@.str.30 = [47 x i8] c"long double = %Le, long double * 10.0f = %Le\0A\0A\00"
@.str.32 = [33 x i8] c"float = %e, float / 1.0e5f = %e\0A\00"
@.str.33 = [35 x i8] c"double = %e, double / 1.0e5f = %e\0A\00"
@.str.34 = [47 x i8] c"long double = %Le, long double / 1.0e5f = %Le\0A\00"
@str = [37 x i8] c"Decemal Overflow(Mutipled by 10.0f):\00"
@str.35 = [38 x i8] c"Decemal Underflow(Divided by 1.0e5f):\00"
define i32 @main() {
%1 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([26 x i8], [26 x i8]* @.str, i64 0, i64 0), i64 2)
%2 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([25 x i8], [25 x i8]* @.str.1, i64 0, i64 0), i32 32767)
%3 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([25 x i8], [25 x i8]* @.str.2, i64 0, i64 0), i32 32768)
%4 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([35 x i8], [35 x i8]* @.str.3, i64 0, i64 0), i64 2)
%5 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([34 x i8], [34 x i8]* @.str.4, i64 0, i64 0), i32 65535)
%6 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([34 x i8], [34 x i8]* @.str.5, i64 0, i64 0), i32 65536)
%7 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.6, i64 0, i64 0), i64 4)
%8 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([22 x i8], [22 x i8]* @.str.7, i64 0, i64 0), i32 2147483647)
%9 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([22 x i8], [22 x i8]* @.str.8, i64 0, i64 0), i32 -2147483648)
%10 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([33 x i8], [33 x i8]* @.str.9, i64 0, i64 0), i64 4)
%11 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([22 x i8], [22 x i8]* @.str.10, i64 0, i64 0), i32 -1)
%12 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([31 x i8], [31 x i8]* @.str.11, i64 0, i64 0), i32 0)
%13 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([25 x i8], [25 x i8]* @.str.12, i64 0, i64 0), i64 8)
%14 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.13, i64 0, i64 0), i32 2147483647)
%15 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.14, i64 0, i64 0), i32 -2147483648)
%16 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([34 x i8], [34 x i8]* @.str.15, i64 0, i64 0), i64 8)
%17 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([33 x i8], [33 x i8]* @.str.16, i64 0, i64 0), i32 -1)
%18 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([33 x i8], [33 x i8]* @.str.17, i64 0, i64 0), i32 0)
%19 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([34 x i8], [34 x i8]* @.str.18, i64 0, i64 0), i64 8)
%20 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([30 x i8], [30 x i8]* @.str.19, i64 0, i64 0), i64 9223372036854775807)
%21 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([33 x i8], [33 x i8]* @.str.20, i64 0, i64 0), i64 -9223372036854775808)
%22 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([43 x i8], [43 x i8]* @.str.21, i64 0, i64 0), i64 8)
%23 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([30 x i8], [30 x i8]* @.str.22, i64 0, i64 0), i64 -1)
%24 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([33 x i8], [33 x i8]* @.str.23, i64 0, i64 0), i64 0)
%25 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([26 x i8], [26 x i8]* @.str.24, i64 0, i64 0), i64 4)
%26 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([27 x i8], [27 x i8]* @.str.25, i64 0, i64 0), i64 8)
%27 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([33 x i8], [33 x i8]* @.str.26, i64 0, i64 0), i64 16)
%28 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([37 x i8], [37 x i8]* @str, i64 0, i64 0))
%29 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([32 x i8], [32 x i8]* @.str.28, i64 0, i64 0), double 0x47E7A03180000000, double 0x7FF0000000000000)
%30 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([34 x i8], [34 x i8]* @.str.29, i64 0, i64 0), double 0x7FC1E369003FF8B9, double 0x7FF0000000000000)
%31 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([47 x i8], [47 x i8]* @.str.30, i64 0, i64 0), x86_fp80 0xK43FC8F1B4801FFC5C800, x86_fp80 0xK43FFB2E21A027FB73A00)
%32 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([38 x i8], [38 x i8]* @str.35, i64 0, i64 0))
%33 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([33 x i8], [33 x i8]* @.str.32, i64 0, i64 0), double 0x37D5825C00000000, double 0x36CC000000000000)
%34 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([35 x i8], [35 x i8]* @.str.33, i64 0, i64 0), double 0x4A7847918, double 9.876520e-319)
%35 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([47 x i8], [47 x i8]* @.str.34, i64 0, i64 0), x86_fp80 0xK3BEF94F08F2300000000, x86_fp80 0xK3BDEC337DD71F36262CC)
ret i32 0
}