LLVM学习日志9——Kaleidoscope:后端输出

博客主要围绕Kaleidoscope第8章后端输出exe文件展开。后端涉及Target,LLVM关于目标平台记录分TargetMachine和MachineCode两类,并介绍了各自包含的设置内容。还提到例子在main中添加硬件初始化、设置CPU等,最后展示了编译时创建目标文件的代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Kaleidoscope前面还有两章,我看了但是不想写下来了。

这次看的是第8章,进行后端输出exe文件。

因为是后端,所以涉及Target(目标平台),所以首先要定义目标机器的一些特性。

先看看LLVM关于Target的一些定义。LLVM关于目标平台的记录一共分两类,TargetMachine是目标平台的,MachineCode是目标机的语言的。

TargetMachine

1.DataLayout: 关于数据设置,比如不同类型的内存等

2. TargetRegisterInfo:寄存器的相关设置

3. TargetInstrInfo:指令的设置

4.TargetFrameInfo: 架构的信息

5. TargetJITInfo:  是否支持JIT

MachineCode:

1.MachineInstr:指令设置

2.MachineBasicBlock:基本块的设置

3.MachineFunction:函数的设置

4.MachineInstr Bundles:命令的

在这个例子,他也是这样的。

这个例子在main中添加了硬件的初始化。而且例子中一下子就初始了所有的目标平台等。还设置CPU等,这点我觉得很神奇,这编译器难道还能根据不同的cpu进行不同的编译吗?

编译时嵌入在代码内的,在设置目标文件名称后,使用这一段函数进行创建,这一段我还不是很懂

 auto FileType = TargetMachine::CGFT_ObjectFile;

  if (TheTargetMachine->addPassesToEmitFile(pass, dest, nullptr, FileType)) {
    errs() << "TheTargetMachine can't emit a file of this type";
    return 1;
  }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值