From a3306ca6266488874e4f9f6725a9a5782ef55ec7 Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Mon, 19 Jan 2015 01:18:22 +0000 Subject: [PATCH] [x86] Teach Sema to check size of comparison immediate on avx512 cmpps/cmppd buitins. llvm-svn: 226422 --- clang/lib/Sema/SemaChecking.cpp | 4 +++- clang/test/Sema/builtins-x86.c | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp index 9fc2bec..a070944 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 9929e61..71004e1 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}} +} -- 2.7.4