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 Andrichash_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 Andricvoid 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 Andricraw_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 Andricvoid DynamicAPInt::dump() const { print(dbgs()); } 36