#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*/ abort();
int /*<<< orphan*/ bar_char(char *);
int /*<<< orphan*/ bar_double(double *);
int /*<<< orphan*/ bar_float(float *);
int /*<<< orphan*/ bar_int(int *);
int /*<<< orphan*/ bar_ldouble_t(long double *);
int /*<<< orphan*/ bar_llong(long long *);
int /*<<< orphan*/ bar_long(long *);
int /*<<< orphan*/ bar_short(short *);
int /*<<< orphan*/ baz_char(char *);
int /*<<< orphan*/ baz_double(double *);
int /*<<< orphan*/ baz_float(float *);
int /*<<< orphan*/ baz_int(int *);
int /*<<< orphan*/ baz_ldouble_t(long double *);
int /*<<< orphan*/ baz_llong(long long *);
int /*<<< orphan*/ baz_long(long *);
int /*<<< orphan*/ baz_short(short *);
int main(void) {
  {
    float var = 0;
    bar_float(&var);
    if (var != 6)
      abort();
    var = 0;
    baz_float(&var);
    if (var != 4)
      abort();
  }
  {
    double var = 0;
    bar_double(&var);
    if (var != 6)
      abort();
    var = 0;
    baz_double(&var);
    if (var != 4)
      abort();
  }
  {
    long double var = 0;
    bar_ldouble_t(&var);
    if (var != 6)
      abort();
    var = 0;
    baz_ldouble_t(&var);
    if (var != 4)
      abort();
  }
  {
    char var = 0;
    bar_char(&var);
    if (var != 6)
      abort();
    var = 0;
    baz_char(&var);
    if (var != 4)
      abort();
  }
  {
    short var = 0;
    bar_short(&var);
    if (var != 6)
      abort();
    var = 0;
    baz_short(&var);
    if (var != 4)
      abort();
  }
  {
    int var = 0;
    bar_int(&var);
    if (var != 6)
      abort();
    var = 0;
    baz_int(&var);
    if (var != 4)
      abort();
  }
  {
    long var = 0;
    bar_long(&var);
    if (var != 6)
      abort();
    var = 0;
    baz_long(&var);
    if (var != 4)
      abort();
  }
  {
    long long var = 0;
    bar_llong(&var);
    if (var != 6)
      abort();
    var = 0;
    baz_llong(&var);
    if (var != 4)
      abort();
  }
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
movl   $0x0,-0x4(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x8(%rbp)
lea    -0x8(%rbp),%rdi
call   1030 <bar_float@plt>
movss  -0x8(%rbp),%xmm0
movss  0xdc3(%rip),%xmm1
ucomiss %xmm1,%xmm0
jne    1251 <main+0x41>
jp     1251 <main+0x41>
jmp    1258 <main+0x48>
mov    $0x0,%al
call   1060 <abort@plt>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x8(%rbp)
lea    -0x8(%rbp),%rdi
call   1120 <baz_float@plt>
movss  -0x8(%rbp),%xmm0
movss  0xd8e(%rip),%xmm1
ucomiss %xmm1,%xmm0
jne    128a <main+0x7a>
jp     128a <main+0x7a>
jmp    1291 <main+0x81>
mov    $0x0,%al
call   1060 <abort@plt>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x10(%rbp)
lea    -0x10(%rbp),%rdi
call   1100 <bar_double@plt>
movsd  -0x10(%rbp),%xmm0
movsd  0xd59(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    12c4 <main+0xb4>
jp     12c4 <main+0xb4>
jmp    12cb <main+0xbb>
mov    $0x0,%al
call   1060 <abort@plt>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x10(%rbp)
lea    -0x10(%rbp),%rdi
call   10a0 <baz_double@plt>
movsd  -0x10(%rbp),%xmm0
movsd  0xd27(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    12fe <main+0xee>
jp     12fe <main+0xee>
jmp    1305 <main+0xf5>
mov    $0x0,%al
call   1060 <abort@plt>
fldz
fstpt  -0x20(%rbp)
lea    -0x20(%rbp),%rdi
call   10d0 <bar_ldouble_t@plt>
fldt   -0x20(%rbp)
flds   0xce4(%rip)
fxch   %st(1)
fucomip %st(1),%st
fstp   %st(0)
jne    1333 <main+0x123>
jp     1333 <main+0x123>
jmp    133a <main+0x12a>
mov    $0x0,%al
call   1060 <abort@plt>
fldz
fstpt  -0x20(%rbp)
lea    -0x20(%rbp),%rdi
call   10b0 <baz_ldouble_t@plt>
fldt   -0x20(%rbp)
flds   0xcb3(%rip)
fxch   %st(1)
fucomip %st(1),%st
fstp   %st(0)
jne    1368 <main+0x158>
jp     1368 <main+0x158>
jmp    136f <main+0x15f>
mov    $0x0,%al
call   1060 <abort@plt>
movb   $0x0,-0x21(%rbp)
lea    -0x21(%rbp),%rdi
call   1040 <bar_char@plt>
movsbl -0x21(%rbp),%eax
cmp    $0x6,%eax
je     1390 <main+0x180>
mov    $0x0,%al
call   1060 <abort@plt>
movb   $0x0,-0x21(%rbp)
lea    -0x21(%rbp),%rdi
call   1090 <baz_char@plt>
movsbl -0x21(%rbp),%eax
cmp    $0x4,%eax
je     13b1 <main+0x1a1>
mov    $0x0,%al
call   1060 <abort@plt>
movw   $0x0,-0x24(%rbp)
lea    -0x24(%rbp),%rdi
call   10f0 <bar_short@plt>
movswl -0x24(%rbp),%eax
cmp    $0x6,%eax
je     13d4 <main+0x1c4>
mov    $0x0,%al
call   1060 <abort@plt>
movw   $0x0,-0x24(%rbp)
lea    -0x24(%rbp),%rdi
call   1050 <baz_short@plt>
movswl -0x24(%rbp),%eax
cmp    $0x4,%eax
je     13f7 <main+0x1e7>
mov    $0x0,%al
call   1060 <abort@plt>
movl   $0x0,-0x28(%rbp)
lea    -0x28(%rbp),%rdi
call   1130 <bar_int@plt>
cmpl   $0x6,-0x28(%rbp)
je     1418 <main+0x208>
mov    $0x0,%al
call   1060 <abort@plt>
movl   $0x0,-0x28(%rbp)
lea    -0x28(%rbp),%rdi
call   10c0 <baz_int@plt>
cmpl   $0x4,-0x28(%rbp)
je     1439 <main+0x229>
mov    $0x0,%al
call   1060 <abort@plt>
movq   $0x0,-0x30(%rbp)
lea    -0x30(%rbp),%rdi
call   1110 <bar_long@plt>
cmpq   $0x6,-0x30(%rbp)
je     145c <main+0x24c>
mov    $0x0,%al
call   1060 <abort@plt>
movq   $0x0,-0x30(%rbp)
lea    -0x30(%rbp),%rdi
call   1080 <baz_long@plt>
cmpq   $0x4,-0x30(%rbp)
je     147f <main+0x26f>
mov    $0x0,%al
call   1060 <abort@plt>
movq   $0x0,-0x38(%rbp)
lea    -0x38(%rbp),%rdi
call   1070 <bar_llong@plt>
cmpq   $0x6,-0x38(%rbp)
je     14a2 <main+0x292>
mov    $0x0,%al
call   1060 <abort@plt>
movq   $0x0,-0x38(%rbp)
lea    -0x38(%rbp),%rdi
call   10e0 <baz_llong@plt>
cmpq   $0x4,-0x38(%rbp)
je     14c5 <main+0x2b5>
mov    $0x0,%al
call   1060 <abort@plt>
xor    %eax,%eax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
sub    $0x28,%rsp
movl   $0x0,(%rsp)
mov    %rsp,%rdi
call   1030 <bar_float@plt>
movss  (%rsp),%xmm0
ucomiss 0xdd1(%rip),%xmm0
jne    13f7 <main+0x1e7>
jp     13f7 <main+0x1e7>
movl   $0x0,(%rsp)
mov    %rsp,%rdi
call   1120 <baz_float@plt>
movss  (%rsp),%xmm0
ucomiss 0xdae(%rip),%xmm0
jne    13f7 <main+0x1e7>
jp     13f7 <main+0x1e7>
movq   $0x0,(%rsp)
mov    %rsp,%rdi
call   1100 <bar_double@plt>
movsd  (%rsp),%xmm0
ucomisd 0xd89(%rip),%xmm0
jne    13f7 <main+0x1e7>
jp     13f7 <main+0x1e7>
movq   $0x0,(%rsp)
mov    %rsp,%rdi
call   10a0 <baz_double@plt>
movsd  (%rsp),%xmm0
ucomisd 0xd68(%rip),%xmm0
jne    13f7 <main+0x1e7>
jp     13f7 <main+0x1e7>
fldz
fld    %st(0)
fstpt  0x1c(%rsp)
fstpt  (%rsp)
mov    %rsp,%rdi
call   10d0 <bar_ldouble_t@plt>
fldt   (%rsp)
flds   0xd30(%rip)
fxch   %st(1)
fucomip %st(1),%st
fstp   %st(0)
jne    13f7 <main+0x1e7>
jp     13f7 <main+0x1e7>
fldt   0x1c(%rsp)
fstpt  (%rsp)
mov    %rsp,%rdi
call   10b0 <baz_ldouble_t@plt>
fldt   (%rsp)
flds   0xd0a(%rip)
fxch   %st(1)
fucomip %st(1),%st
fstp   %st(0)
jne    13f7 <main+0x1e7>
jp     13f7 <main+0x1e7>
movb   $0x0,(%rsp)
mov    %rsp,%rdi
call   1040 <bar_char@plt>
cmpb   $0x6,(%rsp)
jne    13f7 <main+0x1e7>
movb   $0x0,(%rsp)
mov    %rsp,%rdi
call   1090 <baz_char@plt>
cmpb   $0x4,(%rsp)
jne    13f7 <main+0x1e7>
movw   $0x0,(%rsp)
mov    %rsp,%rdi
call   10f0 <bar_short@plt>
cmpw   $0x6,(%rsp)
jne    13f7 <main+0x1e7>
movw   $0x0,(%rsp)
mov    %rsp,%rdi
call   1050 <baz_short@plt>
cmpw   $0x4,(%rsp)
jne    13f7 <main+0x1e7>
movl   $0x0,(%rsp)
mov    %rsp,%rdi
call   1130 <bar_int@plt>
cmpl   $0x6,(%rsp)
jne    13f7 <main+0x1e7>
movl   $0x0,(%rsp)
mov    %rsp,%rdi
call   10c0 <baz_int@plt>
cmpl   $0x4,(%rsp)
jne    13f7 <main+0x1e7>
movq   $0x0,(%rsp)
mov    %rsp,%rdi
call   1110 <bar_long@plt>
cmpq   $0x6,(%rsp)
jne    13f7 <main+0x1e7>
movq   $0x0,(%rsp)
mov    %rsp,%rdi
call   1080 <baz_long@plt>
cmpq   $0x4,(%rsp)
jne    13f7 <main+0x1e7>
movq   $0x0,(%rsp)
mov    %rsp,%rdi
call   1070 <bar_llong@plt>
cmpq   $0x6,(%rsp)
jne    13f7 <main+0x1e7>
movq   $0x0,(%rsp)
mov    %rsp,%rdi
call   10e0 <baz_llong@plt>
cmpq   $0x4,(%rsp)
jne    13f7 <main+0x1e7>
xor    %eax,%eax
add    $0x28,%rsp
ret
xor    %eax,%eax
call   1060 <abort@plt>

LLVM IR (-O0):
define i32 @main() {
%1 = alloca i32
%2 = alloca float
%3 = alloca double
%4 = alloca x86_fp80
%5 = alloca i8
%6 = alloca i16
%7 = alloca i32
%8 = alloca i64
%9 = alloca i64
store i32 0, i32* %1
store float 0.000000e+00, float* %2
%10 = call i32 @bar_float(float* %2)
%11 = load float, float* %2
%12 = fcmp une float %11, 6.000000e+00
br i1 %12, label %13, label %15
13: ; preds = %0
%14 = call i32 (...) @abort()
unreachable
15: ; preds = %0
store float 0.000000e+00, float* %2
%16 = call i32 @baz_float(float* %2)
%17 = load float, float* %2
%18 = fcmp une float %17, 4.000000e+00
br i1 %18, label %19, label %21
19: ; preds = %15
%20 = call i32 (...) @abort()
unreachable
21: ; preds = %15
store double 0.000000e+00, double* %3
%22 = call i32 @bar_double(double* %3)
%23 = load double, double* %3
%24 = fcmp une double %23, 6.000000e+00
br i1 %24, label %25, label %27
25: ; preds = %21
%26 = call i32 (...) @abort()
unreachable
27: ; preds = %21
store double 0.000000e+00, double* %3
%28 = call i32 @baz_double(double* %3)
%29 = load double, double* %3
%30 = fcmp une double %29, 4.000000e+00
br i1 %30, label %31, label %33
31: ; preds = %27
%32 = call i32 (...) @abort()
unreachable
33: ; preds = %27
store x86_fp80 0xK00000000000000000000, x86_fp80* %4
%34 = call i32 @bar_ldouble_t(x86_fp80* %4)
%35 = load x86_fp80, x86_fp80* %4
%36 = fcmp une x86_fp80 %35, 0xK4001C000000000000000
br i1 %36, label %37, label %39
37: ; preds = %33
%38 = call i32 (...) @abort()
unreachable
39: ; preds = %33
store x86_fp80 0xK00000000000000000000, x86_fp80* %4
%40 = call i32 @baz_ldouble_t(x86_fp80* %4)
%41 = load x86_fp80, x86_fp80* %4
%42 = fcmp une x86_fp80 %41, 0xK40018000000000000000
br i1 %42, label %43, label %45
43: ; preds = %39
%44 = call i32 (...) @abort()
unreachable
45: ; preds = %39
store i8 0, i8* %5
%46 = call i32 @bar_char(i8* %5)
%47 = load i8, i8* %5
%48 = sext i8 %47 to i32
%49 = icmp ne i32 %48, 6
br i1 %49, label %50, label %52
50: ; preds = %45
%51 = call i32 (...) @abort()
unreachable
52: ; preds = %45
store i8 0, i8* %5
%53 = call i32 @baz_char(i8* %5)
%54 = load i8, i8* %5
%55 = sext i8 %54 to i32
%56 = icmp ne i32 %55, 4
br i1 %56, label %57, label %59
57: ; preds = %52
%58 = call i32 (...) @abort()
unreachable
59: ; preds = %52
store i16 0, i16* %6
%60 = call i32 @bar_short(i16* %6)
%61 = load i16, i16* %6
%62 = sext i16 %61 to i32
%63 = icmp ne i32 %62, 6
br i1 %63, label %64, label %66
64: ; preds = %59
%65 = call i32 (...) @abort()
unreachable
66: ; preds = %59
store i16 0, i16* %6
%67 = call i32 @baz_short(i16* %6)
%68 = load i16, i16* %6
%69 = sext i16 %68 to i32
%70 = icmp ne i32 %69, 4
br i1 %70, label %71, label %73
71: ; preds = %66
%72 = call i32 (...) @abort()
unreachable
73: ; preds = %66
store i32 0, i32* %7
%74 = call i32 @bar_int(i32* %7)
%75 = load i32, i32* %7
%76 = icmp ne i32 %75, 6
br i1 %76, label %77, label %79
77: ; preds = %73
%78 = call i32 (...) @abort()
unreachable
79: ; preds = %73
store i32 0, i32* %7
%80 = call i32 @baz_int(i32* %7)
%81 = load i32, i32* %7
%82 = icmp ne i32 %81, 4
br i1 %82, label %83, label %85
83: ; preds = %79
%84 = call i32 (...) @abort()
unreachable
85: ; preds = %79
store i64 0, i64* %8
%86 = call i32 @bar_long(i64* %8)
%87 = load i64, i64* %8
%88 = icmp ne i64 %87, 6
br i1 %88, label %89, label %91
89: ; preds = %85
%90 = call i32 (...) @abort()
unreachable
91: ; preds = %85
store i64 0, i64* %8
%92 = call i32 @baz_long(i64* %8)
%93 = load i64, i64* %8
%94 = icmp ne i64 %93, 4
br i1 %94, label %95, label %97
95: ; preds = %91
%96 = call i32 (...) @abort()
unreachable
97: ; preds = %91
store i64 0, i64* %9
%98 = call i32 @bar_llong(i64* %9)
%99 = load i64, i64* %9
%100 = icmp ne i64 %99, 6
br i1 %100, label %101, label %103
101: ; preds = %97
%102 = call i32 (...) @abort()
unreachable
103: ; preds = %97
store i64 0, i64* %9
%104 = call i32 @baz_llong(i64* %9)
%105 = load i64, i64* %9
%106 = icmp ne i64 %105, 4
br i1 %106, label %107, label %109
107: ; preds = %103
%108 = call i32 (...) @abort()
unreachable
109: ; preds = %103
ret i32 0
}

LLVM IR (-O2):
define i32 @main() {
%1 = alloca float
%2 = alloca double
%3 = alloca x86_fp80
%4 = alloca i8
%5 = alloca i16
%6 = alloca i32
%7 = alloca i64
%8 = alloca i64
%9 = bitcast float* %1 to i8*
store float 0.000000e+00, float* %1
%10 = call i32 @bar_float(float* %1)
%11 = load float, float* %1
%12 = fcmp une float %11, 6.000000e+00
br i1 %12, label %13, label %15
13: ; preds = %0
%14 = call i32 (...) @abort()
unreachable
15: ; preds = %0
store float 0.000000e+00, float* %1
%16 = call i32 @baz_float(float* %1)
%17 = load float, float* %1
%18 = fcmp une float %17, 4.000000e+00
br i1 %18, label %19, label %21
19: ; preds = %15
%20 = call i32 (...) @abort()
unreachable
21: ; preds = %15
%22 = bitcast double* %2 to i8*
store double 0.000000e+00, double* %2
%23 = call i32 @bar_double(double* %2)
%24 = load double, double* %2
%25 = fcmp une double %24, 6.000000e+00
br i1 %25, label %26, label %28
26: ; preds = %21
%27 = call i32 (...) @abort()
unreachable
28: ; preds = %21
store double 0.000000e+00, double* %2
%29 = call i32 @baz_double(double* %2)
%30 = load double, double* %2
%31 = fcmp une double %30, 4.000000e+00
br i1 %31, label %32, label %34
32: ; preds = %28
%33 = call i32 (...) @abort()
unreachable
34: ; preds = %28
%35 = bitcast x86_fp80* %3 to i8*
store x86_fp80 0xK00000000000000000000, x86_fp80* %3
%36 = call i32 @bar_ldouble_t(x86_fp80* %3)
%37 = load x86_fp80, x86_fp80* %3
%38 = fcmp une x86_fp80 %37, 0xK4001C000000000000000
br i1 %38, label %39, label %41
39: ; preds = %34
%40 = call i32 (...) @abort()
unreachable
41: ; preds = %34
store x86_fp80 0xK00000000000000000000, x86_fp80* %3
%42 = call i32 @baz_ldouble_t(x86_fp80* %3)
%43 = load x86_fp80, x86_fp80* %3
%44 = fcmp une x86_fp80 %43, 0xK40018000000000000000
br i1 %44, label %45, label %47
45: ; preds = %41
%46 = call i32 (...) @abort()
unreachable
47: ; preds = %41
store i8 0, i8* %4
%48 = call i32 @bar_char(i8* %4)
%49 = load i8, i8* %4
%50 = icmp eq i8 %49, 6
br i1 %50, label %53, label %51
51: ; preds = %47
%52 = call i32 (...) @abort()
unreachable
53: ; preds = %47
store i8 0, i8* %4
%54 = call i32 @baz_char(i8* %4)
%55 = load i8, i8* %4
%56 = icmp eq i8 %55, 4
br i1 %56, label %59, label %57
57: ; preds = %53
%58 = call i32 (...) @abort()
unreachable
59: ; preds = %53
%60 = bitcast i16* %5 to i8*
store i16 0, i16* %5
%61 = call i32 @bar_short(i16* %5)
%62 = load i16, i16* %5
%63 = icmp eq i16 %62, 6
br i1 %63, label %66, label %64
64: ; preds = %59
%65 = call i32 (...) @abort()
unreachable
66: ; preds = %59
store i16 0, i16* %5
%67 = call i32 @baz_short(i16* %5)
%68 = load i16, i16* %5
%69 = icmp eq i16 %68, 4
br i1 %69, label %72, label %70
70: ; preds = %66
%71 = call i32 (...) @abort()
unreachable
72: ; preds = %66
%73 = bitcast i32* %6 to i8*
store i32 0, i32* %6
%74 = call i32 @bar_int(i32* %6)
%75 = load i32, i32* %6
%76 = icmp eq i32 %75, 6
br i1 %76, label %79, label %77
77: ; preds = %72
%78 = call i32 (...) @abort()
unreachable
79: ; preds = %72
store i32 0, i32* %6
%80 = call i32 @baz_int(i32* %6)
%81 = load i32, i32* %6
%82 = icmp eq i32 %81, 4
br i1 %82, label %85, label %83
83: ; preds = %79
%84 = call i32 (...) @abort()
unreachable
85: ; preds = %79
%86 = bitcast i64* %7 to i8*
store i64 0, i64* %7
%87 = call i32 @bar_long(i64* %7)
%88 = load i64, i64* %7
%89 = icmp eq i64 %88, 6
br i1 %89, label %92, label %90
90: ; preds = %85
%91 = call i32 (...) @abort()
unreachable
92: ; preds = %85
store i64 0, i64* %7
%93 = call i32 @baz_long(i64* %7)
%94 = load i64, i64* %7
%95 = icmp eq i64 %94, 4
br i1 %95, label %98, label %96
96: ; preds = %92
%97 = call i32 (...) @abort()
unreachable
98: ; preds = %92
%99 = bitcast i64* %8 to i8*
store i64 0, i64* %8
%100 = call i32 @bar_llong(i64* %8)
%101 = load i64, i64* %8
%102 = icmp eq i64 %101, 6
br i1 %102, label %105, label %103
103: ; preds = %98
%104 = call i32 (...) @abort()
unreachable
105: ; preds = %98
store i64 0, i64* %8
%106 = call i32 @baz_llong(i64* %8)
%107 = load i64, i64* %8
%108 = icmp eq i64 %107, 4
br i1 %108, label %111, label %109
109: ; preds = %105
%110 = call i32 (...) @abort()
unreachable
111: ; preds = %105
ret i32 0
}