我正在基于现有的 Sparc 后端和本教程为 RISC 机器(名为Risco )开发一个非常基本的新 LLVM 后端。要注册后端,我使用了以下内容。
在 RiscoTargetMachine.cpp:
extern "C" void LLVMInitializeRiscoTarget() { // Register the target. RegisterTargetMachine<RiscoSimulatorTargetMachine> X(TheRiscoTarget); RegisterAsmInfo<RiscoMCAsmInfo> Y(TheRiscoTarget); }在 Risco.td:
def : Processor<"simulator", NoItineraries, [FeatureA]>; def Risco : Target { // Pull in Instruction Info: let InstructionSet = RiscoInstrInfo; }在 TargetInfo/RiscoTargetInfo.cpp:
Target llvm::TheRiscoTarget; extern "C" void LLVMInitializeRiscoTargetInfo() { RegisterTarget<> X(TheRiscoTarget, "risco", "Risco"); }在顶级 LLVM 配置脚本:
# Added Risco to the TARGETS_TO_BUILD variable at line 4965 (from svn trunk): all) TARGETS_TO_BUILD="X86 Sparc PowerPC Alpha ARM Mips CellSPU PIC16 XCore MSP430 SystemZ Blackfin CBackend CppBackend MBlaze PTX Risco" ;;
构建后,llc -version不显示新目标。甚至llc -march=risco test.ll说这是一个无效的目标。我错过了什么?
PS:目前,我将新目标作为文件夹包含在 llvm/lib/Target 中。我怎样才能改变它,以便我可以单独构建目标,并使用动态加载它llc -load?