llvm之IR手册翻译(1)

来源:互联网 发布:ettercap linux 安装 编辑:程序博客网 时间:2024/05/18 20:32

llvm之IR手册翻译

原网址是:http://llvm.org/docs/LangRef.html#abstract;
下面这些是我自己的翻译,肯定有很多不恰当的地方,做这些只是希望自己以后翻阅更加方便,如果能对大家有所帮助那是极好的!


摘要:
这份文件是针对LLVM汇编语言的参考手册。 LLVM是一个静态单赋值(SSA:这是一种中间表示形式。之所以称之为单赋值,是因为每个名字在SSA中仅被赋值一次.这是一种高效的数据流分析技术)的,它提供类型安全,低级别的操作,灵活性,并能把“所有的”高级语言干净利落表示出来。它是整个LLVM编译策略的所有阶段中常用的代码表示。
简介:
LLVM的代码表示被设计成三个不同的形式来使用:作为一个内存编译器IR;作为磁盘上的字节码(适合于JIT编译器快速装载);并作为人类可读的汇编语言表示。这允许LLVM为编译器转换和分析提供强大的中间表示,同时提供一个自然的方法来调试和可视化的转换。这三种不同形式的LLVM的都是等价的。本文档介绍了人类可读的中间表示。
LLVM的表示的目标是在被表现,类型化,和可扩展的同时重量轻和级别低。它的目标是各种各样的“通用中间表示”,通过在一个足够低的水平使高级的想法,可以清晰地映射到它(类似微处理器是如何工作的,让很多的源语言映射到他们)。通过提供类型信息,LLVM可以用作优化的目标:例如,通过指针分析,可以证明,一个C自动变量从未被当前函数的外部访问,允许它被提升到一个简单的SSA值代替的存储单元。
很好的形成:
要注意,本文档描述’很好的形成’LLVM汇编语言。这与分析器接受的“很好的形成”是有不同的。例如,下面的指令在语法上是好的,但没有很好地形成:
%x = add i32 1, %x;
因为%x的定义在它的用途中并不占主导地位。 LLVM的基础设施提供了一次验证可用于验证的LLVM模块完全形成了。该过程会自动被运行在解析器解析输入组装后和在它输出bitcode优化前。由验证过程表明错误在转换或传递输入到解析器过程中指出侵权。
标识符:
LLVM标识符有两种基本类型:全局和局部。全局标识符(函数,全局变量)以“@”字符开始。局部标识符(寄存器名称,类型)以“%”字符开始。此外,有三种不同的格式标识符,用于不同的目的:
1,命名值被表示为一个字符串和前缀。例如:%for, @DivisionByZero, %a.really.long.identifier。实际使用的正则表达式“[%@] [ - A-ZA-Z$._] [ - A-ZA-Z_0-9]*”。需要在其名称中的其他字符的标识符可以用引号包围。特殊字符可以使用“\ XX”,其中xx是字符以十六进制的ASCII码进行转义。以这种方式,任何字符可以在命名值被使用,即使引用自己。“\01”前缀可用于全局变量来抑制重整;
2,无名值表示为前缀无符号数值,例如,%12,@2,%44;
3,常数,这在下面的常量部分中描述。


未完待续

0 0
原创粉丝点击