#include "clang/Analysis/Analyses/IntervalPartition.h"
#include "clang/Analysis/CFG.h"
#include "llvm/ADT/BitVector.h"
#include "llvm/ADT/STLExtras.h"
#include <optional>
#include <queue>
#include <vector>
namespace clang {
template <typename Node> struct BuildResult { … };
namespace internal {
static unsigned getID(const CFGBlock &B) { … }
static unsigned getID(const CFGIntervalNode &I) { … }
template <typename Node>
BuildResult<Node> buildInterval(llvm::BitVector &Partitioned,
const Node *Header) { … }
template <typename Node>
void fillIntervalNode(CFGIntervalGraph &Graph,
std::vector<CFGIntervalNode *> &Index,
std::queue<const Node *> &Successors,
llvm::BitVector &Partitioned, const Node *Header) { … }
template <typename Node>
CFGIntervalGraph partitionIntoIntervalsImpl(unsigned NumBlockIDs,
const Node *EntryBlock) { … }
std::vector<const CFGBlock *> buildInterval(const CFGBlock *Header) { … }
CFGIntervalGraph partitionIntoIntervals(const CFG &Cfg) { … }
CFGIntervalGraph partitionIntoIntervals(const CFGIntervalGraph &Graph) { … }
}
std::optional<std::vector<const CFGBlock *>> getIntervalWTO(const CFG &Cfg) { … }
WTOCompare::WTOCompare(const WeakTopologicalOrdering &WTO) { … }
}