#include "llvm/Transforms/Vectorize/SandboxVectorizer/DependencyGraph.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/SandboxIR/Instruction.h"
#include "llvm/SandboxIR/Utils.h"
namespace llvm::sandboxir {
PredIterator::value_type PredIterator::operator*() { … }
PredIterator &PredIterator::operator++() { … }
bool PredIterator::operator==(const PredIterator &Other) const { … }
#ifndef NDEBUG
void DGNode::print(raw_ostream &OS, bool PrintDeps) const { I->dumpOS(OS); }
void DGNode::dump() const {
print(dbgs());
dbgs() << "\n";
}
void MemDGNode::print(raw_ostream &OS, bool PrintDeps) const {
I->dumpOS(OS);
if (PrintDeps) {
static constexpr const unsigned Indent = 4;
for (auto *Pred : MemPreds) {
OS.indent(Indent) << "<-";
Pred->print(OS, false);
OS << "\n";
}
}
}
#endif
MemDGNode *
MemDGNodeIntervalBuilder::getTopMemDGNode(const Interval<Instruction> &Intvl,
const DependencyGraph &DAG) { … }
MemDGNode *
MemDGNodeIntervalBuilder::getBotMemDGNode(const Interval<Instruction> &Intvl,
const DependencyGraph &DAG) { … }
Interval<MemDGNode>
MemDGNodeIntervalBuilder::make(const Interval<Instruction> &Instrs,
DependencyGraph &DAG) { … }
DependencyGraph::DependencyType
DependencyGraph::getRoughDepType(Instruction *FromI, Instruction *ToI) { … }
static bool isOrdered(Instruction *I) { … }
bool DependencyGraph::alias(Instruction *SrcI, Instruction *DstI,
DependencyType DepType) { … }
bool DependencyGraph::hasDep(Instruction *SrcI, Instruction *DstI) { … }
void DependencyGraph::scanAndAddDeps(MemDGNode &DstN,
const Interval<MemDGNode> &SrcScanRange) { … }
void DependencyGraph::createNewNodes(const Interval<Instruction> &NewInterval) { … }
Interval<Instruction> DependencyGraph::extend(ArrayRef<Instruction *> Instrs) { … }
#ifndef NDEBUG
void DependencyGraph::print(raw_ostream &OS) const {
SmallVector<DGNode *> Nodes;
Nodes.reserve(InstrToNodeMap.size());
for (const auto &Pair : InstrToNodeMap)
Nodes.push_back(Pair.second.get());
sort(Nodes, [](DGNode *N1, DGNode *N2) {
return N1->getInstruction()->comesBefore(N2->getInstruction());
});
for (auto *N : Nodes)
N->print(OS, true);
}
void DependencyGraph::dump() const {
print(dbgs());
dbgs() << "\n";
}
#endif
}