本节继续介绍下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