diff options
author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2016-03-23 22:14:43 +0000 |
---|---|---|
committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2016-03-23 22:14:43 +0000 |
commit | 08087c52ebe2368fe6f5835cf67a77d691d87625 (patch) | |
tree | 52225875fe91f3f83bc2fad6b4a45d2976440044 /clang | |
parent | b565bdfb6eec2b550d509971c149b7610aa04079 (diff) | |
download | bcm5719-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.rst | 27 | ||||
-rw-r--r-- | clang/include/clang/Basic/Builtins.def | 1 | ||||
-rw-r--r-- | clang/lib/CodeGen/CGBuiltin.cpp | 1 | ||||
-rw-r--r-- | clang/test/CodeGen/builtins.c | 2 |
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)); |