[PATCH] D41148: [libcxx] implement declarations based on P0214R7.

2018-04-23 Thread Tim Shen via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rL330627: [libcxx] implement experimental/simd 
declarations based on P0214R7. (authored by timshen, committed by ).
Herald added a subscriber: llvm-commits.

Changed prior to commit:
  https://reviews.llvm.org/D41148?vs=143610=143611#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D41148

Files:
  libcxx/trunk/include/experimental/__config
  libcxx/trunk/include/experimental/simd
  libcxx/trunk/include/module.modulemap
  libcxx/trunk/test/libcxx/double_include.sh.cpp
  libcxx/trunk/test/std/experimental/simd/nothing_to_do.pass.cpp
  libcxx/trunk/test/std/experimental/simd/simd.casts/simd_cast.pass.cpp
  libcxx/trunk/test/std/experimental/simd/simd.casts/static_simd_cast.pass.cpp
  libcxx/trunk/test/std/experimental/simd/simd.cons/broadcast.pass.cpp
  libcxx/trunk/test/std/experimental/simd/simd.cons/genertor.pass.cpp
  libcxx/trunk/test/std/experimental/simd/simd.traits/abi_for_size.pass.cpp
  libcxx/trunk/test/std/experimental/simd/simd.traits/is_abi_tag.pass.cpp
  libcxx/trunk/test/std/experimental/simd/simd.traits/is_simd.pass.cpp
  libcxx/trunk/test/std/experimental/simd/simd.traits/is_simd_flag_type.pass.cpp
  libcxx/trunk/test/std/experimental/simd/simd.traits/is_simd_mask.pass.cpp

Index: libcxx/trunk/include/module.modulemap
===
--- libcxx/trunk/include/module.modulemap
+++ libcxx/trunk/include/module.modulemap
@@ -550,6 +550,10 @@
   header "experimental/regex"
   export *
 }
