如何获取MCInstr的调度类?

问题描述 投票:0回答:1

我正在 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
。 (这就是的方法,我正在尝试实现。)

c++ compiler-construction llvm llvm-c++-api
1个回答
0
投票

事实证明,我可以通过以下方式访问

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();
© www.soinside.com 2019 - 2024. All rights reserved.