diff options
author | Tim Shen <timshen91@gmail.com> | 2018-04-23 18:47:07 +0000 |
---|---|---|
committer | Tim Shen <timshen91@gmail.com> | 2018-04-23 18:47:07 +0000 |
commit | 6a72ef6c4b7aedda0ee087d0b1c99d3ecb216338 (patch) | |
tree | 6a8f93e0128d91cd61d3f8b9f8b415f60eb4955d /libcxx/test/std/experimental/simd/simd.cons | |
parent | 213aee0bddd0a55f536c337a53619f4b2e1e6f26 (diff) | |
download | bcm5719-llvm-6a72ef6c4b7aedda0ee087d0b1c99d3ecb216338.tar.gz bcm5719-llvm-6a72ef6c4b7aedda0ee087d0b1c99d3ecb216338.zip |
[libcxx] implement <experimental/simd> declarations based on P0214R7.
Summary:
The patch includes all declarations, and also implements the following features:
* ABI.
* narrowing-conversion related SFIANE, including simd<> ctors and (static_)simd_cast.
Reviewers: mclow.lists, EricWF
Subscribers: lichray, sanjoy, MaskRay, cfe-commits
Differential Revision: https://reviews.llvm.org/D41148
llvm-svn: 330627
Diffstat (limited to 'libcxx/test/std/experimental/simd/simd.cons')
-rw-r--r-- | libcxx/test/std/experimental/simd/simd.cons/broadcast.pass.cpp | 55 | ||||
-rw-r--r-- | libcxx/test/std/experimental/simd/simd.cons/genertor.pass.cpp | 43 |
2 files changed, 98 insertions, 0 deletions
diff --git a/libcxx/test/std/experimental/simd/simd.cons/broadcast.pass.cpp b/libcxx/test/std/experimental/simd/simd.cons/broadcast.pass.cpp new file mode 100644 index 00000000000..dde06517255 --- /dev/null +++ b/libcxx/test/std/experimental/simd/simd.cons/broadcast.pass.cpp @@ -0,0 +1,55 @@ +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// UNSUPPORTED: c++98, c++03 + +// <experimental/simd> +// +// [simd.class] +// template <class U> simd(U&& value); + +#include <cstdint> +#include <experimental/simd> + +using namespace std::experimental::parallelism_v2; + +template <class T, class... Args> +auto not_supported_native_simd_ctor(Args&&... args) + -> decltype(native_simd<T>(std::forward<Args>(args)...), void()) = delete; + +template <class T> +void not_supported_native_simd_ctor(...) {} + +template <class T, class... Args> +auto supported_native_simd_ctor(Args&&... args) + -> decltype(native_simd<T>(std::forward<Args>(args)...), void()) {} + +template <class T> +void supported_native_simd_ctor(...) = delete; + +void compile_narrowing_conversion() { + supported_native_simd_ctor<int8_t>(3); + supported_native_simd_ctor<int16_t>(3); + supported_native_simd_ctor<int32_t>(3); + supported_native_simd_ctor<int64_t>(3); + supported_native_simd_ctor<uint8_t>(3); + supported_native_simd_ctor<uint16_t>(3); + supported_native_simd_ctor<uint32_t>(3); + supported_native_simd_ctor<uint64_t>(3); + supported_native_simd_ctor<float>(3.f); + supported_native_simd_ctor<double>(3.); + supported_native_simd_ctor<long double>(3.); + + not_supported_native_simd_ctor<float>(3.); + not_supported_native_simd_ctor<int8_t>(long(3)); + not_supported_native_simd_ctor<float>(long(3)); + not_supported_native_simd_ctor<int>(3.); +} + +int main() {} diff --git a/libcxx/test/std/experimental/simd/simd.cons/genertor.pass.cpp b/libcxx/test/std/experimental/simd/simd.cons/genertor.pass.cpp new file mode 100644 index 00000000000..73b8d60de62 --- /dev/null +++ b/libcxx/test/std/experimental/simd/simd.cons/genertor.pass.cpp @@ -0,0 +1,43 @@ +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// UNSUPPORTED: c++98, c++03 + +// <experimental/simd> +// +// [simd.class] +// template <class G> explicit simd(G&& gen); + +#include <cstdint> +#include <experimental/simd> + +using namespace std::experimental::parallelism_v2; + +template <class T, class... Args> +auto not_supported_native_simd_ctor(Args&&... args) + -> decltype(native_simd<T>(std::forward<Args>(args)...), void()) = delete; + +template <class T> +void not_supported_native_simd_ctor(...) {} + +template <class T, class... Args> +auto supported_native_simd_ctor(Args&&... args) + -> decltype(native_simd<T>(std::forward<Args>(args)...), void()) {} + +template <class T> +void supported_native_simd_ctor(...) = delete; + +void compile_generator() { + supported_native_simd_ctor<int>([](int i) { return i; }); + not_supported_native_simd_ctor<int>([](int i) { return float(i); }); + not_supported_native_simd_ctor<int>([](intptr_t i) { return (int*)(i); }); + not_supported_native_simd_ctor<int>([](int* i) { return i; }); +} + +int main() {} |