+module simd {
+  header "experimental/simd"
+  export *
+}
 module set {
   header "experimental/set"
   export *
Index: libcxx/trunk/include/experimental/simd
===
--- libcxx/trunk/include/experimental/simd
+++ libcxx/trunk/include/experimental/simd
@@ -0,0 +1,1285 @@
+// -*- C++ -*-
+//===--- simd -===//
+//
+// 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.
+//
+//===--===//
+#ifndef _LIBCPP_EXPERIMENTAL_SIMD
+#define _LIBCPP_EXPERIMENTAL_SIMD
+
+/*
+experimental/simd synopsis
+
+namespace std::experimental {
+
+inline namespace parallelism_v2 {
+
+namespace simd_abi {
+
+struct scalar {};
+template  struct fixed_size {};
+template  inline constexpr int max_fixed_size = implementation-defined;
+template  using compatible = implementation-defined;
+template  using native = implementation-defined;
+
+} // simd_abi
+
+struct element_aligned_tag {};
+struct vector_aligned_tag {};
+template  struct overaligned_tag {};
+inline constexpr element_aligned_tag element_aligned{};
+inline constexpr vector_aligned_tag vector_aligned{};
+template  inline constexpr overaligned_tag overaligned{};
+
+// traits [simd.traits]
+template  struct is_abi_tag;
+template  inline constexpr bool is_abi_tag_v = is_abi_tag::value;
+
+template  struct is_simd;
+template  inline constexpr bool is_simd_v = is_simd::value;
+
+template  struct is_simd_mask;
+template  inline constexpr bool is_simd_mask_v = is_simd_mask::value;
+
+template  struct is_simd_flag_type;
+template  inline constexpr bool is_simd_flag_type_v = is_simd_flag_type::value;
+
+template  struct abi_for_size { using type = see below; };
+template  using abi_for_size_t = typename abi_for_size::type;
+
+template > struct simd_size;
+template >
+inline constexpr size_t simd_size_v = simd_size::value;
+
+template  struct memory_alignment;
+template 
+inline constexpr size_t memory_alignment_v = memory_alignment::value;
+
+// class template simd [simd.class]
+template > class simd;
+template  using native_simd = simd;
+template  using fixed_size_simd = simd;
+
+// class template simd_mask [simd.mask.class]
+template > class simd_mask;
+template  using native_simd_mask = simd_mask;
+template  using fixed_size_simd_mask = simd_mask;
+
+// casts [simd.casts]
+template  see below simd_cast(const simd&);
+template  see below static_simd_cast(const simd&);
+
+template 
+fixed_size_simd> to_fixed_size(const simd&) noexcept;
+template 
+fixed_size_simd_mask> to_fixed_size(const simd_mask&) noexcept;
+template  native_simd to_native(const fixed_size_simd&) noexcept;
+template 
+native_simd_mask to_native(const fixed_size_simd_mask> &) noexcept;
+template  simd to_compatible(const fixed_size_simd&) noexcept;
+template  simd_mask to_compatible(const fixed_size_simd_mask&) noexcept;
+
+template 
+tuple...> split(const simd&);

[PATCH] D41148: [libcxx] implement declarations based on P0214R7.

2018-04-23 Thread Tim Shen via Phabricator via cfe-commits
timshen updated this revision to Diff 143610.
timshen added a comment.

Update formatting on static_asserts.


https://reviews.llvm.org/D41148

Files:
  libcxx/include/experimental/__config
  libcxx/include/experimental/simd
  libcxx/include/module.modulemap
  libcxx/test/libcxx/double_include.sh.cpp
  libcxx/test/std/experimental/simd/nothing_to_do.pass.cpp
  libcxx/test/std/experimental/simd/simd.casts/simd_cast.pass.cpp
  libcxx/test/std/experimental/simd/simd.casts/static_simd_cast.pass.cpp
  libcxx/test/std/experimental/simd/simd.cons/broadcast.pass.cpp
  libcxx/test/std/experimental/simd/simd.cons/genertor.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/abi_for_size.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/is_abi_tag.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/is_simd.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/is_simd_flag_type.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/is_simd_mask.pass.cpp

Index: libcxx/test/std/experimental/simd/simd.traits/is_simd_mask.pass.cpp
===
--- /dev/null
+++ libcxx/test/std/experimental/simd/simd.traits/is_simd_mask.pass.cpp
@@ -0,0 +1,133 @@
+//===--===//
+//
+// 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
+
+// 
+//
+// [simd.traits]
+// template  struct is_simd_mask;
+// template  inline constexpr bool is_simd_mask_v = is_simd_mask::value;
+
+#include 
+#include 
+#include "test_macros.h"
+
+using namespace std::experimental::parallelism_v2;
+
+struct UserType {};
+
+static_assert( is_simd_mask::value, "");
+static_assert( is_simd_mask::value, "");
+static_assert( is_simd_mask::value, "");
+static_assert( is_simd_mask::value, "");
+static_assert( is_simd_mask::value, "");
+static_assert( is_simd_mask::value, "");
+static_assert( is_simd_mask::value, "");
+static_assert( is_simd_mask::value, "");
+static_assert( is_simd_mask::value, "");
+static_assert( is_simd_mask::value, "");
+
+static_assert( is_simd_mask>::value, "");
+static_assert( is_simd_mask>::value, "");
+static_assert( is_simd_mask>::value, "");
+static_assert( is_simd_mask>::value, "");
+static_assert( is_simd_mask>::value, "");
+static_assert( is_simd_mask>::value, "");
+static_assert( is_simd_mask>::value, "");
+static_assert( is_simd_mask>::value, "");
+static_assert( is_simd_mask>::value, "");
+static_assert( is_simd_mask>::value, "");
+
+static_assert( is_simd_mask>::value, "");
+static_assert( is_simd_mask>::value, "");
+static_assert( is_simd_mask>::value, "");
+static_assert( is_simd_mask>::value, "");
+static_assert( is_simd_mask>::value, "");
+static_assert( is_simd_mask>::value, "");
+static_assert( is_simd_mask>::value, "");
+static_assert( is_simd_mask>::value, "");
+static_assert( is_simd_mask>::value, "");
+static_assert( is_simd_mask>::value, "");
+
+static_assert( is_simd_mask>::value, "");
+static_assert( is_simd_mask>::value, "");
+static_assert( is_simd_mask>::value, "");
+static_assert( is_simd_mask>::value, "");
+static_assert( is_simd_mask>::value, "");
+static_assert( is_simd_mask>::value, "");
+static_assert( is_simd_mask>::value, "");
+static_assert( is_simd_mask>::value, "");
+static_assert( is_simd_mask>::value, "");
+static_assert( is_simd_mask>::value, "");
+
+static_assert(!is_simd_mask::value, "");
+static_assert(!is_simd_mask::value, "");
+static_assert(!is_simd_mask::value, "");
+static_assert(!is_simd_mask::value, "");

[PATCH] D41148: [libcxx] implement declarations based on P0214R7.

2018-04-23 Thread Marshall Clow via Phabricator via cfe-commits
mclow.lists accepted this revision.
mclow.lists added a comment.
This revision is now accepted and ready to land.
Herald added a subscriber: bixia.

This looks ready to land to me.




Comment at: 
libcxx/test/std/experimental/simd/simd.traits/is_simd_mask.pass.cpp:122
+static_assert(is_simd_mask_v>, "");
+static_assert(is_simd_mask_v>, "");
+

Minor formatting nit. When I have stacks of tests like this, I usually leave a 
space after the '(', so that positive and negative tests line up, and so I can 
see at a glance which are which.

Example:
static_assert( is_simd_mask_v>, "");
static_assert(!is_simd_mask_v, "");




https://reviews.llvm.org/D41148



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D41148: [libcxx] implement declarations based on P0214R7.

2018-04-06 Thread Tim Shen via Phabricator via cfe-commits
timshen updated this revision to Diff 141436.
timshen marked an inline comment as done.
timshen added a comment.

Update file comments copy-paste error.


https://reviews.llvm.org/D41148

Files:
  libcxx/include/experimental/__config
  libcxx/include/experimental/simd
  libcxx/include/module.modulemap
  libcxx/test/libcxx/double_include.sh.cpp
  libcxx/test/std/experimental/simd/nothing_to_do.pass.cpp
  libcxx/test/std/experimental/simd/simd.casts/simd_cast.pass.cpp
  libcxx/test/std/experimental/simd/simd.casts/static_simd_cast.pass.cpp
  libcxx/test/std/experimental/simd/simd.cons/broadcast.pass.cpp
  libcxx/test/std/experimental/simd/simd.cons/genertor.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/abi_for_size.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/is_abi_tag.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/is_simd.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/is_simd_flag_type.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/is_simd_mask.pass.cpp

Index: libcxx/test/std/experimental/simd/simd.traits/is_simd_mask.pass.cpp
===
--- /dev/null
+++ libcxx/test/std/experimental/simd/simd.traits/is_simd_mask.pass.cpp
@@ -0,0 +1,133 @@
+//===--===//
+//
+// 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
+
+// 
+//
+// [simd.traits]
+// template  struct is_simd_mask;
+// template  inline constexpr bool is_simd_mask_v = is_simd_mask::value;
+
+#include 
+#include 
+#include "test_macros.h"
+
+using namespace std::experimental::parallelism_v2;
+
+struct UserType {};
+
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+
+static_assert(!is_simd_mask::value, "");
+static_assert(!is_simd_mask::value, "");
+static_assert(!is_simd_mask::value, "");
+static_assert(!is_simd_mask::value, "");

[PATCH] D41148: [libcxx] implement declarations based on P0214R7.

2018-04-05 Thread Tim Shen via Phabricator via cfe-commits
timshen marked 5 inline comments as done.
timshen added inline comments.



Comment at: 
libcxx/test/std/experimental/simd/simd.traits/is_simd_mask.pass.cpp:68
+
+static_assert(!is_simd_mask::value, "");
+

mclow.lists wrote:
> How about a couple more negative tests here?
> You've got `int`, how about `float`, and `std::string` and a few of the simd 
> types?
> 
I used "UserType" instead of std::string, as I don't want to pull in the whole 
 header. I figured that UserType should serve the same purpose.


https://reviews.llvm.org/D41148



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D41148: [libcxx] implement declarations based on P0214R7.

2018-04-05 Thread Tim Shen via Phabricator via cfe-commits
timshen updated this revision to Diff 141188.
timshen added a comment.

Addressed comments.


https://reviews.llvm.org/D41148

Files:
  libcxx/include/experimental/__config
  libcxx/include/experimental/simd
  libcxx/include/module.modulemap
  libcxx/test/libcxx/double_include.sh.cpp
  libcxx/test/std/experimental/simd/nothing_to_do.pass.cpp
  libcxx/test/std/experimental/simd/simd.casts/simd_cast.pass.cpp
  libcxx/test/std/experimental/simd/simd.casts/static_simd_cast.pass.cpp
  libcxx/test/std/experimental/simd/simd.cons/broadcast.pass.cpp
  libcxx/test/std/experimental/simd/simd.cons/genertor.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/abi_for_size.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/is_abi_tag.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/is_simd.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/is_simd_flag_type.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/is_simd_mask.pass.cpp

Index: libcxx/test/std/experimental/simd/simd.traits/is_simd_mask.pass.cpp
===
--- /dev/null
+++ libcxx/test/std/experimental/simd/simd.traits/is_simd_mask.pass.cpp
@@ -0,0 +1,133 @@
+//===--===//
+//
+// 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
+
+// 
+//
+// [simd.traits]
+// template  struct is_simd_mask;
+// template  inline constexpr bool is_simd_mask_v = is_simd_mask::value;
+
+#include 
+#include 
+#include "test_macros.h"
+
+using namespace std::experimental::parallelism_v2;
+
+struct UserType {};
+
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+
+static_assert(!is_simd_mask::value, "");
+static_assert(!is_simd_mask::value, "");
+static_assert(!is_simd_mask::value, "");
+static_assert(!is_simd_mask::value, "");
+static_assert(!is_simd_mask::value, "");
+static_assert(!is_simd_mask::value, "");
+
+#if 

[PATCH] D41148: [libcxx] implement declarations based on P0214R7.

2018-04-04 Thread Marshall Clow via Phabricator via cfe-commits
mclow.lists added inline comments.



Comment at: libcxx/test/std/experimental/simd/simd.traits/is_abi_tag.pass.cpp:44
+static_assert(is_abi_tag::value, "");
+static_assert(is_abi_tag::value, "");
+

Needs negative tests.




Comment at: libcxx/test/std/experimental/simd/simd.traits/is_simd.pass.cpp:68
+
+static_assert(!is_simd::value, "");
+

Negative tests, too, please.



Comment at: 
libcxx/test/std/experimental/simd/simd.traits/is_simd_flag_type.pass.cpp:27
+static_assert(is_simd_flag_type>::value, "");
+static_assert(is_simd_flag_type>::value, "");
+

It's good that you check that all the things do pass, but you should have some 
failing tests, too:

   static_assert(!is_simd_flag_type::value, "");
   static_assert(!is_simd_flag_type::value, "");
   static_assert(!is_simd_flag_type::value, "");
   static_assert(!is_simd_flag_type::value, "");
   static_assert(!is_simd_flag_type::value, "");
   static_assert(!is_simd_flag_type::value, "");





Comment at: 
libcxx/test/std/experimental/simd/simd.traits/is_simd_mask.pass.cpp:68
+
+static_assert(!is_simd_mask::value, "");
+

How about a couple more negative tests here?
You've got `int`, how about `float`, and `std::string` and a few of the simd 
types?



https://reviews.llvm.org/D41148



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D41148: [libcxx] implement declarations based on P0214R7.

2018-04-04 Thread Marshall Clow via Phabricator via cfe-commits
mclow.lists added a comment.

When you add a new header file to libc++, you have to update two additional 
files:

- include/module.modulemap
- test/libcxx/double_include.sh.cpp

See http://llvm.org/viewvc/llvm-project?view=revision=329144 for an 
example of how to do this.




Comment at: libcxx/test/std/experimental/simd/simd.cons/geneartor.pass.cpp:3
+//
+// The LLVM Compiler Infrastructure
+//

Surely you didn't really mean to name this file "geneartor.pass.cpp"



https://reviews.llvm.org/D41148



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D41148: [libcxx] implement declarations based on P0214R7.

2018-03-21 Thread Tim Shen via Phabricator via cfe-commits
timshen updated this revision to Diff 139393.
timshen marked 7 inline comments as done.
timshen added a comment.

Address comments.


https://reviews.llvm.org/D41148

Files:
  libcxx/include/experimental/__config
  libcxx/include/experimental/simd
  libcxx/test/std/experimental/simd/nothing_to_do.pass.cpp
  libcxx/test/std/experimental/simd/simd.casts/simd_cast.pass.cpp
  libcxx/test/std/experimental/simd/simd.casts/static_simd_cast.pass.cpp
  libcxx/test/std/experimental/simd/simd.cons/broadcast.pass.cpp
  libcxx/test/std/experimental/simd/simd.cons/geneartor.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/abi_for_size.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/is_abi_tag.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/is_simd.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/is_simd_flag_type.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/is_simd_mask.pass.cpp

Index: libcxx/test/std/experimental/simd/simd.traits/is_simd_mask.pass.cpp
===
--- /dev/null
+++ libcxx/test/std/experimental/simd/simd.traits/is_simd_mask.pass.cpp
@@ -0,0 +1,121 @@
+//===--===//
+//
+// 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
+
+// 
+//
+// [simd.traits]
+// template  struct is_simd_mask;
+// template  inline constexpr bool is_simd_mask_v = is_simd_mask::value;
+
+#include 
+#include 
+#include "test_macros.h"
+
+using namespace std::experimental::parallelism_v2;
+
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+
+static_assert(!is_simd_mask::value, "");
+
+#if TEST_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES) &&\
+!defined(_LIBCPP_HAS_NO_INLINE_VARIABLES)
+
+static_assert(is_simd_mask_v, "");
+static_assert(is_simd_mask_v, "");
+static_assert(is_simd_mask_v, 

[PATCH] D41148: [libcxx] implement declarations based on P0214R7.

2018-03-21 Thread Tim Shen via Phabricator via cfe-commits
timshen added inline comments.



Comment at: libcxx/include/experimental/simd:669
+
+#if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
+template 

mclow.lists wrote:
> Isn't the parallelism TS based on C++17?
> 
I intended to have a C++11 (and C++14) compatible implementation.


https://reviews.llvm.org/D41148



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D41148: [libcxx] implement declarations based on P0214R7.

2018-03-21 Thread Marshall Clow via Phabricator via cfe-commits
mclow.lists added a comment.

I'm going to stop here, because all the things I've noted are ticky-tack; 
formatting and minor changes.
More substantial comments coming soon.




Comment at: libcxx/include/experimental/simd:40
+template  inline constexpr bool is_abi_tag_v = is_abi_tag::value;
+template  struct is_simd;
+template  inline constexpr bool is_simd_v = is_simd::value;

A blank line between the separate groups (as in the paper) will make this much 
easier to read



Comment at: libcxx/include/experimental/simd:67
+template  see below simd_cast(const simd&);
+
+template  see below static_simd_cast(const 
simd&);

And here you have an extra line - go figure.



Comment at: libcxx/include/experimental/simd:113
+template  int find_last_set(const simd_mask&);
+bool all_of(see below ) noexcept;
+bool any_of(see below ) noexcept;

blank line, extra space `(see below )` should be `(see below)`



Comment at: libcxx/include/experimental/simd:144
+const_where_expression, const simd_mask>
+where(const nodeduce_t>&, const simd_mask&) noexcept;
+

This is better formatting than in the paper :-)



Comment at: libcxx/include/experimental/simd:316
+template  using samesize = fixed_size_simd; // 
exposition only
+template  floatv acos(floatv x);
+template  doublev acos(doublev x);

These would be much easier to read lined up, and with blank lines.

```
template  floatv   acos(floatv   x);
template  doublev  acos(doublev  x);
template  ldoublev acos(ldoublev x);

template  floatv   asin(floatv   x);
template  doublev  asin(doublev  x);
template  ldoublev asin(ldoublev x);

```




Comment at: libcxx/include/experimental/simd:626
+constexpr auto __is_non_narrowing_convertible_impl(_From a [[gnu::unused]])
+-> decltype(_To{a}, true) {
+  return true;

Do you need the trailing return type here? instead of something like 
`decltype(_to{declval<_From>()})`

Then you don't need to name `a`, and can get rid of the (gcc-specific) 
attribute.



Comment at: libcxx/include/experimental/simd:653
+constexpr _Tp __variadic_sum() {
+  return {};
+}

This won't work if `_Tp` has an explicit default ctor (which is probably not 
true for anything in SIMD).  Do you lose anything by writing `return _Tp{}` ?




Comment at: libcxx/include/experimental/simd:669
+
+#if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
+template 

Isn't the parallelism TS based on C++17?



https://reviews.llvm.org/D41148



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D41148: [libcxx] implement declarations based on P0214R7.

2018-03-19 Thread Tim Shen via Phabricator via cfe-commits
timshen updated this revision to Diff 139036.
timshen added a comment.
Herald added a subscriber: christof.

Rebase.


https://reviews.llvm.org/D41148

Files:
  libcxx/include/experimental/__config
  libcxx/include/experimental/simd
  libcxx/test/std/experimental/simd/nothing_to_do.pass.cpp
  libcxx/test/std/experimental/simd/simd.casts/simd_cast.pass.cpp
  libcxx/test/std/experimental/simd/simd.casts/static_simd_cast.pass.cpp
  libcxx/test/std/experimental/simd/simd.cons/broadcast.pass.cpp
  libcxx/test/std/experimental/simd/simd.cons/geneartor.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/abi_for_size.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/is_abi_tag.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/is_simd.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/is_simd_flag_type.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/is_simd_mask.pass.cpp

Index: libcxx/test/std/experimental/simd/simd.traits/is_simd_mask.pass.cpp
===
--- /dev/null
+++ libcxx/test/std/experimental/simd/simd.traits/is_simd_mask.pass.cpp
@@ -0,0 +1,121 @@
+//===--===//
+//
+// 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
+
+// 
+//
+// [simd.traits]
+// template  struct is_simd_mask;
+// template  inline constexpr bool is_simd_mask_v = is_simd_mask::value;
+
+#include 
+#include 
+#include "test_macros.h"
+
+using namespace std::experimental::parallelism_v2;
+
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+
+static_assert(!is_simd_mask::value, "");
+
+#if TEST_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES) &&\
+!defined(_LIBCPP_HAS_NO_INLINE_VARIABLES)
+
+static_assert(is_simd_mask_v, "");
+static_assert(is_simd_mask_v, "");
+static_assert(is_simd_mask_v, "");

[PATCH] D41148: [libcxx] implement declarations based on P0214R7.

2018-01-08 Thread Tim Shen via Phabricator via cfe-commits
timshen updated this revision to Diff 129007.
timshen added a comment.

Rebased.


https://reviews.llvm.org/D41148

Files:
  libcxx/include/experimental/__config
  libcxx/include/experimental/simd
  libcxx/test/std/experimental/simd/nothing_to_do.pass.cpp
  libcxx/test/std/experimental/simd/simd.casts/simd_cast.pass.cpp
  libcxx/test/std/experimental/simd/simd.casts/static_simd_cast.pass.cpp
  libcxx/test/std/experimental/simd/simd.cons/broadcast.pass.cpp
  libcxx/test/std/experimental/simd/simd.cons/geneartor.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/abi_for_size.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/is_abi_tag.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/is_simd.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/is_simd_flag_type.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/is_simd_mask.pass.cpp

Index: libcxx/test/std/experimental/simd/simd.traits/is_simd_mask.pass.cpp
===
--- /dev/null
+++ libcxx/test/std/experimental/simd/simd.traits/is_simd_mask.pass.cpp
@@ -0,0 +1,121 @@
+//===--===//
+//
+// 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
+
+// 
+//
+// [simd.traits]
+// template  struct is_simd_mask;
+// template  inline constexpr bool is_simd_mask_v = is_simd_mask::value;
+
+#include 
+#include 
+#include "test_macros.h"
+
+using namespace std::experimental::parallelism_v2;
+
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+
+static_assert(!is_simd_mask::value, "");
+
+#if TEST_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES) &&\
+!defined(_LIBCPP_HAS_NO_INLINE_VARIABLES)
+
+static_assert(is_simd_mask_v, "");
+static_assert(is_simd_mask_v, "");
+static_assert(is_simd_mask_v, "");

[PATCH] D41148: [libcxx] implement declarations based on P0214R7.

2018-01-04 Thread Tim Shen via Phabricator via cfe-commits
timshen updated this revision to Diff 128679.
timshen added a comment.

Rebase.


https://reviews.llvm.org/D41148

Files:
  libcxx/include/experimental/__config
  libcxx/include/experimental/simd
  libcxx/test/std/experimental/simd/nothing_to_do.pass.cpp
  libcxx/test/std/experimental/simd/simd.casts/simd_cast.pass.cpp
  libcxx/test/std/experimental/simd/simd.casts/static_simd_cast.pass.cpp
  libcxx/test/std/experimental/simd/simd.cons/broadcast.pass.cpp
  libcxx/test/std/experimental/simd/simd.cons/geneartor.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/abi_for_size.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/is_abi_tag.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/is_simd.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/is_simd_flag_type.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/is_simd_mask.pass.cpp

Index: libcxx/test/std/experimental/simd/simd.traits/is_simd_mask.pass.cpp
===
--- /dev/null
+++ libcxx/test/std/experimental/simd/simd.traits/is_simd_mask.pass.cpp
@@ -0,0 +1,121 @@
+//===--===//
+//
+// 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
+
+// 
+//
+// [simd.traits]
+// template  struct is_simd_mask;
+// template  inline constexpr bool is_simd_mask_v = is_simd_mask::value;
+
+#include 
+#include 
+#include "test_macros.h"
+
+using namespace std::experimental::parallelism_v2;
+
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+
+static_assert(!is_simd_mask::value, "");
+
+#if TEST_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES) &&\
+!defined(_LIBCPP_HAS_NO_INLINE_VARIABLES)
+
+static_assert(is_simd_mask_v, "");
+static_assert(is_simd_mask_v, "");
+static_assert(is_simd_mask_v, "");

[PATCH] D41148: [libcxx] implement declarations based on P0214R7.

2017-12-19 Thread Tim Shen via Phabricator via cfe-commits
timshen updated this revision to Diff 127622.
timshen added a comment.

include "test_macros.h" in the tests


https://reviews.llvm.org/D41148

Files:
  libcxx/include/experimental/__config
  libcxx/include/experimental/simd
  libcxx/test/std/experimental/simd/nothing_to_do.pass.cpp
  libcxx/test/std/experimental/simd/simd.casts/simd_cast.pass.cpp
  libcxx/test/std/experimental/simd/simd.casts/static_simd_cast.pass.cpp
  libcxx/test/std/experimental/simd/simd.cons/broadcast.pass.cpp
  libcxx/test/std/experimental/simd/simd.cons/geneartor.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/abi_for_size.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/is_abi_tag.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/is_simd.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/is_simd_flag_type.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/is_simd_mask.pass.cpp

Index: libcxx/test/std/experimental/simd/simd.traits/is_simd_mask.pass.cpp
===
--- /dev/null
+++ libcxx/test/std/experimental/simd/simd.traits/is_simd_mask.pass.cpp
@@ -0,0 +1,121 @@
+//===--===//
+//
+// 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
+
+// 
+//
+// [simd.traits]
+// template  struct is_simd_mask;
+// template  inline constexpr bool is_simd_mask_v = is_simd_mask::value;
+
+#include 
+#include 
+#include "test_macros.h"
+
+using namespace std::experimental::parallelism_v2;
+
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+
+static_assert(!is_simd_mask::value, "");
+
+#if TEST_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES) &&\
+!defined(_LIBCPP_HAS_NO_INLINE_VARIABLES)
+
+static_assert(is_simd_mask_v, "");
+static_assert(is_simd_mask_v, "");
+static_assert(is_simd_mask_v, "");

[PATCH] D41148: [libcxx] implement declarations based on P0214R7.

2017-12-18 Thread Tim Shen via Phabricator via cfe-commits
timshen updated this revision to Diff 127399.
timshen added a comment.

Formatted the files.


https://reviews.llvm.org/D41148

Files:
  libcxx/include/experimental/__config
  libcxx/include/experimental/simd
  libcxx/test/std/experimental/simd/nothing_to_do.pass.cpp
  libcxx/test/std/experimental/simd/simd.casts/simd_cast.pass.cpp
  libcxx/test/std/experimental/simd/simd.casts/static_simd_cast.pass.cpp
  libcxx/test/std/experimental/simd/simd.cons/broadcast.pass.cpp
  libcxx/test/std/experimental/simd/simd.cons/geneartor.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/abi_for_size.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/is_abi_tag.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/is_simd.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/is_simd_flag_type.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/is_simd_mask.pass.cpp

Index: libcxx/test/std/experimental/simd/simd.traits/is_simd_mask.pass.cpp
===
--- /dev/null
+++ libcxx/test/std/experimental/simd/simd.traits/is_simd_mask.pass.cpp
@@ -0,0 +1,119 @@
+//===--===//
+//
+// 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
+
+// 
+//
+// [simd.traits]
+// template  struct is_simd_mask;
+// template  inline constexpr bool is_simd_mask_v = is_simd_mask::value;
+
+#include 
+#include 
+
+using namespace std::experimental::parallelism_v2;
+
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+
+static_assert(!is_simd_mask::value, "");
+
+#if TEST_STD_VER > 14
+
+static_assert(is_simd_mask_v, "");
+static_assert(is_simd_mask_v, "");
+static_assert(is_simd_mask_v, "");
+static_assert(is_simd_mask_v, "");
+static_assert(is_simd_mask_v, "");
+static_assert(is_simd_mask_v, "");

[PATCH] D41148: [libcxx] implement declarations based on P0214R7.

2017-12-13 Thread Tim Shen via Phabricator via cfe-commits
timshen added inline comments.



Comment at: libcxx/include/experimental/simd:594
+
+#warning " is under construction and not for practical use 
for now."
+

EricWF wrote:
> I would just remove this. The `experimental` part of the name should say 
> enough.
> 
> Also we normally wait until an implementation is mostly complete before 
> landing it. 
> Also we normally wait until an implementation is mostly complete before 
> landing it.

What's the definition of "landing"? I prefer to implement this library in 
multiple patches, does that mean I keep working on the next ones and finally 
commit all of them all at once? If that's the case, SGTM.



Comment at: libcxx/test/std/experimental/simd/traits.pass.cpp:15
+// [simd.traits]
+// template  struct is_abi_tag;
+// template  inline constexpr bool is_abi_tag_v = 
is_abi_tag::value;

EricWF wrote:
> Please create a directory called `simd/traits/` and then put each trait in a 
> separate test file under that directory.
> The `foo_v` tests should be in the same file as the `foo` tests.
> 
> 
Thanks! Done for all tests. Used directory names like "simd.cons", 
"simd.traits", "simd.casts".


https://reviews.llvm.org/D41148



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D41148: [libcxx] implement declarations based on P0214R7.

2017-12-13 Thread Tim Shen via Phabricator via cfe-commits
timshen updated this revision to Diff 126872.
timshen marked 7 inline comments as done.
timshen added a comment.

Address second round of comments.


https://reviews.llvm.org/D41148

Files:
  libcxx/include/experimental/__config
  libcxx/include/experimental/simd
  libcxx/test/std/experimental/simd/nothing_to_do.pass.cpp
  libcxx/test/std/experimental/simd/simd.casts/simd_cast.pass.cpp
  libcxx/test/std/experimental/simd/simd.casts/static_simd_cast.pass.cpp
  libcxx/test/std/experimental/simd/simd.cons/broadcast.pass.cpp
  libcxx/test/std/experimental/simd/simd.cons/geneartor.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/abi_for_size.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/is_abi_tag.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/is_simd.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/is_simd_flag_type.pass.cpp
  libcxx/test/std/experimental/simd/simd.traits/is_simd_mask.pass.cpp

Index: libcxx/test/std/experimental/simd/simd.traits/is_simd_mask.pass.cpp
===
--- /dev/null
+++ libcxx/test/std/experimental/simd/simd.traits/is_simd_mask.pass.cpp
@@ -0,0 +1,119 @@
+//===--===//
+//
+// 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
+
+// 
+//
+// [simd.traits]
+// template  struct is_simd_mask;
+// template  inline constexpr bool is_simd_mask_v = is_simd_mask::value;
+
+#include 
+#include 
+
+using namespace std::experimental::parallelism_v2;
+
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+static_assert(is_simd_mask::value, "");
+
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+static_assert(is_simd_mask>::value, "");
+
+static_assert(!is_simd_mask::value, "");
+
+#if TEST_STD_VER > 14
+
+static_assert(is_simd_mask_v, "");
+static_assert(is_simd_mask_v, "");
+static_assert(is_simd_mask_v, "");
+static_assert(is_simd_mask_v, "");
+static_assert(is_simd_mask_v, "");

[PATCH] D41148: [libcxx] implement declarations based on P0214R7.

2017-12-13 Thread Eric Fiselier via Phabricator via cfe-commits
EricWF added inline comments.



Comment at: libcxx/include/experimental/simd:1
+#ifndef _LIBCPP_EXPERIMENTAL_SIMD
+#define _LIBCPP_EXPERIMENTAL_SIMD

Please add the license header similar to `experimental/filesystem`.



Comment at: libcxx/include/experimental/simd:581
+*/
+
+#include 

The first include should be ``



Comment at: libcxx/include/experimental/simd:590
+
+#if _LIBCPP_STD_VER < 11
+#error "Pre-C++11 is not supported"

(1) `_LIBCPP_STD_VER` is never less than 11. It's an odd libc++ quirk.
(2) We don't normally generate explicit errors when headers are used 
incorrectly.




Comment at: libcxx/include/experimental/simd:594
+
+#warning " is under construction and not for practical use 
for now."
+

I would just remove this. The `experimental` part of the name should say enough.

Also we normally wait until an implementation is mostly complete before landing 
it. 



Comment at: libcxx/include/experimental/simd:596
+
+namespace std {
+namespace experimental {

Please define macros to open and close the namespace similar to 
`_LIBCPP_BEGIN_NAMESPACE_EXPERIMENTAL_FILESYSTEM` in ``



Comment at: libcxx/test/std/experimental/simd/traits.pass.cpp:15
+// [simd.traits]
+// template  struct is_abi_tag;
+// template  inline constexpr bool is_abi_tag_v = 
is_abi_tag::value;

Please create a directory called `simd/traits/` and then put each trait in a 
separate test file under that directory.
The `foo_v` tests should be in the same file as the `foo` tests.




https://reviews.llvm.org/D41148



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D41148: [libcxx] implement declarations based on P0214R7.

2017-12-13 Thread Tim Shen via Phabricator via cfe-commits
timshen marked 4 inline comments as done.
timshen added inline comments.



Comment at: libcxx/include/experimental/simd:1069
+std::is_same<_Abi, simd_abi::fixed_size>::value &&
+__is_non_narrowing_convertible<_Up, _Tp>()>::type>
+  simd(const simd<_Up, simd_abi::fixed_size>&) {}

lichray wrote:
> Does it causes a problem if the logic of `is_convertible` is folded into 
> `__is_non_narrowing_convertible`?
Avoided to answer this question by sfinae on is_arithmetic.


https://reviews.llvm.org/D41148



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D41148: [libcxx] implement declarations based on P0214R7.

2017-12-13 Thread Tim Shen via Phabricator via cfe-commits
timshen updated this revision to Diff 126813.
timshen added a comment.

Address comments:

- Generator ctor is implementable
- Format issues of tests
- SFINAE on __is_non_narrowing_convertible for arithmetics only.


https://reviews.llvm.org/D41148

Files:
  libcxx/include/experimental/simd
  libcxx/test/std/experimental/simd/ctor.pass.cpp
  libcxx/test/std/experimental/simd/nothing_to_do.pass.cpp
  libcxx/test/std/experimental/simd/simd_cast.pass.cpp
  libcxx/test/std/experimental/simd/traits.pass.cpp

Index: libcxx/test/std/experimental/simd/traits.pass.cpp
===
--- /dev/null
+++ libcxx/test/std/experimental/simd/traits.pass.cpp
@@ -0,0 +1,179 @@
+//===--===//
+//
+// 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
+
+// 
+//
+// [simd.traits]
+// template  struct is_abi_tag;
+// template  inline constexpr bool is_abi_tag_v = is_abi_tag::value;
+// template  struct is_simd;
+// template  inline constexpr bool is_simd_v = is_simd::value;
+// template  struct is_simd_mask;
+// template  inline constexpr bool is_simd_mask_v = is_simd_mask::value;
+// template  struct is_simd_flag_type;
+// template  inline constexpr bool is_simd_flag_type_v = is_simd_flag_type::value;
+// template  struct abi_for_size { using type = see below ; };
+// template  using abi_for_size_t = typename abi_for_size::type;
+// template > struct simd_size;
+// template >
+// inline constexpr size_t simd_size_v = simd_size::value;
+// template  struct memory_alignment;
+// template 
+// inline constexpr size_t memory_alignment_v = memory_alignment::value;
+
+#include 
+#include 
+
+using namespace std::experimental::parallelism_v2;
+
+static_assert(is_abi_tag::value, "");
+static_assert(is_abi_tag::value, "");
+static_assert(is_abi_tag::value, "");
+static_assert(is_abi_tag::value, "");
+static_assert(is_abi_tag::value, "");
+static_assert(is_abi_tag::value, "");
+static_assert(is_abi_tag::value, "");
+static_assert(is_abi_tag::value, "");
+static_assert(is_abi_tag::value, "");
+static_assert(is_abi_tag::value, "");
+
+static_assert(is_abi_tag::value, "");
+static_assert(is_abi_tag::value, "");
+static_assert(is_abi_tag::value, "");
+static_assert(is_abi_tag::value, "");
+static_assert(is_abi_tag::value, "");
+static_assert(is_abi_tag::value, "");
+static_assert(is_abi_tag::value, "");
+static_assert(is_abi_tag::value, "");
+static_assert(is_abi_tag::value, "");
+static_assert(is_abi_tag::value, "");
+
+static_assert(is_abi_tag::value, "");
+static_assert(!std::is_same>::value,
+  "");
+
+static_assert(is_abi_tag>::value, "");
+static_assert(is_abi_tag>::value, "");
+static_assert(is_abi_tag>::value, "");
+static_assert(is_abi_tag>::value, "");
+static_assert(is_abi_tag>::value, "");
+static_assert(is_abi_tag>::value, "");
+
+static_assert(is_simd::value, "");
+static_assert(is_simd::value, "");
+static_assert(is_simd::value, "");
+static_assert(is_simd::value, "");
+static_assert(is_simd::value, "");
+static_assert(is_simd::value, "");
+static_assert(is_simd::value, "");
+static_assert(is_simd::value, "");
+static_assert(is_simd::value, "");
+static_assert(is_simd::value, "");
+
+static_assert(is_simd>::value, "");
+static_assert(is_simd>::value, "");
+static_assert(is_simd>::value, "");
+static_assert(is_simd>::value, "");
+static_assert(is_simd>::value, "");
+static_assert(is_simd>::value, "");
+static_assert(is_simd>::value, "");
+static_assert(is_simd>::value, "");
+static_assert(is_simd>::value, "");
+static_assert(is_simd>::value, "");
+
+static_assert(is_simd>::value, "");

[PATCH] D41148: [libcxx] implement declarations based on P0214R7.

2017-12-12 Thread Zhihao Yuan via Phabricator via cfe-commits
lichray added a comment.

I beg you to resubmit this patch relative to "libcxx"; I had to `arc export` 
this patch and `patch -p1 < your.diff` manually rather than just `arc patch 
D41148`.




Comment at: libcxx/include/experimental/simd:1069
+std::is_same<_Abi, simd_abi::fixed_size>::value &&
+__is_non_narrowing_convertible<_Up, _Tp>()>::type>
+  simd(const simd<_Up, simd_abi::fixed_size>&) {}

Does it causes a problem if the logic of `is_convertible` is folded into 
`__is_non_narrowing_convertible`?



Comment at: libcxx/include/experimental/simd:1088
+  // Inserted "int = 0", otherwise it is not implementable wrt `simd(_Up&&
+  // value)`.
+  // TODO: revise P0214.

Really?  `decltype(simd(...), 0) = 0` seems passing your tests.



Comment at: libcxx/test/std/experimental/simd/simd_cast.pass.cpp:87
+
+int main() { return 0; }

No more `return 0;` in `main`; no other files do so.



Comment at: libcxx/test/std/experimental/simd/traits.pass.cpp:37
+
+static_assert(is_abi_tag::value, "");
+static_assert(is_abi_tag::value, "");

`> >` is not a fashion...


https://reviews.llvm.org/D41148



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D41148: [libcxx] implement declarations based on P0214R7.

2017-12-12 Thread Tim Shen via Phabricator via cfe-commits
timshen created this revision.
timshen added a reviewer: mclow.lists.
Herald added a subscriber: sanjoy.
Herald added a reviewer: EricWF.

The patch includes all declarations, and also implements the following features:

- ABI.
- narrowing-conversion related SFIANE, including simd<> ctors and 
(static_)simd_cast.


https://reviews.llvm.org/D41148

Files:
  libcxx/include/experimental/simd
  libcxx/test/std/experimental/simd/ctor.pass.cpp
  libcxx/test/std/experimental/simd/nothing_to_do.pass.cpp
  libcxx/test/std/experimental/simd/simd_cast.pass.cpp
  libcxx/test/std/experimental/simd/traits.pass.cpp

Index: libcxx/test/std/experimental/simd/traits.pass.cpp
===
--- /dev/null
+++ libcxx/test/std/experimental/simd/traits.pass.cpp
@@ -0,0 +1,179 @@
+//===--===//
+//
+// 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
+
+// 
+//
+// [simd.traits]
+// template  struct is_abi_tag;
+// template  inline constexpr bool is_abi_tag_v = is_abi_tag::value;
+// template  struct is_simd;
+// template  inline constexpr bool is_simd_v = is_simd::value;
+// template  struct is_simd_mask;
+// template  inline constexpr bool is_simd_mask_v = is_simd_mask::value;
+// template  struct is_simd_flag_type;
+// template  inline constexpr bool is_simd_flag_type_v = is_simd_flag_type::value;
+// template  struct abi_for_size { using type = see below ; };
+// template  using abi_for_size_t = typename abi_for_size::type;
+// template > struct simd_size;
+// template >
+// inline constexpr size_t simd_size_v = simd_size::value;
+// template  struct memory_alignment;
+// template 
+// inline constexpr size_t memory_alignment_v = memory_alignment::value;
+
+#include 
+#include 
+
+using namespace std::experimental::parallelism_v2;
+
+static_assert(is_abi_tag::value, "");
+static_assert(is_abi_tag::value, "");
+static_assert(is_abi_tag::value, "");
+static_assert(is_abi_tag::value, "");
+static_assert(is_abi_tag::value, "");
+static_assert(is_abi_tag::value, "");
+static_assert(is_abi_tag::value, "");
+static_assert(is_abi_tag::value, "");
+static_assert(is_abi_tag::value, "");
+static_assert(is_abi_tag::value, "");
+
+static_assert(is_abi_tag::value, "");
+static_assert(is_abi_tag::value, "");
+static_assert(is_abi_tag::value, "");
+static_assert(is_abi_tag::value, "");
+static_assert(is_abi_tag::value, "");
+static_assert(is_abi_tag::value, "");
+static_assert(is_abi_tag::value, "");
+static_assert(is_abi_tag::value, "");
+static_assert(is_abi_tag::value, "");
+static_assert(is_abi_tag::value, "");
+
+static_assert(is_abi_tag::value, "");
+static_assert(!std::is_same >::value,
+  "");
+
+static_assert(is_abi_tag >::value, "");
+static_assert(is_abi_tag >::value, "");
+static_assert(is_abi_tag >::value, "");
+static_assert(is_abi_tag >::value, "");
+static_assert(is_abi_tag >::value, "");
+static_assert(is_abi_tag >::value, "");
+
+static_assert(is_simd::value, "");
+static_assert(is_simd::value, "");
+static_assert(is_simd::value, "");
+static_assert(is_simd::value, "");
+static_assert(is_simd::value, "");
+static_assert(is_simd::value, "");
+static_assert(is_simd::value, "");
+static_assert(is_simd::value, "");
+static_assert(is_simd::value, "");
+static_assert(is_simd::value, "");
+
+static_assert(is_simd >::value, "");
+static_assert(is_simd >::value, "");
+static_assert(is_simd >::value, "");
+static_assert(is_simd >::value, "");
+static_assert(is_simd >::value, "");
+static_assert(is_simd >::value, "");
+static_assert(is_simd >::value, "");
+static_assert(is_simd >::value, "");
+static_assert(is_simd >::value, "");