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