#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 */
double DBL_MAX;
double DBL_MIN;
double FLT_MAX;
double FLT_MIN;
double LDBL_MAX;
double LDBL_MIN;
int /*<<< orphan*/ printf(char *, ...);
void float_lookup() {
  printf("\n==========Ranges defined by float.h==========\n");
  printf("Float range:    %g - %g\n", FLT_MIN, FLT_MAX);
  printf("Double range:   %g - %g\n", DBL_MIN, DBL_MAX);
  printf("LDouble range:  %Lg - %Lg\n", LDBL_MIN, LDBL_MAX);
}


x86 assembly (clang, -O0):
<float_lookup>:
push   %rbp
mov    %rsp,%rbp
lea    0xee5(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    0x2ebf(%rip),%rax
movsd  (%rax),%xmm0
mov    0x2eac(%rip),%rax
movsd  (%rax),%xmm1
lea    0xef1(%rip),%rdi
mov    $0x2,%al
call   1030 <printf@plt>
mov    0x2e73(%rip),%rax
movsd  (%rax),%xmm0
mov    0x2e60(%rip),%rax
movsd  (%rax),%xmm1
lea    0xee6(%rip),%rdi
mov    $0x2,%al
call   1030 <printf@plt>
mov    0x2e57(%rip),%rax
movsd  (%rax),%xmm0
mov    0x2e54(%rip),%rax
movsd  (%rax),%xmm1
lea    0xedb(%rip),%rdi
mov    $0x2,%al
call   1030 <printf@plt>
pop    %rbp
ret

x86 assembly (clang, -O2):
<float_lookup>:
push   %rax
lea    0xf25(%rip),%rdi
call   1030 <puts@plt>
mov    0x2eb4(%rip),%rax
movsd  (%rax),%xmm0
mov    0x2ea1(%rip),%rax
movsd  (%rax),%xmm1
lea    0xeb6(%rip),%rdi
mov    $0x2,%al
call   1040 <printf@plt>
mov    0x2e68(%rip),%rax
movsd  (%rax),%xmm0
mov    0x2e55(%rip),%rax
movsd  (%rax),%xmm1
lea    0xeab(%rip),%rdi
mov    $0x2,%al
call   1040 <printf@plt>
mov    0x2e4c(%rip),%rax
movsd  (%rax),%xmm0
mov    0x2e49(%rip),%rax
movsd  (%rax),%xmm1
lea    0xea0(%rip),%rdi
mov    $0x2,%al
pop    %rcx
jmp    1040 <printf@plt>

LLVM IR (-O0):
@.str = [48 x i8] c"\0A==========Ranges defined by float.h==========\0A\00"
@.str.1 = [25 x i8] c"Float range: %g - %g\0A\00"
@FLT_MIN = global double 0.000000e+00
@FLT_MAX = global double 0.000000e+00
@.str.2 = [25 x i8] c"Double range: %g - %g\0A\00"
@DBL_MIN = global double 0.000000e+00
@DBL_MAX = global double 0.000000e+00
@.str.3 = [27 x i8] c"LDouble range: %Lg - %Lg\0A\00"
@LDBL_MIN = global double 0.000000e+00
@LDBL_MAX = global double 0.000000e+00
define void @float_lookup() {
%1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([48 x i8], [48 x i8]* @.str, i64 0, i64 0))
%2 = load double, double* @FLT_MIN
%3 = load double, double* @FLT_MAX
%4 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.1, i64 0, i64 0), double %2, double %3)
%5 = load double, double* @DBL_MIN
%6 = load double, double* @DBL_MAX
%7 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.2, i64 0, i64 0), double %5, double %6)
%8 = load double, double* @LDBL_MIN
%9 = load double, double* @LDBL_MAX
%10 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.3, i64 0, i64 0), double %8, double %9)
ret void
}

LLVM IR (-O2):
@.str.1 = [25 x i8] c"Float range: %g - %g\0A\00"
@FLT_MIN = global double 0.000000e+00
@FLT_MAX = global double 0.000000e+00
@.str.2 = [25 x i8] c"Double range: %g - %g\0A\00"
@DBL_MIN = global double 0.000000e+00
@DBL_MAX = global double 0.000000e+00
@.str.3 = [27 x i8] c"LDouble range: %Lg - %Lg\0A\00"
@LDBL_MIN = global double 0.000000e+00
@LDBL_MAX = global double 0.000000e+00
@str = [47 x i8] c"\0A==========Ranges defined by float.h==========\00"
define void @float_lookup() {
%1 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([47 x i8], [47 x i8]* @str, i64 0, i64 0))
%2 = load double, double* @FLT_MIN
%3 = load double, double* @FLT_MAX
%4 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([25 x i8], [25 x i8]* @.str.1, i64 0, i64 0), double %2, double %3)
%5 = load double, double* @DBL_MIN
%6 = load double, double* @DBL_MAX
%7 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([25 x i8], [25 x i8]* @.str.2, i64 0, i64 0), double %5, double %6)
%8 = load double, double* @LDBL_MIN
%9 = load double, double* @LDBL_MAX
%10 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([27 x i8], [27 x i8]* @.str.3, i64 0, i64 0), double %8, double %9)
ret void
}