summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@gmail.com>2015-01-19 01:18:22 +0000
committerCraig Topper <craig.topper@gmail.com>2015-01-19 01:18:22 +0000
commita3306ca6266488874e4f9f6725a9a5782ef55ec7 (patch)
tree51669948c46ce15e89fc8705c377559351c9e2a0 /clang
parentf557b09f142c69c725a55b750bb8e4382657fc9c (diff)
downloadbcm5719-llvm-a3306ca6266488874e4f9f6725a9a5782ef55ec7.tar.gz
bcm5719-llvm-a3306ca6266488874e4f9f6725a9a5782ef55ec7.zip
[x86] Teach Sema to check size of comparison immediate on avx512 cmpps/cmppd buitins.
llvm-svn: 226422
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/Sema/SemaChecking.cpp4
-rw-r--r--clang/test/Sema/builtins-x86.c14
2 files changed, 17 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp
index 9fc2bec23b1..a070944ddb9 100644
--- a/clang/lib/Sema/SemaChecking.cpp
+++ b/clang/lib/Sema/SemaChecking.cpp
@@ -843,7 +843,9 @@ bool Sema::CheckX86BuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {
case X86::BI__builtin_ia32_cmpps:
case X86::BI__builtin_ia32_cmpss:
case X86::BI__builtin_ia32_cmppd:
- case X86::BI__builtin_ia32_cmpsd: i = 2; l = 0; u = 31; break;
+ case X86::BI__builtin_ia32_cmpsd:
+ case X86::BI__builtin_ia32_cmpps512_mask:
+ case X86::BI__builtin_ia32_cmppd512_mask: i = 2; l = 0; u = 31; break;
}
return SemaBuiltinConstantArgRange(TheCall, i, l, u);
}
diff --git a/clang/test/Sema/builtins-x86.c b/clang/test/Sema/builtins-x86.c
index 9929e6135c0..71004e1e2ba 100644
--- a/clang/test/Sema/builtins-x86.c
+++ b/clang/test/Sema/builtins-x86.c
@@ -3,6 +3,12 @@
typedef float __m128 __attribute__((__vector_size__(16)));
typedef double __m128d __attribute__((__vector_size__(16)));
+typedef float __m512 __attribute__((__vector_size__(64)));
+typedef double __m512d __attribute__((__vector_size__(64)));
+
+typedef unsigned char __mmask8;
+typedef unsigned short __mmask16;
+
__m128 test__builtin_ia32_cmpps(__m128 __a, __m128 __b) {
__builtin_ia32_cmpps(__a, __b, 32); // expected-error {{argument should be a value from 0 to 31}}
}
@@ -18,3 +24,11 @@ __m128 test__builtin_ia32_cmpss(__m128 __a, __m128 __b) {
__m128d test__builtin_ia32_cmpsd(__m128d __a, __m128d __b) {
__builtin_ia32_cmpsd(__a, __b, 32); // expected-error {{argument should be a value from 0 to 31}}
}
+
+__mmask16 test__builtin_ia32_cmpps512_mask(__m512d __a, __m512d __b) {
+ __builtin_ia32_cmpps512_mask(__a, __b, 32, -1, 0); // expected-error {{argument should be a value from 0 to 31}}
+}
+
+__mmask8 test__builtin_ia32_cmppd512_mask(__m512d __a, __m512d __b) {
+ __builtin_ia32_cmppd512_mask(__a, __b, 32, -1, 0); // expected-error {{argument should be a value from 0 to 31}}
+}
OpenPOWER on IntegriCloud