LLVM标识符
1.从作用域上分为:全局标识(global)和局部标识(local)
全局Pattern:[@][-a-zA-Z.][−a−zA−Z._][-a-zA-Z.][−a−zA−Z._0-9]*
局部Pattern:[%][-a-zA-Z.][−a−zA−Z._][-a-zA-Z.][−a−zA−Z._0-9]*
(正则表达式表示,就不举例子了)
Note:转移,以及组合时的自引用还没看懂.
2.未命名变量
[%@][0-9]+
3.常量
在常量篇里面具体介绍.
4.要求使用前缀的用处
1.现今已经存在的和未来即将扩展的 “关键字” 不会和"标识符"冲突.
2.自动变量%0 @1,可以使编译器快速生成临时变量,而且不会和"Symbol Tablet"(学过编译原理的都知道符号表吧)冲突.
3.LLVM中的保留词与其他语言中的保留词非常相似。对于不同的操作码(‘add’、‘bitcast’、‘ret’等),对于原子类型名(‘void’、‘i32’等),还有其他关键字。这些保留词不能与变量名冲突,因为它们都没有以前缀字符(“%”或‘@’)开头。
下面时一个例子:
%result = mul i32 %X, 8 ;%X*8的值 保存到%result
;这是注释,一行结束
%result = shl i32 %X, 3
%0 = add i32 %X, %X ; yields i32:%0
%1 = add i32 %0, %0 ; yields i32:%1
%result = add i32 %1, %1
;上面三种方式等价,只不过第三个使用"临时变量"
1.注释用“;”分隔,直到行结束。
2.当计算结果未分配给命名值时,创建未命名临时变量。
3.未命名的临时变量按顺序编号(使用每个函数递增计数器,从0开始)。
4.请注意,在这个编号中包含基本块和未命名的函数参数。例如,如果条目基本块没有给出一个标签名,所有的函数参数都被命名,那么它将得到0号。
1817

被折叠的 条评论
为什么被折叠?



