14

我正在基于现有的 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

4

2 回答 2

4

默认的第一个模板RegisterTarget参数是Triple::InvalidArch. 尝试这个:

extern "C" void LLVMInitializeRiscoTargetInfo() {
    RegisterTarget<Triple::UnknownArch> X(TheRiscoTarget, "risco", "Risco");
}

您可能还需要在 RiscoAsmPrinter.cpp 中为您的后端注册一个组装打印机:

extern "C" void LLVMInitializeRiscoAsmPrinter() {
    RegisterAsmPrinter<RiscoAsmPrinter> X(TheRiscoTarget);
}

我不太清楚你说的最后一点是什么意思。我的 MakefileLOADABLE_MODULE=1将目标构建为 lib 文件夹中的共享对象。为了在注册目标列表中查看 Risco 目标,我会运行类似./bin/llc -load ./lib/libLLVMRisco.so -version假设您在 Linux 上的操作。

于 2010-11-21T19:13:52.343 回答
0

您必须在 LLVM 的根目录中编辑至少 16 个文件:

1) 在 CMakeLists.txt 中将我们的目标添加到: set(LLVM_ALL_TARGETS AArch64 ARM ... )

2)将您的目标添加到 Triple.h

3) 将 HI/LO 添加到 llvm_root_dir/include/llvm/MC/MCExpr.h

...

16) ...

完整的步骤可以在 LLVMCookbook 中找到。第 228 至 238 页。抱歉,我无法在此处复制/粘贴 10 页的教程。

编辑完这 16 个文件后,使用 cmake 构建 LLVM: $cmake ~/llvm/src/ -DLLVM_TARGETS_TO_BUILD=YourTargetName 然后 $make

如果您足够幸运,那么您的构建将成功,您可以通过发出以下命令看到您的目标已添加到 llc 工具中:$llc –version

于 2016-10-27T04:31:28.710 回答