乐趣区

关于llvm:llvm-IR语法-全局变量

全局变量

@.str.9 = private unnamed_addr constant [12 x i8] c”jinjingTest\00″, section “__TEXT,__cstring,cstring_literals”, align 1

@示意全局变量 与之绝对应的 % 示意局部变量, 以 % 前缀

private 示意公有的

unnamed_addr 示意地址不重要, 只有内容. 被标记成这样的常量如果领有雷同的初始化器, 能够合并. 比如说下面的 “jinjingTest” 能够和其余的内容为 ”jinjingTest” 的常量合并.local_unnamed_addr 示意地址在模块中被认为是不重要的

constant 示意常量

[12 x i8] 示意 12 个 1 字节 (i8 为 8 位) 的数组, 也可示意字符串, 这里包含分隔符 \00

c”jinjingTest\00″ 为 llvm 里的初始化器, 示意 c 字符串,\00 为结尾符

section 示意存储在 Mach- o 中的 section 中央

align 1 示意内存对齐为 1,就是其中有余 1 的依照 1 对齐

语法如下:

@<GlobalVarName> = [Linkage] [PreemptionSpecifier] [Visibility]

               [DLLStorageClass] [ThreadLocal]
               [(unnamed_addr|local_unnamed_addr)] [AddrSpace]
               [ExternallyInitialized]
               <global | constant> <Type>[<InitializerConstant>]
               [, section "name"] [, comdat [($name)]]
               [, align <Alignment>] (, !name !N)*

Linkage 链接类型
PreemptionSpecifier 运行抢占阐明
Visibility 可见性规定
DLLStorageClass DLL 存储类别
ThreadLocal 线程存储模型
[(unnamed_addr|local_unnamed_addr)] 地址不重要或模块中地址不重要
[AddrSpace] 地址空间?
[ExternallyInitialized] 内部曾经初始化?
<global | constant> 全局或常量
Type 类型
InitializerConstant 初始化器,即初始化值
,section “name” 寄存的 section 段, 后面有 ”,” 和后面宰割
,align <Alignment> 对齐类型, 后面有 ”,” 和后面宰割

getelementptr 语法

getelementptr

退出移动版