xref: /llvm-project/llvm/lib/Transforms/Vectorize/SandboxVectorizer/Interval.cpp (revision acf6072fae00123e78e362f74f0dc2d830837d10)
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