36 lines
1.4 KiB
C++
36 lines
1.4 KiB
C++
#include "PreRA_Scheduler.h"
|
|
|
|
namespace sysy {
|
|
|
|
char PreRA_Scheduler::ID = 0;
|
|
|
|
bool PreRA_Scheduler::runOnFunction(Function *F, AnalysisManager& AM) {
|
|
// TODO: 在此实现寄存器分配前的指令调度。
|
|
// 遍历mfunc中的每一个MachineBasicBlock。
|
|
// 对每个基本块内的MachineInstr列表进行重排。
|
|
//
|
|
// 实现思路:
|
|
// 1. 分析每个基本块内指令的数据依赖关系,构建依赖图(DAG)。
|
|
// 2.
|
|
// 根据目标处理器的流水线特性(指令延迟等),使用列表调度等算法对指令进行重排。
|
|
// 3. 此时操作的是虚拟寄存器,只存在真依赖,调度自由度最大。
|
|
//
|
|
// std::cout << "Running Pre-RA Instruction Scheduler..." << std::endl;
|
|
return false;
|
|
}
|
|
|
|
void PreRA_Scheduler::runOnMachineFunction(MachineFunction *mfunc) {
|
|
// TODO: 在此实现寄存器分配前的指令调度。
|
|
// 遍历mfunc中的每一个MachineBasicBlock。
|
|
// 对每个基本块内的MachineInstr列表进行重排。
|
|
//
|
|
// 实现思路:
|
|
// 1. 分析每个基本块内指令的数据依赖关系,构建依赖图(DAG)。
|
|
// 2.
|
|
// 根据目标处理器的流水线特性(指令延迟等),使用列表调度等算法对指令进行重排。
|
|
// 3. 此时操作的是虚拟寄存器,只存在真依赖,调度自由度最大。
|
|
//
|
|
// std::cout << "Running Pre-RA Instruction Scheduler..." << std::endl;
|
|
}
|
|
|
|
} // namespace sysy
|