LLVM汇编语言指导手册之标识符简介

标识符(Identifier)

LLVM的标识符以两种基本的类型存在:全局的和局部的。全局标识符(函数,全局变量)以'@'字符开始。局部标识符(寄存器名字,类型)以‘%’字符开始。另外,还有三种不同的标识符格式,各有自己的用途:

    1.指定的(即自己定义的)变量被表示为一个字符串加上他们的前缀。例如,%foo,@DivisionByZero,%a.really.long.identifier。实际使用的正则表达式是‘[%@][a-zA-Z$._][a-zA-Z$._0-9]’。一些特殊的字符,譬如xx对16进制字符来说是ASCII码,使用时可以这样用“\xx”。这样,任意字符都可以在指定值中使用,甚至引用它们自己。

     2.未命名的变量(我理解为ir中的临时变量)被表示为一个无符号数字加上前缀。譬如:%12,@2,%44。

     3.常数,后面会有介绍。

LLVM要求所有的变量前面都以% 或@前缀,原因有二:编译器不需要担心与LLVM的保留字产生名字冲突,未来LLVM可以对保留字集进行扩展。另外,未命名的标识符允许编译器迅速提出一个临时变量而不需要考虑避免符号表冲突。

LLVM的保留字与其他语言的保留字相似。有针对不同操作码的关键字('add','bitcast','ret',etc...),有针对原始类型名的关键字('void','i32',etc....)等等。这些保留字不会与变量名字冲突,因为这些保留字没有一个是以% 或@为开始。

下面有一个LLVM代码例子,把整型变量'%X'乘以8:

简单的方式:

%result=mul I32  %X,8

另一种方式:

%result=shl i32  %X,i8 3

困难的方式:

add i32 %X, %X                   ;yields{i32}:%0

add i32 %0, %0                   ;yields{i32}:%1

%result=add I32 %1,%1

最后一把%X乘以8的方式说明了LLVM的几个很重要的词法特征:

   1.注释以';'开始,直到行尾。

    2.当计算结果没有被指定为一个变量的值时,就会有临时变量被创建。

    3.临时变量是数字有序的。

这也规定了我们后序文档的习惯。当要举例说明指令的时候,我们将在指令后面带上注释(用来定义类型和产生变量的名字)。注释以斜体字表示。

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值