summaryrefslogtreecommitdiff
path: root/test/CodeGen
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2018-02-16 19:10:26 +0000
committerDimitry Andric <dim@FreeBSD.org>2018-02-16 19:10:26 +0000
commit6eea8b8c1aad853d6161709d8b3035dfd867fa1c (patch)
tree195fb543fdb28a1c2a6baf81d96adc1bc302f8ca /test/CodeGen
parent660d91aa9ee00f68bdb884b29845a39be78bc557 (diff)
Notes
Diffstat (limited to 'test/CodeGen')
-rw-r--r--test/CodeGen/avx512bw-builtins.c22
-rw-r--r--test/CodeGen/avx512f-builtins.c13
-rw-r--r--test/CodeGen/ms_abi.c13
3 files changed, 22 insertions, 26 deletions
diff --git a/test/CodeGen/avx512bw-builtins.c b/test/CodeGen/avx512bw-builtins.c
index 3160a6667c00..190387b2d97a 100644
--- a/test/CodeGen/avx512bw-builtins.c
+++ b/test/CodeGen/avx512bw-builtins.c
@@ -1626,26 +1626,16 @@ __m512i test_mm512_maskz_set1_epi8(__mmask64 __M, char __A) {
return _mm512_maskz_set1_epi8(__M, __A);
}
-__mmask64 test_mm512_kunpackd(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) {
+__mmask64 test_mm512_kunpackd(__mmask64 __A, __mmask64 __B) {
// CHECK-LABEL: @test_mm512_kunpackd
- // CHECK: bitcast <64 x i1> %{{.*}} to i64
- // CHECK: bitcast <64 x i1> %{{.*}} to i64
- // CHECK: and i64 %{{.*}}, 4294967295
- // CHECK: shl i64 %{{.*}}, 32
- // CHECK: or i64 %{{.*}}, %{{.*}}
- // CHECK: bitcast i64 %{{.*}} to <64 x i1>
- return _mm512_mask_cmpneq_epu8_mask(_mm512_kunpackd(_mm512_cmpneq_epu8_mask(__B, __A),_mm512_cmpneq_epu8_mask(__C, __D)), __E, __F);
+ // CHECK: @llvm.x86.avx512.kunpck.dq
+ return _mm512_kunpackd(__A, __B);
}
-__mmask32 test_mm512_kunpackw(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) {
+__mmask32 test_mm512_kunpackw(__mmask32 __A, __mmask32 __B) {
// CHECK-LABEL: @test_mm512_kunpackw
- // CHECK: bitcast <32 x i1> %{{.*}} to i32
- // CHECK: bitcast <32 x i1> %{{.*}} to i32
- // CHECK: and i32 %{{.*}}, 65535
- // CHECK: shl i32 %{{.*}}, 16
- // CHECK: or i32 %{{.*}}, %{{.*}}
- // CHECK: bitcast i32 %{{.*}} to <32 x i1>
- return _mm512_mask_cmpneq_epu16_mask(_mm512_kunpackw(_mm512_cmpneq_epu16_mask(__B, __A),_mm512_cmpneq_epu16_mask(__C, __D)), __E, __F);
+ // CHECK: @llvm.x86.avx512.kunpck.wd
+ return _mm512_kunpackw(__A, __B);
}
__m512i test_mm512_mask_loadu_epi16(__m512i __W, __mmask32 __U, void const *__P) {
diff --git a/test/CodeGen/avx512f-builtins.c b/test/CodeGen/avx512f-builtins.c
index ce831d690ee7..2ba2faf1b697 100644
--- a/test/CodeGen/avx512f-builtins.c
+++ b/test/CodeGen/avx512f-builtins.c
@@ -6259,17 +6259,10 @@ int test_mm512_kortestz(__mmask16 __A, __mmask16 __B) {
return _mm512_kortestz(__A, __B);
}
-__mmask16 test_mm512_kunpackb(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) {
+__mmask16 test_mm512_kunpackb(__mmask16 __A, __mmask16 __B) {
// CHECK-LABEL: @test_mm512_kunpackb
- // CHECK: bitcast <16 x i1> %{{.*}} to i16
- // CHECK: bitcast <16 x i1> %{{.*}} to i16
- // CHECK: and i32 %{{.*}}, 255
- // CHECK: shl i32 %{{.*}}, 8
- // CHECK: or i32 %{{.*}}, %{{.*}}
- // CHECK: bitcast i16 %{{.*}} to <16 x i1>
- return _mm512_mask_cmpneq_epu32_mask(_mm512_kunpackb(_mm512_cmpneq_epu32_mask(__A, __B),
- _mm512_cmpneq_epu32_mask(__C, __D)),
- __E, __F);
+ // CHECK: @llvm.x86.avx512.kunpck.bw
+ return _mm512_kunpackb(__A, __B);
}
__mmask16 test_mm512_kxnor(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) {
diff --git a/test/CodeGen/ms_abi.c b/test/CodeGen/ms_abi.c
index 407087e40916..7486166c78d4 100644
--- a/test/CodeGen/ms_abi.c
+++ b/test/CodeGen/ms_abi.c
@@ -146,3 +146,16 @@ void __attribute__((sysv_abi)) f6(__builtin_ms_va_list ap) {
// WIN64: %[[AP_VAL:.*]] = load i8*, i8** %[[AP]]
// WIN64-NEXT: store i8* %[[AP_VAL]], i8** %[[AP2:.*]]
}
+
+// This test checks if structs are passed according to Win64 calling convention
+// when it's enforced by __attribute((ms_abi)).
+struct i128 {
+ unsigned long long a;
+ unsigned long long b;
+};
+
+__attribute__((ms_abi)) struct i128 f7(struct i128 a) {
+ // WIN64: define void @f7(%struct.i128* noalias sret %agg.result, %struct.i128* %a)
+ // FREEBSD: define win64cc void @f7(%struct.i128* noalias sret %agg.result, %struct.i128* %a)
+ return a;
+}