本節繼續介紹下SPIR-V到LLVM IR的轉換過程,重點分析其核心機制和關鍵轉換步驟。我們將從 LLVM 入手,結合實SPIR-V結構逐步轉換為符合 LLVM IR 語義的表示方式。
一:詳細過程
1. 創建llvm::module
llvm::LLVMContext llvmContext;
std::unique_ptr<llvm::Module> llvmModule;
llvmModule.reset(new llvm::Module("spirvModule", llvmContext));
2. 定義目標架構;
llvm提供以下幾個類用于輔助定義目標架構;
1): llvm::LLVMTargetMachine, 它抽象表示了某個目標架構(如x86,ARM、GPU)上的代碼生成配置能力。
2): llvm::TargetSubtargetInfo,它用于描述目標平臺的子架構信息,比如指令集擴展,調度器模型,寄存器信息,指令選擇策略,地址空間行為等。
3): llvm::TargetLibraryInfoImp