156d2c626SVasileios Porpodas //===- Interval.cpp -------------------------------------------------------===// 256d2c626SVasileios Porpodas // 356d2c626SVasileios Porpodas // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 456d2c626SVasileios Porpodas // See https://llvm.org/LICENSE.txt for license information. 556d2c626SVasileios Porpodas // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 656d2c626SVasileios Porpodas // 756d2c626SVasileios Porpodas //===----------------------------------------------------------------------===// 856d2c626SVasileios Porpodas 956d2c626SVasileios Porpodas #include "llvm/Transforms/Vectorize/SandboxVectorizer/Interval.h" 1056d2c626SVasileios Porpodas #include "llvm/SandboxIR/Instruction.h" 1156d2c626SVasileios Porpodas #include "llvm/Support/Debug.h" 1256d2c626SVasileios Porpodas #include "llvm/Transforms/Vectorize/SandboxVectorizer/DependencyGraph.h" 1356d2c626SVasileios Porpodas 1456d2c626SVasileios Porpodas namespace llvm::sandboxir { 1556d2c626SVasileios Porpodas 16*acf6072fSVasileios Porpodas template <typename T> bool Interval<T>::disjoint(const Interval &Other) const { 17*acf6072fSVasileios Porpodas if (Other.empty()) 18*acf6072fSVasileios Porpodas return true; 19*acf6072fSVasileios Porpodas if (empty()) 20*acf6072fSVasileios Porpodas return true; 21*acf6072fSVasileios Porpodas return Other.Bottom->comesBefore(Top) || Bottom->comesBefore(Other.Top); 22*acf6072fSVasileios Porpodas } 23*acf6072fSVasileios Porpodas 24*acf6072fSVasileios Porpodas #ifndef NDEBUG 25*acf6072fSVasileios Porpodas template <typename T> void Interval<T>::print(raw_ostream &OS) const { 26*acf6072fSVasileios Porpodas auto *Top = top(); 27*acf6072fSVasileios Porpodas auto *Bot = bottom(); 28*acf6072fSVasileios Porpodas OS << "Top: "; 29*acf6072fSVasileios Porpodas if (Top != nullptr) 30*acf6072fSVasileios Porpodas OS << *Top; 31*acf6072fSVasileios Porpodas else 32*acf6072fSVasileios Porpodas OS << "nullptr"; 33*acf6072fSVasileios Porpodas OS << "\n"; 34*acf6072fSVasileios Porpodas 35*acf6072fSVasileios Porpodas OS << "Bot: "; 36*acf6072fSVasileios Porpodas if (Bot != nullptr) 37*acf6072fSVasileios Porpodas OS << *Bot; 38*acf6072fSVasileios Porpodas else 39*acf6072fSVasileios Porpodas OS << "nullptr"; 40*acf6072fSVasileios Porpodas OS << "\n"; 41*acf6072fSVasileios Porpodas } 42*acf6072fSVasileios Porpodas template <typename T> void Interval<T>::dump() const { print(dbgs()); } 43*acf6072fSVasileios Porpodas #endif 44*acf6072fSVasileios Porpodas 4556d2c626SVasileios Porpodas template class Interval<Instruction>; 4656d2c626SVasileios Porpodas template class Interval<MemDGNode>; 4756d2c626SVasileios Porpodas 4856d2c626SVasileios Porpodas } // namespace llvm::sandboxir 49