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
14 // GNU32: @agggregate_LD = dso_local global { i8, [3 x i8], x86_fp80 } zeroinitializer, align 4
15 // GNU64: @agggregate_LD = dso_local global { i8, [15 x i8], x86_fp80 } zeroinitializer, align 16
16 // MSC64: @agggregate_LD = dso_local global { i8, [7 x i8], double } zeroinitializer, align 8
18 long double dataLD
= 1.0L;
19 // GNU32: @dataLD = dso_local global x86_fp80 0xK3FFF8000000000000000, align 4
20 // GNU64: @dataLD = dso_local global x86_fp80 0xK3FFF8000000000000000, align 16
21 // MSC64: @dataLD = dso_local global double 1.000000e+00, align 8
23 long double _Complex dataLDC
= {1.0L, 1.0L};
24 // GNU32: @dataLDC = dso_local global { x86_fp80, x86_fp80 } { x86_fp80 0xK3FFF8000000000000000, x86_fp80 0xK3FFF8000000000000000 }, align 4
25 // GNU64: @dataLDC = dso_local global { x86_fp80, x86_fp80 } { x86_fp80 0xK3FFF8000000000000000, x86_fp80 0xK3FFF8000000000000000 }, align 16
26 // MSC64: @dataLDC = dso_local global { double, double } { double 1.000000e+00, double 1.000000e+00 }, align 8
28 long double TestLD(long double x
) {
31 // GNU32: define dso_local x86_fp80 @TestLD(x86_fp80 noundef %x)
32 // GNU64: define dso_local void @TestLD(ptr dead_on_unwind noalias writable sret(x86_fp80) align 16 %agg.result, ptr noundef %0)
33 // MSC64: define dso_local double @TestLD(double noundef %x)
35 long double _Complex
TestLDC(long double _Complex x
) {
38 // GNU32: define dso_local void @TestLDC(ptr dead_on_unwind noalias writable sret({ x86_fp80, x86_fp80 }) align 4 %agg.result, ptr noundef byval({ x86_fp80, x86_fp80 }) align 4 %x)
39 // GNU64: define dso_local void @TestLDC(ptr dead_on_unwind noalias writable sret({ x86_fp80, x86_fp80 }) align 16 %agg.result, ptr noundef %x)
40 // MSC64: define dso_local void @TestLDC(ptr dead_on_unwind noalias writable sret({ double, double }) align 8 %agg.result, ptr noundef %x)
42 // GNU32: declare dso_local void @__mulxc3
43 // GNU64: declare dso_local void @__mulxc3
44 // MSC64: declare dso_local void @__muldc3
46 void VarArgLD(int a
, ...) {
47 // GNU32-LABEL: define{{.*}} void @VarArgLD
48 // GNU64-LABEL: define{{.*}} void @VarArgLD
49 // MSC64-LABEL: define{{.*}} void @VarArgLD
51 __builtin_va_start(ap
, a
);
52 long double LD
= __builtin_va_arg(ap
, long double);
53 // GNU32: load x86_fp80, ptr %argp.cur
54 // GNU64: [[P:%.*]] = load ptr, ptr %argp.cur
55 // GNU64: load x86_fp80, ptr [[P]]
56 // MSC64: load double, ptr %argp.cur