既存の 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
ですか?