|
1 |
| -// RUN: %clang_cc1 -w -triple i386-pc-win32 -emit-llvm -o - %s | FileCheck %s |
| 1 | +// RUN: %clang_cc1 -fms-extensions -w -triple i386-pc-win32 -emit-llvm -o - %s | FileCheck %s |
2 | 2 |
|
3 | 3 | // CHECK-LABEL: define dso_local i64 @f1_1()
|
4 | 4 | // CHECK-LABEL: define dso_local void @f1_2(i32 %a0.0, i32 %a0.1)
|
@@ -90,3 +90,41 @@ void __fastcall fastcall_indirect_vec(__m128 x, __m128 y, __m128 z, __m128 w, in
|
90 | 90 | gv128 = x + y + z + w + q;
|
91 | 91 | }
|
92 | 92 | // CHECK-LABEL: define dso_local x86_fastcallcc void @"\01@fastcall_indirect_vec@84"(<4 x float> inreg noundef %x, <4 x float> inreg noundef %y, <4 x float> inreg noundef %z, ptr inreg noundef %0, i32 inreg noundef %edx, ptr noundef %1)
|
| 93 | + |
| 94 | +struct __declspec(align(1)) Align1 { unsigned long long x; }; |
| 95 | +struct __declspec(align(4)) Align4 { unsigned long long x; }; |
| 96 | +struct __declspec(align(8)) Align8 { unsigned long long x; }; |
| 97 | +void receive_align1(struct Align1 o); |
| 98 | +void receive_align4(struct Align4 o); |
| 99 | +void receive_align8(struct Align8 o); |
| 100 | +void pass_underaligned_record() { |
| 101 | + struct Align1 a1; |
| 102 | + receive_align1(a1); |
| 103 | + struct Align4 a4; |
| 104 | + receive_align4(a4); |
| 105 | + struct Align8 a8; |
| 106 | + receive_align8(a8); |
| 107 | +} |
| 108 | +// CHECK-LABEL: define dso_local void @pass_underaligned_record() |
| 109 | +// CHECK: call void @receive_align1(i64 {{[^,)]*}}) |
| 110 | +// CHECK: call void @receive_align4(i64 {{[^,)]*}}) |
| 111 | +// CHECK: call void @receive_align8(ptr {{[^,)]*}}) |
| 112 | + |
| 113 | +struct FieldAlign1 { unsigned long long __declspec(align(1)) x; }; |
| 114 | +struct FieldAlign4 { unsigned long long __declspec(align(4)) x; }; |
| 115 | +struct FieldAlign8 { unsigned long long __declspec(align(8)) x; }; |
| 116 | +void receive_falign1(struct FieldAlign1 o); |
| 117 | +void receive_falign4(struct FieldAlign4 o); |
| 118 | +void receive_falign8(struct FieldAlign8 o); |
| 119 | +void pass_underaligned_record_field() { |
| 120 | + struct FieldAlign1 a1; |
| 121 | + receive_falign1(a1); |
| 122 | + struct FieldAlign4 a4; |
| 123 | + receive_falign4(a4); |
| 124 | + struct FieldAlign8 a8; |
| 125 | + receive_falign8(a8); |
| 126 | +} |
| 127 | +// CHECK-LABEL: define dso_local void @pass_underaligned_record_field() |
| 128 | +// CHECK: call void @receive_falign1(i64 {{[^,)]*}}) |
| 129 | +// CHECK: call void @receive_falign4(i64 {{[^,)]*}}) |
| 130 | +// CHECK: call void @receive_falign8(ptr {{[^,)]*}}) |
0 commit comments