TCE
1.20
|
#include <set>
#include <string>
#include "BypassingBUBasicBlockScheduler.hh"
#include "DataDependenceGraph.hh"
#include "SimpleResourceManager.hh"
#include "BUMoveNodeSelector.hh"
#include "ProgramOperation.hh"
#include "ControlUnit.hh"
#include "Machine.hh"
#include "BasicBlock.hh"
#include "LLVMTCECmdLineOptions.hh"
#include "InterPassData.hh"
#include "MoveNodeSet.hh"
#include "Terminal.hh"
#include "RegisterRenamer.hh"
#include "HWOperation.hh"
#include "MachineConnectivityCheck.hh"
#include "Operation.hh"
#include "TerminalRegister.hh"
#include "Move.hh"
#include "RegisterCopyAdder.hh"
#include "MoveGuard.hh"
#include "DisassemblyRegister.hh"
Go to the source code of this file.
Implementation of BypassingBUBasicBlockScheduler class.
This scheduler first schedules result reads of an operation, then it tries to bypass the operands, and recursively schedule the operations which produce the result, bypassing the operands while bypassing the results of the other operation. If it cannot schedule the operation producing the value of the operand, it reverts the bypass, and schedules operands from registers.
When the original/first scheduleOperation() call finishes, all operations and moves scheduled directly by it or recursively by it are "fixed in place", and can no longer be reverted. Then selector gives another operation or individual move to be scheduled.
The basic principle of this scheduler is greediness: "try the fastest way of doing things first, and if it succeeds, good, it not, revert to slower way of doing things. so 1) bypass 2) rename 3) add regcopies
The old BB scheduler does these in exactly opposite order( first addregcopies, then rename, then bypass).
Declaration of BypassingBUBasicBlockScheduler class.
This scheduler first schedules result reads of an operation, then it tries to bypass the operands, and recursively schedule the operations which produce the result, bypassing the operands while bypassing the results of the other operation. If it cannot schedule the operation producing the value of the operand, it reverts the bypass, and schedules operands from registers.
Definition in file BypassingBUBasicBlockScheduler.cc.