This class models the modulo scheduling problem as the composition of the cyclic problem and the resource-constrained problem with fully-pipelined shared operators.
More...
|
virtual LogicalResult | verify () override |
| Return success if the computed solution is valid. More...
|
|
| CyclicProblem ()=default |
|
std::optional< unsigned > | getDistance (Dependence dep) |
| The distance determines whether a dependence has to be satisfied in the same iteration (distance=0 or not set), or distance-many iterations later. More...
|
|
void | setDistance (Dependence dep, unsigned val) |
|
std::optional< unsigned > | getInitiationInterval () |
| The initiation interval (II) is the number of time steps between subsequent iterations, i.e. More...
|
|
void | setInitiationInterval (unsigned val) |
|
virtual PropertyStringVector | getProperties (Dependence dep) override |
|
virtual PropertyStringVector | getProperties () override |
|
| Problem (Operation *containingOp) |
| Construct an empty scheduling problem. More...
|
|
| Problem ()=default |
|
| Problem (Operation *containingOp) |
| Construct an empty scheduling problem. More...
|
|
virtual | ~Problem ()=default |
|
void | insertOperation (Operation *op) |
| Include op in this scheduling problem. More...
|
|
LogicalResult | insertDependence (Dependence dep) |
| Include dep in the scheduling problem. More...
|
|
void | insertOperatorType (OperatorType opr) |
| Include opr in this scheduling problem. More...
|
|
OperatorType | getOrInsertOperatorType (StringRef name) |
| Retrieves the operator type identified by the client-specific name . More...
|
|
Operation * | getContainingOp () |
| Return the operation containing this problem, e.g. to emit diagnostics. More...
|
|
void | setContainingOp (Operation *op) |
| Set the operation containing this problem, e.g. to emit diagnostics. More...
|
|
bool | hasOperation (Operation *op) |
| Return true if op is part of this problem. More...
|
|
const OperationSet & | getOperations () |
| Return the set of operations. More...
|
|
DependenceRange | getDependences (Operation *op) |
| Return a range object to transparently iterate over op's incoming 1) implicit def-use dependences (backed by the SSA graph), and then 2) explictly added auxiliary dependences. More...
|
|
bool | hasOperatorType (OperatorType opr) |
| Return true if opr is part of this problem. More...
|
|
const OperatorTypeSet & | getOperatorTypes () |
| Return the set of operator types. More...
|
|
std::optional< OperatorType > | getLinkedOperatorType (Operation *op) |
| The linked operator type provides the runtime characteristics for op . More...
|
|
void | setLinkedOperatorType (Operation *op, OperatorType opr) |
|
std::optional< unsigned > | getLatency (OperatorType opr) |
| The latency is the number of cycles opr needs to compute its result. More...
|
|
void | setLatency (OperatorType opr, unsigned val) |
|
std::optional< unsigned > | getStartTime (Operation *op) |
| Return the start time for op , as computed by the scheduler. More...
|
|
void | setStartTime (Operation *op, unsigned val) |
|
std::optional< unsigned > | getEndTime (Operation *op) |
| Returns the end time for op , as computed by the scheduler. More...
|
|
StringAttr | getInstanceName () |
|
void | setInstanceName (StringAttr name) |
|
StringAttr | getLibraryName () |
|
void | setLibraryName (StringAttr name) |
|
StringAttr | getOperationName (Operation *op) |
|
void | setOperationName (Operation *op, StringAttr name) |
|
virtual PropertyStringVector | getProperties (Operation *op) |
|
virtual LogicalResult | check () |
| Return success if the constructed scheduling problem is valid. More...
|
|
std::optional< unsigned > | getLimit (OperatorType opr) |
| The limit is the maximum number of operations using opr that are allowed to start in the same time step. More...
|
|
void | setLimit (OperatorType opr, unsigned val) |
|
virtual PropertyStringVector | getProperties (OperatorType opr) override |
|
| Problem (Operation *containingOp) |
| Construct an empty scheduling problem. More...
|
|
| Problem ()=default |
|
This class models the modulo scheduling problem as the composition of the cyclic problem and the resource-constrained problem with fully-pipelined shared operators.
A solution to this problem comprises an integer II and integer start times for all registered operations, and is feasible iff: (1) The precedence constraints implied by the CyclicProblem
's dependence edges are satisfied, and (2) The number of operations that use a certain limited operator type, and start in the same congruence class (= start time mod II), does not exceed the operator type's limit.
Definition at line 455 of file Problems.h.