[llvm-branch-commits] [cfe-branch] r311441 - [Sema] Update release notes with details of implicit scalar to vector conversions
Simon Dardis via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Tue Aug 22 03:01:36 PDT 2017
Author: sdardis
Date: Tue Aug 22 03:01:35 2017
New Revision: 311441
URL: http://llvm.org/viewvc/llvm-project?rev=311441&view=rev
Log:
[Sema] Update release notes with details of implicit scalar to vector conversions
Add notes on this to the C language section, along with the C++ section.
Reviewers: bruno, hans
Differential Revision: https://reviews.llvm.org/D36954
Modified:
cfe/branches/release_50/docs/ReleaseNotes.rst
Modified: cfe/branches/release_50/docs/ReleaseNotes.rst
URL: http://llvm.org/viewvc/llvm-project/cfe/branches/release_50/docs/ReleaseNotes.rst?rev=311441&r1=311440&r2=311441&view=diff
==============================================================================
--- cfe/branches/release_50/docs/ReleaseNotes.rst (original)
+++ cfe/branches/release_50/docs/ReleaseNotes.rst Tue Aug 22 03:01:35 2017
@@ -116,7 +116,41 @@ Clang's support for building native Wind
C Language Changes in Clang
---------------------------
-- ...
+- Added near complete support for implicit scalar to vector conversion, a GNU
+ C/C++ language extension. With this extension, the following code is
+ considered valid:
+
+.. code-block:: c
+
+ typedef unsigned v4i32 __attribute__((vector_size(16)));
+
+ v4i32 foo(v4i32 a) {
+ // Here 5 is implicitly casted to an unsigned value and replicated into a
+ // vector with as many elements as 'a'.
+ return a + 5;
+ }
+
+The implicit conversion of a scalar value to a vector value--in the context of
+a vector expression--occurs when:
+
+- The type of the vector is that of a ``__attribute__((vector_size(size)))``
+ vector, not an OpenCL ``__attribute__((ext_vector_type(size)))`` vector type.
+
+- The scalar value can be casted to that of the vector element's type without
+ the loss of precision based on the type of the scalar and the type of the
+ vector's elements.
+
+- For compile time constant values, the above rule is weakened to consider the
+ value of the scalar constant rather than the constant's type.
+
+- Floating point constants with precise integral representations are not
+ implicitly converted to integer values, this is for compatability with GCC.
+
+
+Currently the basic integer and floating point types with the following
+operators are supported: ``+``, ``/``, ``-``, ``*``, ``%``, ``>``, ``<``,
+``>=``, ``<=``, ``==``, ``!=``, ``&``, ``|``, ``^`` and the corresponding
+assignment operators where applicable.
...
@@ -128,6 +162,10 @@ C11 Feature Support
C++ Language Changes in Clang
-----------------------------
+- As mentioned in `C Language Changes in Clang`_, Clang's support for
+ implicit scalar to vector conversions also applies to C++. Additionally
+ the following operators are also supported: ``&&`` and ``||``.
+
...
C++1z Feature Support
More information about the llvm-branch-commits
mailing list