diff options
Diffstat (limited to 'contrib/llvm-project/compiler-rt/lib/orc/stl_extras.h')
-rw-r--r-- | contrib/llvm-project/compiler-rt/lib/orc/stl_extras.h | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/contrib/llvm-project/compiler-rt/lib/orc/stl_extras.h b/contrib/llvm-project/compiler-rt/lib/orc/stl_extras.h new file mode 100644 index 000000000000..80a6cd13ac28 --- /dev/null +++ b/contrib/llvm-project/compiler-rt/lib/orc/stl_extras.h @@ -0,0 +1,45 @@ +//===-------- stl_extras.h - Useful STL related functions-------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This file is a part of the ORC runtime support library. +// +//===----------------------------------------------------------------------===// + +#ifndef ORC_RT_STL_EXTRAS_H +#define ORC_RT_STL_EXTRAS_H + +#include <cstdint> +#include <utility> +#include <tuple> + +namespace __orc_rt { + +/// Substitute for std::identity. +/// Switch to std::identity once we can use c++20. +template <class Ty> struct identity { + using is_transparent = void; + using argument_type = Ty; + + Ty &operator()(Ty &self) const { return self; } + const Ty &operator()(const Ty &self) const { return self; } +}; + +/// Substitute for std::bit_ceil. +constexpr uint64_t bit_ceil(uint64_t Val) noexcept { + Val |= (Val >> 1); + Val |= (Val >> 2); + Val |= (Val >> 4); + Val |= (Val >> 8); + Val |= (Val >> 16); + Val |= (Val >> 32); + return Val + 1; +} + +} // namespace __orc_rt + +#endif // ORC_RT_STL_EXTRAS |