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 Ramachandrahash_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 Ramachandravoid 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 Ramachandraraw_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 Ramachandravoid DynamicAPInt::dump() const { print(dbgs()); } 36