Scheduler ASAP
All-in-one-asap scheduler. This scheduler runs as-soon-as-possible scheduling in each basic block.
Mini-optimization: chains fast operations (no LUTs required) to the state of most dependent instruction instead of the next one.
Memory controller dependency: stores all memory_controller uses in a hash table. if a state already has a memory_controller use, the instruction gets scheduled to the next state.
Scheduler using new framework, split into separate passes. This is now the default pass.
LegUpSchedulerDAG pass: creates an InstructionNode for each instruction and computes memory dependencies. InstructionNodes can also store metadata such as mobility, propogation delay. InstructionNode also calculates the delay of each instruction when constructed. For now, it only differentiates between fast and slow operations (zero and single-cycle operations).
SimpleASAP pass: performs packed as-soon-as-possible scheduling. Memory controller dependency is ignored.
SimpleALAP pass: performs packed as-late-as-possible scheduling. Needed to calculate mobility.
ASAPConstraintScheduler pass: performs a list scheduling on the memory controller constraint using mobility as a priority function. Currently, this is turned off by having all load/store/calls being dependent on all previous load/store/call instructions in the basic block. Needs to have an FSM passed in.
MetaASAPScheduler pass: meta-pass, which connects all the previous passes. Generates an FSM from SimpleASAP and passes into the list scheduler. It generates the final FSM, which is then used by binding.