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