xref: /src/contrib/llvm-project/llvm/lib/Support/DynamicAPInt.cpp (revision 0fca6ea1d4eea4c934cfff25ac9ee8ad6fe95583)
1ac9a064cSDimitry Andric //===- DynamicAPInt.cpp - DynamicAPInt Implementation -----------*- C++ -*-===//
2ac9a064cSDimitry Andric //
3ac9a064cSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4ac9a064cSDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5ac9a064cSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6ac9a064cSDimitry Andric //
7ac9a064cSDimitry Andric //===----------------------------------------------------------------------===//
8ac9a064cSDimitry Andric #include "llvm/ADT/DynamicAPInt.h"
9ac9a064cSDimitry Andric #include "llvm/ADT/Hashing.h"
10ac9a064cSDimitry Andric #include "llvm/Support/Debug.h"
11ac9a064cSDimitry Andric #include "llvm/Support/raw_ostream.h"
12ac9a064cSDimitry Andric 
13ac9a064cSDimitry Andric using namespace llvm;
14ac9a064cSDimitry Andric 
hash_value(const DynamicAPInt & X)15ac9a064cSDimitry Andric hash_code llvm::hash_value(const DynamicAPInt &X) {
16ac9a064cSDimitry Andric   if (X.isSmall())
17ac9a064cSDimitry Andric     return llvm::hash_value(X.getSmall());
18ac9a064cSDimitry Andric   return detail::hash_value(X.getLarge());
19ac9a064cSDimitry Andric }
20ac9a064cSDimitry Andric 
static_assert_layout()21ac9a064cSDimitry Andric void DynamicAPInt::static_assert_layout() {
22ac9a064cSDimitry Andric   constexpr size_t ValLargeOffset =
23ac9a064cSDimitry Andric       offsetof(DynamicAPInt, ValLarge.Val.BitWidth);
24ac9a064cSDimitry Andric   constexpr size_t ValSmallOffset = offsetof(DynamicAPInt, ValSmall);
25ac9a064cSDimitry Andric   constexpr size_t ValSmallSize = sizeof(ValSmall);
26ac9a064cSDimitry Andric   static_assert(ValLargeOffset >= ValSmallOffset + ValSmallSize);
27ac9a064cSDimitry Andric }
28ac9a064cSDimitry Andric 
print(raw_ostream & OS) const29ac9a064cSDimitry Andric raw_ostream &DynamicAPInt::print(raw_ostream &OS) const {
30ac9a064cSDimitry Andric   if (isSmall())
31ac9a064cSDimitry Andric     return OS << ValSmall;
32ac9a064cSDimitry Andric   return OS << ValLarge;
33ac9a064cSDimitry Andric }
34ac9a064cSDimitry Andric 
dump() const35ac9a064cSDimitry Andric void DynamicAPInt::dump() const { print(dbgs()); }
36