Clang Project

clang_source_code/test/CodeGen/mingw-long-double.c
1// RUN: %clang_cc1 -triple i686-windows-gnu -emit-llvm -o - %s \
2// RUN:    | FileCheck %s --check-prefix=GNU32
3// RUN: %clang_cc1 -triple i686-windows-gnu -emit-llvm -o - %s -mms-bitfields \
4// RUN:    | FileCheck %s --check-prefix=GNU32
5// RUN: %clang_cc1 -triple x86_64-windows-gnu -emit-llvm -o - %s \
6// RUN:    | FileCheck %s --check-prefix=GNU64
7// RUN: %clang_cc1 -triple x86_64-windows-msvc -emit-llvm -o - %s \
8// RUN:    | FileCheck %s --check-prefix=MSC64
9
10struct {
11  char c;
12  long double ldb;
13} agggregate_LD = {};
14// GNU32: %struct.anon = type { i8, x86_fp80 }
15// GNU32: @agggregate_LD = dso_local global %struct.anon zeroinitializer, align 4
16// GNU64: %struct.anon = type { i8, x86_fp80 }
17// GNU64: @agggregate_LD = dso_local global %struct.anon zeroinitializer, align 16
18// MSC64: %struct.anon = type { i8, double }
19// MSC64: @agggregate_LD = dso_local global %struct.anon zeroinitializer, align 8
20
21long double dataLD = 1.0L;
22// GNU32: @dataLD = dso_local global x86_fp80 0xK3FFF8000000000000000, align 4
23// GNU64: @dataLD = dso_local global x86_fp80 0xK3FFF8000000000000000, align 16
24// MSC64: @dataLD = dso_local global double 1.000000e+00, align 8
25
26long double _Complex dataLDC = {1.0L, 1.0L};
27// GNU32: @dataLDC = dso_local global { x86_fp80, x86_fp80 } { x86_fp80 0xK3FFF8000000000000000, x86_fp80 0xK3FFF8000000000000000 }, align 4
28// GNU64: @dataLDC = dso_local global { x86_fp80, x86_fp80 } { x86_fp80 0xK3FFF8000000000000000, x86_fp80 0xK3FFF8000000000000000 }, align 16
29// MSC64: @dataLDC = dso_local global { double, double } { double 1.000000e+00, double 1.000000e+00 }, align 8
30
31long double TestLD(long double x) {
32  return x * x;
33}
34// GNU32: define dso_local x86_fp80 @TestLD(x86_fp80 %x)
35// GNU64: define dso_local void @TestLD(x86_fp80* noalias sret %agg.result, x86_fp80*)
36// MSC64: define dso_local double @TestLD(double %x)
37
38long double _Complex TestLDC(long double _Complex x) {
39  return x * x;
40}
41// GNU32: define dso_local void @TestLDC({ x86_fp80, x86_fp80 }* noalias sret %agg.result, { x86_fp80, x86_fp80 }* byval align 4 %x)
42// GNU64: define dso_local void @TestLDC({ x86_fp80, x86_fp80 }* noalias sret %agg.result, { x86_fp80, x86_fp80 }* %x)
43// MSC64: define dso_local void @TestLDC({ double, double }* noalias sret %agg.result, { double, double }* %x)
44
45// GNU32: declare dso_local void @__mulxc3
46// GNU64: declare dso_local void @__mulxc3
47// MSC64: declare dso_local void @__muldc3
48