1*0e30dd44SZhangyin //===----------------------------------------------------------------------===//
2*0e30dd44SZhangyin //
3*0e30dd44SZhangyin // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*0e30dd44SZhangyin // See https://llvm.org/LICENSE.txt for license information.
5*0e30dd44SZhangyin // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*0e30dd44SZhangyin //
7*0e30dd44SZhangyin //===----------------------------------------------------------------------===//
8*0e30dd44SZhangyin
9*0e30dd44SZhangyin // UNSUPPORTED: c++03, c++11, c++14
10*0e30dd44SZhangyin
11*0e30dd44SZhangyin // <experimental/simd>
12*0e30dd44SZhangyin //
13*0e30dd44SZhangyin // [simd.traits]
14*0e30dd44SZhangyin // template <class T> struct ex::is_simd;
15*0e30dd44SZhangyin // template <class T> inline constexpr bool ex::is_simd_v =
16*0e30dd44SZhangyin // ex::is_simd<T>::value;
17*0e30dd44SZhangyin
18*0e30dd44SZhangyin #include "../test_utils.h"
19*0e30dd44SZhangyin
20*0e30dd44SZhangyin namespace ex = std::experimental::parallelism_v2;
21*0e30dd44SZhangyin
22*0e30dd44SZhangyin template <class T, std::size_t>
23*0e30dd44SZhangyin struct CheckIsSimd {
24*0e30dd44SZhangyin template <class SimdAbi>
operator ()CheckIsSimd25*0e30dd44SZhangyin void operator()() {
26*0e30dd44SZhangyin static_assert(ex::is_simd<ex::simd<T, SimdAbi>>::value);
27*0e30dd44SZhangyin
28*0e30dd44SZhangyin static_assert(!ex::is_simd<T>::value);
29*0e30dd44SZhangyin static_assert(!ex::is_simd<ex::simd_mask<T, SimdAbi>>::value);
30*0e30dd44SZhangyin
31*0e30dd44SZhangyin static_assert(ex::is_simd_v<ex::simd<T, SimdAbi>>);
32*0e30dd44SZhangyin
33*0e30dd44SZhangyin static_assert(!ex::is_simd_v<T>);
34*0e30dd44SZhangyin static_assert(!ex::is_simd_v<ex::simd_mask<T, SimdAbi>>);
35*0e30dd44SZhangyin }
36*0e30dd44SZhangyin };
37*0e30dd44SZhangyin
main(int,char **)38*0e30dd44SZhangyin int main(int, char**) {
39*0e30dd44SZhangyin test_all_simd_abi<CheckIsSimd>();
40*0e30dd44SZhangyin return 0;
41*0e30dd44SZhangyin }
42