From 3d2dbde2fe9656fef515029dcdf33202da84f7ba Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Wed, 23 Mar 2016 22:14:43 +0000 Subject: [PATCH] Add missing __builtin_bitreverse8 Also add documentation for bitreverse builtins git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@264203 91177308-0d34-0410-b5e6-96231b3b80d8 --- docs/LanguageExtensions.rst | 27 +++++++++++++++++++++++++++ include/clang/Basic/Builtins.def | 1 + lib/CodeGen/CGBuiltin.cpp | 1 + test/CodeGen/builtins.c | 2 ++ 4 files changed, 31 insertions(+) diff --git a/docs/LanguageExtensions.rst b/docs/LanguageExtensions.rst index baca28e8dc..1f2bc29387 100644 --- a/docs/LanguageExtensions.rst +++ b/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/include/clang/Basic/Builtins.def b/include/clang/Basic/Builtins.def index 21a90ade05..7a440cc708 100644 --- a/include/clang/Basic/Builtins.def +++ b/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/lib/CodeGen/CGBuiltin.cpp b/lib/CodeGen/CGBuiltin.cpp index bebd78c293..e9eea1921d 100644 --- a/lib/CodeGen/CGBuiltin.cpp +++ b/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/test/CodeGen/builtins.c b/test/CodeGen/builtins.c index 62741ee803..ac6edcef39 100644 --- a/test/CodeGen/builtins.c +++ b/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)); -- 2.40.0