我正在 VLIW 架构的下游编译器中实现
llvm-mc
。在对包进行编码之前,我需要检查该包中的指令顺序是否正确。要检查此订单,我需要从 MCInst
获取调度单位,但我没有找到方法。
在
Hexagon
目标中有一个方法HexagonInstrInfo::getUnits()
,其实现如下:
InstrStage::FuncUnits HexagonInstrInfo::getUnits(const MachineInstr &MI) const {
const InstrItineraryData &II = *Subtarget.getInstrItineraryData();
const InstrStage &IS = *II.beginStage(MI.getDesc().getSchedClass());
return IS.getUnits();
}
但是
TargetInstructionInfo
在MCCodeEmitter
内不可用。我可以访问 MCInstr
、MCSubtargetInfo
、MCInstrInfo
和 MCContext
。 (这就是的方法,我正在尝试实现。)
事实证明,我可以通过以下方式访问
InstStage
:
const InstrItineraryData &II = /*MCSubtargetInfo*/STI.getInstrItineraryForCPU(STI.getCPU());
InstrStage &IS = II
.beginStage(
MCII/* MCInstrInfo */
.get(
/* MCInstr& */MI.getOpcode().getSchedClass());
InstrStage::FuncUnits Units = II.getUnits();