17 using namespace circt;
18 using namespace scheduling;
22 struct PrintPass :
public PrintBase<PrintPass> {
23 explicit PrintPass(raw_ostream &os) : os(os) {}
24 void runOnOperation()
override;
29 template <
typename ProblemT>
31 auto prob = loadProblem<ProblemT>(instOp);
35 void PrintPass::runOnOperation() {
36 auto moduleOp = getOperation();
37 for (
auto instOp : moduleOp.getOps<InstanceOp>()) {
38 StringRef probName = instOp.getProblemName();
39 if (probName.equals(
"Problem"))
40 printInstance<Problem>(instOp, os);
41 else if (probName.equals(
"CyclicProblem"))
42 printInstance<CyclicProblem>(instOp, os);
43 else if (probName.equals(
"ChainingProblem"))
44 printInstance<ChainingProblem>(instOp, os);
45 else if (probName.equals(
"SharedOperatorsProblem"))
46 printInstance<SharedOperatorsProblem>(instOp, os);
47 else if (probName.equals(
"ModuloProblem"))
48 printInstance<ModuloProblem>(instOp, os);
50 auto instName = instOp.getSymName().value_or(
"unnamed");
51 llvm::errs() <<
"ssp-print-instance: Unknown problem class '" << probName
52 <<
"' in instance '" << instName <<
"'\n";
53 return signalPassFailure();
59 return std::make_unique<PrintPass>(
llvm::errs());
static void printInstance(InstanceOp instOp, raw_ostream &os)
void dumpAsDOT(Problem &prob, StringRef fileName)
Export prob as a DOT graph into fileName.
std::unique_ptr< mlir::Pass > createPrintPass()
This file defines an intermediate representation for circuits acting as an abstraction for constraint...
mlir::raw_indented_ostream & errs()