CIRCT 20.0.0git
Loading...
Searching...
No Matches
Utilities.h
Go to the documentation of this file.
1//===- Utilities.h - Library of scheduling utilities ------------*- 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// This file defines a library of scheduling utilities.
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef CIRCT_SCHEDULING_UTILITIES_H
14#define CIRCT_SCHEDULING_UTILITIES_H
15
17
18#include "llvm/Support/raw_ostream.h"
19
20#include <functional>
21
22namespace circt {
23namespace scheduling {
24
25using HandleOpFn = std::function<LogicalResult(Operation *)>;
26/// Visit \p prob's operations in topological order, using an internal worklist.
27///
28/// \p fun is expected to report success if the given operation was handled
29/// successfully, and failure if an unhandled predecessor was detected.
30///
31/// Fails if the dependence graph contains cycles.
33
34/// Analyse combinational chains in \p prob's dependence graph and determine
35/// pairs of operations that must be separated by at least one time step in
36/// order to prevent the accumulated delays exceeding the given \p cycleTime.
37/// The dependences in the \p result vector require special handling in the
38/// concrete scheduling algorithm.
39///
40/// Fails if \p prob contains operator types with incoming/outgoing delays
41/// greater than \p cycleTime, or if the dependence graph contains cycles.
42LogicalResult
44 SmallVectorImpl<Problem::Dependence> &result);
45
46/// Assuming \p prob is scheduled and contains (integer) start times, this
47/// method fills in the start times in cycle in an ASAP fashion.
48///
49/// Fails if the dependence graph contains cycles.
50LogicalResult computeStartTimesInCycle(ChainingProblem &prob);
51
52/// Export \p prob as a DOT graph into \p fileName.
53void dumpAsDOT(Problem &prob, StringRef fileName);
54
55/// Print \p prob as a DOT graph onto \p stream.
56void dumpAsDOT(Problem &prob, raw_ostream &stream);
57
58} // namespace scheduling
59} // namespace circt
60
61#endif // CIRCT_SCHEDULING_UTILITIES_H
This class models the accumulation of physical propagation delays on combinational paths along SSA de...
Definition Problems.h:339
This class models the most basic scheduling problem.
Definition Problems.h:75
LogicalResult handleOperationsInTopologicalOrder(Problem &prob, HandleOpFn fun)
Visit prob's operations in topological order, using an internal worklist.
Definition Utilities.cpp:21
void dumpAsDOT(Problem &prob, StringRef fileName)
Export prob as a DOT graph into fileName.
Definition Utilities.cpp:55
std::function< LogicalResult(Operation *)> HandleOpFn
Definition Utilities.h:25
LogicalResult computeChainBreakingDependences(ChainingProblem &prob, float cycleTime, SmallVectorImpl< Problem::Dependence > &result)
Analyse combinational chains in prob's dependence graph and determine pairs of operations that must b...
LogicalResult computeStartTimesInCycle(ChainingProblem &prob)
Assuming prob is scheduled and contains (integer) start times, this method fills in the start times i...
The InstanceGraph op interface, see InstanceGraphInterface.td for more details.