xref: /llvm-project/llvm/lib/Support/DynamicAPInt.cpp (revision 4a9aef683df895934c26591404692d41a687b005)
11a0e67d7SRamkumar Ramachandra //===- DynamicAPInt.cpp - DynamicAPInt Implementation -----------*- C++ -*-===//
21a0e67d7SRamkumar Ramachandra //
31a0e67d7SRamkumar Ramachandra // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
41a0e67d7SRamkumar Ramachandra // See https://llvm.org/LICENSE.txt for license information.
51a0e67d7SRamkumar Ramachandra // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
61a0e67d7SRamkumar Ramachandra //
71a0e67d7SRamkumar Ramachandra //===----------------------------------------------------------------------===//
81a0e67d7SRamkumar Ramachandra #include "llvm/ADT/DynamicAPInt.h"
91a0e67d7SRamkumar Ramachandra #include "llvm/ADT/Hashing.h"
101a0e67d7SRamkumar Ramachandra #include "llvm/Support/Debug.h"
111a0e67d7SRamkumar Ramachandra #include "llvm/Support/raw_ostream.h"
121a0e67d7SRamkumar Ramachandra 
131a0e67d7SRamkumar Ramachandra using namespace llvm;
141a0e67d7SRamkumar Ramachandra 
hash_value(const DynamicAPInt & X)151a0e67d7SRamkumar Ramachandra hash_code llvm::hash_value(const DynamicAPInt &X) {
161a0e67d7SRamkumar Ramachandra   if (X.isSmall())
171a0e67d7SRamkumar Ramachandra     return llvm::hash_value(X.getSmall());
181a0e67d7SRamkumar Ramachandra   return detail::hash_value(X.getLarge());
191a0e67d7SRamkumar Ramachandra }
201a0e67d7SRamkumar Ramachandra 
static_assert_layout()21*4a9aef68SRamkumar Ramachandra void DynamicAPInt::static_assert_layout() {
22*4a9aef68SRamkumar Ramachandra   constexpr size_t ValLargeOffset =
23*4a9aef68SRamkumar Ramachandra       offsetof(DynamicAPInt, ValLarge.Val.BitWidth);
24*4a9aef68SRamkumar Ramachandra   constexpr size_t ValSmallOffset = offsetof(DynamicAPInt, ValSmall);
25*4a9aef68SRamkumar Ramachandra   constexpr size_t ValSmallSize = sizeof(ValSmall);
26*4a9aef68SRamkumar Ramachandra   static_assert(ValLargeOffset >= ValSmallOffset + ValSmallSize);
27*4a9aef68SRamkumar Ramachandra }
28*4a9aef68SRamkumar Ramachandra 
print(raw_ostream & OS) const291a0e67d7SRamkumar Ramachandra raw_ostream &DynamicAPInt::print(raw_ostream &OS) const {
301a0e67d7SRamkumar Ramachandra   if (isSmall())
311a0e67d7SRamkumar Ramachandra     return OS << ValSmall;
321a0e67d7SRamkumar Ramachandra   return OS << ValLarge;
331a0e67d7SRamkumar Ramachandra }
341a0e67d7SRamkumar Ramachandra 
dump() const351a0e67d7SRamkumar Ramachandra void DynamicAPInt::dump() const { print(dbgs()); }
36