summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2016-03-23 22:14:43 +0000
committerMatt Arsenault <Matthew.Arsenault@amd.com>2016-03-23 22:14:43 +0000
commit08087c52ebe2368fe6f5835cf67a77d691d87625 (patch)
tree52225875fe91f3f83bc2fad6b4a45d2976440044 /clang
parentb565bdfb6eec2b550d509971c149b7610aa04079 (diff)
downloadbcm5719-llvm-08087c52ebe2368fe6f5835cf67a77d691d87625.tar.gz
bcm5719-llvm-08087c52ebe2368fe6f5835cf67a77d691d87625.zip
Add missing __builtin_bitreverse8
Also add documentation for bitreverse builtins llvm-svn: 264203
Diffstat (limited to 'clang')
-rw-r--r--clang/docs/LanguageExtensions.rst27
-rw-r--r--clang/include/clang/Basic/Builtins.def1
-rw-r--r--clang/lib/CodeGen/CGBuiltin.cpp1
-rw-r--r--clang/test/CodeGen/builtins.c2
4 files changed, 31 insertions, 0 deletions
diff --git a/clang/docs/LanguageExtensions.rst b/clang/docs/LanguageExtensions.rst
index baca28e8dc7..1f2bc293870 100644
--- a/clang/docs/LanguageExtensions.rst
+++ b/clang/docs/LanguageExtensions.rst
@@ -1505,6 +1505,33 @@ C-style cast applied to each element of the first argument.
Query for this feature with ``__has_builtin(__builtin_convertvector)``.
+``__builtin_bitreverse``
+---------------------
+
+* ``__builtin_bitreverse8``
+* ``__builtin_bitreverse16``
+* ``__builtin_bitreverse32``
+* ``__builtin_bitreverse64``
+
+**Syntax**:
+
+.. code-block:: c++
+ __builtin_bitreverse32(x)
+
+**Examples**:
+
+.. code-block:: c++
+ uint8_t rev_x = __builtin_bitreverse8(x);
+ uint16_t rev_x = __builtin_bitreverse16(x);
+ uint32_t rev_y = __builtin_bitreverse32(y);
+ uint64_t rev_z = __builtin_bitreverse64(z);
+
+**Description**:
+
+The '``__builtin_bitreverse``' family of builtins is used to reverse
+the bitpattern of an integer value; for example ``0b10110110`` becomes
+``0b01101101``.
+
``__builtin_unreachable``
-------------------------
diff --git a/clang/include/clang/Basic/Builtins.def b/clang/include/clang/Basic/Builtins.def
index 21a90ade05a..7a440cc7082 100644
--- a/clang/include/clang/Basic/Builtins.def
+++ b/clang/include/clang/Basic/Builtins.def
@@ -409,6 +409,7 @@ BUILTIN(__builtin_bswap16, "UsUs", "nc")
BUILTIN(__builtin_bswap32, "UiUi", "nc")
BUILTIN(__builtin_bswap64, "ULLiULLi", "nc")
+BUILTIN(__builtin_bitreverse8, "UcUc", "nc")
BUILTIN(__builtin_bitreverse16, "UsUs", "nc")
BUILTIN(__builtin_bitreverse32, "UiUi", "nc")
BUILTIN(__builtin_bitreverse64, "ULLiULLi", "nc")
diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp
index bebd78c2937..e9eea1921dc 100644
--- a/clang/lib/CodeGen/CGBuiltin.cpp
+++ b/clang/lib/CodeGen/CGBuiltin.cpp
@@ -681,6 +681,7 @@ RValue CodeGenFunction::EmitBuiltinExpr(const FunctionDecl *FD,
case Builtin::BI__builtin_bswap64: {
return RValue::get(emitUnaryBuiltin(*this, E, Intrinsic::bswap));
}
+ case Builtin::BI__builtin_bitreverse8:
case Builtin::BI__builtin_bitreverse16:
case Builtin::BI__builtin_bitreverse32:
case Builtin::BI__builtin_bitreverse64: {
diff --git a/clang/test/CodeGen/builtins.c b/clang/test/CodeGen/builtins.c
index 62741ee8034..ac6edcef39e 100644
--- a/clang/test/CodeGen/builtins.c
+++ b/clang/test/CodeGen/builtins.c
@@ -117,9 +117,11 @@ int main() {
P(bswap32, (N));
P(bswap64, (N));
+ // CHECK: @llvm.bitreverse.i8
// CHECK: @llvm.bitreverse.i16
// CHECK: @llvm.bitreverse.i32
// CHECK: @llvm.bitreverse.i64
+ P(bitreverse8, (N));
P(bitreverse16, (N));
P(bitreverse32, (N));
P(bitreverse64, (N));
OpenPOWER on IntegriCloud