CIRCT 20.0.0git
Loading...
Searching...
No Matches
Print.cpp
Go to the documentation of this file.
1//===- Print.cpp - Print pass -----------------------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// Implements the Print (as a DOT graph) pass.
10//
11//===----------------------------------------------------------------------===//
12
19#include "mlir/Pass/Pass.h"
20
22
23namespace circt {
24namespace ssp {
25#define GEN_PASS_DEF_PRINT
26#include "circt/Dialect/SSP/SSPPasses.h.inc"
27} // namespace ssp
28} // namespace circt
29
30using namespace circt;
31using namespace scheduling;
32using namespace ssp;
33
34namespace {
35struct PrintPass : public circt::ssp::impl::PrintBase<PrintPass> {
36 explicit PrintPass(raw_ostream &os) : os(os) {}
37 void runOnOperation() override;
38 raw_ostream &os;
39};
40} // end anonymous namespace
41
42template <typename ProblemT>
43static void printInstance(InstanceOp instOp, raw_ostream &os) {
44 auto prob = loadProblem<ProblemT>(instOp);
45 dumpAsDOT(prob, os);
46}
47
48void PrintPass::runOnOperation() {
49 auto moduleOp = getOperation();
50 for (auto instOp : moduleOp.getOps<InstanceOp>()) {
51 StringRef probName = instOp.getProblemName();
52 if (probName == "Problem")
53 printInstance<Problem>(instOp, os);
54 else if (probName == "CyclicProblem")
55 printInstance<CyclicProblem>(instOp, os);
56 else if (probName == "ChainingProblem")
57 printInstance<ChainingProblem>(instOp, os);
58 else if (probName == "SharedOperatorsProblem")
59 printInstance<SharedOperatorsProblem>(instOp, os);
60 else if (probName == "ModuloProblem")
61 printInstance<ModuloProblem>(instOp, os);
62 else if (probName == "ChainingCyclicProblem")
63 printInstance<ChainingCyclicProblem>(instOp, os);
64 else {
65 auto instName = instOp.getSymName().value_or("unnamed");
66 llvm::errs() << "ssp-print-instance: Unknown problem class '" << probName
67 << "' in instance '" << instName << "'\n";
68 return signalPassFailure();
69 }
70 }
71}
72
73std::unique_ptr<mlir::Pass> circt::ssp::createPrintPass() {
74 return std::make_unique<PrintPass>(llvm::errs());
75}
static void printInstance(InstanceOp instOp, raw_ostream &os)
Definition Print.cpp:43
void dumpAsDOT(Problem &prob, StringRef fileName)
Export prob as a DOT graph into fileName.
Definition Utilities.cpp:55
std::unique_ptr< mlir::Pass > createPrintPass()
Definition Print.cpp:73
The InstanceGraph op interface, see InstanceGraphInterface.td for more details.