1403c667bSTim Shen //===----------------------------------------------------------------------===//
2403c667bSTim Shen //
3403c667bSTim Shen //                     The LLVM Compiler Infrastructure
4403c667bSTim Shen //
5403c667bSTim Shen // This file is dual licensed under the MIT and the University of Illinois Open
6403c667bSTim Shen // Source Licenses. See LICENSE.TXT for details.
7403c667bSTim Shen //
8403c667bSTim Shen //===----------------------------------------------------------------------===//
9403c667bSTim Shen 
10*38cd7de5STim Shen // UNSUPPORTED: c++98, c++03, c++11, c++14
11403c667bSTim Shen 
12403c667bSTim Shen // <experimental/simd>
13403c667bSTim Shen //
14403c667bSTim Shen // [simd.traits]
15*38cd7de5STim Shen // template <class T> struct ex::is_simd;
16*38cd7de5STim Shen // template <class T> inline constexpr bool ex::is_simd_v =
17*38cd7de5STim Shen // ex::is_simd<T>::value;
18403c667bSTim Shen 
19403c667bSTim Shen #include <cstdint>
20403c667bSTim Shen #include <experimental/simd>
21403c667bSTim Shen #include "test_macros.h"
22403c667bSTim Shen 
23*38cd7de5STim Shen namespace ex = std::experimental::parallelism_v2;
24403c667bSTim Shen 
25403c667bSTim Shen struct UserType {};
26403c667bSTim Shen 
27*38cd7de5STim Shen static_assert(ex::is_simd<ex::native_simd<int8_t>>::value, "");
28*38cd7de5STim Shen static_assert(ex::is_simd<ex::native_simd<int16_t>>::value, "");
29*38cd7de5STim Shen static_assert(ex::is_simd<ex::native_simd<int32_t>>::value, "");
30*38cd7de5STim Shen static_assert(ex::is_simd<ex::native_simd<int64_t>>::value, "");
31*38cd7de5STim Shen static_assert(ex::is_simd<ex::native_simd<uint8_t>>::value, "");
32*38cd7de5STim Shen static_assert(ex::is_simd<ex::native_simd<uint16_t>>::value, "");
33*38cd7de5STim Shen static_assert(ex::is_simd<ex::native_simd<uint32_t>>::value, "");
34*38cd7de5STim Shen static_assert(ex::is_simd<ex::native_simd<uint64_t>>::value, "");
35*38cd7de5STim Shen static_assert(ex::is_simd<ex::native_simd<float>>::value, "");
36*38cd7de5STim Shen static_assert(ex::is_simd<ex::native_simd<double>>::value, "");
37403c667bSTim Shen 
38*38cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<int8_t, 1>>::value, "");
39*38cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<int16_t, 1>>::value, "");
40*38cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<int32_t, 1>>::value, "");
41*38cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<int64_t, 1>>::value, "");
42*38cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<uint8_t, 1>>::value, "");
43*38cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<uint16_t, 1>>::value, "");
44*38cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<uint32_t, 1>>::value, "");
45*38cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<uint64_t, 1>>::value, "");
46*38cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<float, 1>>::value, "");
47*38cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<double, 1>>::value, "");
48403c667bSTim Shen 
49*38cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<int8_t, 3>>::value, "");
50*38cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<int16_t, 3>>::value, "");
51*38cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<int32_t, 3>>::value, "");
52*38cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<int64_t, 3>>::value, "");
53*38cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<uint8_t, 3>>::value, "");
54*38cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<uint16_t, 3>>::value, "");
55*38cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<uint32_t, 3>>::value, "");
56*38cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<uint64_t, 3>>::value, "");
57*38cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<float, 3>>::value, "");
58*38cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<double, 3>>::value, "");
59403c667bSTim Shen 
60*38cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<int8_t, 32>>::value, "");
61*38cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<int16_t, 32>>::value, "");
62*38cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<int32_t, 32>>::value, "");
63*38cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<int64_t, 32>>::value, "");
64*38cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<uint8_t, 32>>::value, "");
65*38cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<uint16_t, 32>>::value, "");
66*38cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<uint32_t, 32>>::value, "");
67*38cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<uint64_t, 32>>::value, "");
68*38cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<float, 32>>::value, "");
69*38cd7de5STim Shen static_assert(ex::is_simd<ex::fixed_size_simd<double, 32>>::value, "");
70403c667bSTim Shen 
71*38cd7de5STim Shen static_assert(!ex::is_simd<void>::value, "");
72*38cd7de5STim Shen static_assert(!ex::is_simd<int>::value, "");
73*38cd7de5STim Shen static_assert(!ex::is_simd<float>::value, "");
74*38cd7de5STim Shen static_assert(!ex::is_simd<ex::simd_mask<int>>::value, "");
75*38cd7de5STim Shen static_assert(!ex::is_simd<ex::simd_mask<float>>::value, "");
76*38cd7de5STim Shen static_assert(!ex::is_simd<UserType>::value, "");
77403c667bSTim Shen 
78*38cd7de5STim Shen static_assert(ex::is_simd_v<ex::native_simd<int8_t>>, "");
79*38cd7de5STim Shen static_assert(ex::is_simd_v<ex::native_simd<int16_t>>, "");
80*38cd7de5STim Shen static_assert(ex::is_simd_v<ex::native_simd<int32_t>>, "");
81*38cd7de5STim Shen static_assert(ex::is_simd_v<ex::native_simd<int64_t>>, "");
82*38cd7de5STim Shen static_assert(ex::is_simd_v<ex::native_simd<uint8_t>>, "");
83*38cd7de5STim Shen static_assert(ex::is_simd_v<ex::native_simd<uint16_t>>, "");
84*38cd7de5STim Shen static_assert(ex::is_simd_v<ex::native_simd<uint32_t>>, "");
85*38cd7de5STim Shen static_assert(ex::is_simd_v<ex::native_simd<uint64_t>>, "");
86*38cd7de5STim Shen static_assert(ex::is_simd_v<ex::native_simd<float>>, "");
87*38cd7de5STim Shen static_assert(ex::is_simd_v<ex::native_simd<double>>, "");
88403c667bSTim Shen 
89*38cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<int8_t, 1>>, "");
90*38cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<int16_t, 1>>, "");
91*38cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<int32_t, 1>>, "");
92*38cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<int64_t, 1>>, "");
93*38cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<uint8_t, 1>>, "");
94*38cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<uint16_t, 1>>, "");
95*38cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<uint32_t, 1>>, "");
96*38cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<uint64_t, 1>>, "");
97*38cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<float, 1>>, "");
98*38cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<double, 1>>, "");
99403c667bSTim Shen 
100*38cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<int8_t, 3>>, "");
101*38cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<int16_t, 3>>, "");
102*38cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<int32_t, 3>>, "");
103*38cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<int64_t, 3>>, "");
104*38cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<uint8_t, 3>>, "");
105*38cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<uint16_t, 3>>, "");
106*38cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<uint32_t, 3>>, "");
107*38cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<uint64_t, 3>>, "");
108*38cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<float, 3>>, "");
109*38cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<double, 3>>, "");
110403c667bSTim Shen 
111*38cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<int8_t, 32>>, "");
112*38cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<int16_t, 32>>, "");
113*38cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<int32_t, 32>>, "");
114*38cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<int64_t, 32>>, "");
115*38cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<uint8_t, 32>>, "");
116*38cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<uint16_t, 32>>, "");
117*38cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<uint32_t, 32>>, "");
118*38cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<uint64_t, 32>>, "");
119*38cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<float, 32>>, "");
120*38cd7de5STim Shen static_assert(ex::is_simd_v<ex::fixed_size_simd<double, 32>>, "");
121403c667bSTim Shen 
122*38cd7de5STim Shen static_assert(!ex::is_simd_v<void>, "");
123*38cd7de5STim Shen static_assert(!ex::is_simd_v<int>, "");
124*38cd7de5STim Shen static_assert(!ex::is_simd_v<float>, "");
125*38cd7de5STim Shen static_assert(!ex::is_simd_v<ex::simd_mask<int>>, "");
126*38cd7de5STim Shen static_assert(!ex::is_simd_v<ex::simd_mask<float>>, "");
127*38cd7de5STim Shen static_assert(!ex::is_simd_v<UserType>, "");
128403c667bSTim Shen 
129403c667bSTim Shen int main() {}
130