LLVM
文章平均质量分 73
m0_46220969
这个作者很懒,什么都没留下…
展开
-
LLVM别名分析框架
介绍别名分析(又名指针分析,是指针分析的一种)是一类技术,试图确定两个指针是否可以指向内存中的同一对象。别名分析有许多不同的算法和分类方法:流敏感vs.流不敏感、上下文敏感vs.上下文不敏感、字段敏感vs.字段不敏感、基于统一vs.基于子集等。传统上,别名分析用Must、May或No别名response响应查询,表示两个指针总是指向同一个对象,可能指向同一个对象,或者已知永远不会指向同一个对象。LLVM AliasAnalysis类是LLVM系统中客户使用和别名分析实现的主要接口。这个类是别名分析信息的翻译 2021-11-02 16:11:19 · 1163 阅读 · 0 评论 -
LLVM学习笔记⑦
别名别名不会创建任何新的数据,只是现有位置的新符号和元数据。别名有一个名字和别名,可以是全局值或者常量表达式。别名可能具有可选的连接类型,可选的运行时抢占说明符,可选的可见性属性,可选的DLL存储类和一个可选的tls模型。语法@<Name> = [Linkage] [PreemptionSpecifier] [Visibility] [DLLStorageClass] [ThreadLocal] [(unnamed_addr|local_unnamed_addr)] alias <翻译 2021-10-27 22:01:31 · 375 阅读 · 0 评论 -
LLVM学习笔记⑥
函数LLVM函数定义包括" define "关键字,一个可选的链接类型,一个可选的运行时抢占说明符,一个可选的可见性样式,一个可选的DLL存储类,一个可选的调用约定,一个可选的unnamed_addr属性,一个返回类型,一个可选的返回类型的参数属性,函数名,一个(可能是空的)参数列表(每个参数都有可选的属性),可选的函数属性,可选的地址空间,可选的section,可选的alignment,可选的comdat,可选的垃圾收集器名称,可选的前缀,可选的序言,可选的个性,可选的附加元数据列表,一个左花括号,一个翻译 2021-10-27 14:39:45 · 298 阅读 · 0 评论 -
LLVM学习笔记⑤
全局变量①全局变量定义在编译时而不是运行时分配的内存区域。②全局变量必须被初始化③全局变量也可以在其他编译单元中声明,这样的话就没有初始化程序了。④全局变量可以指定一个连接类型(前面有说到)无论是全局变量定义还是声明,都可以放一个显式的section在里面,并且可以指定可选的显式对齐。如果变量声明的显式或推断部分信息与其定义之间不匹配,则产生的行为是未定义的。一个变量可以被定义为一个全局constant,它表示变量的内容永远不会被修改(开启更好的优化,允许全局数据被放置在可执行文件的只读部分等)翻译 2021-10-27 11:07:50 · 375 阅读 · 0 评论 -
LLVM学习笔记④
TLS(Thread Local Storage)线程本地存储模型:一个变量可以被定义为thread_local,然后这个变量不能被线程共享(每个线程享有独立的变量副本)并非所有的目标都支持TLS。一个TLS变量可以被指定为以下的TLS模型之一:①loacaldynamic仅在当前共享库中使用的变量②initialexec不会被动态加载的模块中的变量③localexec在可执行文件中定义的变量,并且仅能在这个可执行文件中使用。如果没有指出明确的模型,则采用“general dynamic”翻译 2021-10-26 21:27:41 · 483 阅读 · 0 评论 -
LLVM学习笔记③
LLVM学习笔记③调用约定:LLVM functions, calls 和 invokes 都可以为调用指定一个可选的调用约定。每一对caller/callee(调用者/被调用者)的调用约定必须匹配,不然这个程序的行为是未定义的。LLVM支持以下调用约定,以后可能会添加更多:“ccc” - The C calling convention这个调用约定(如果没有指定其他调用约定,则默认为此调用约定)与目标C的调用约定相匹配。这种调用约定支持可变长参数函数调用,并允许在函数声明的原型和实现的声明中存在翻译 2021-10-22 23:00:56 · 502 阅读 · 0 评论 -
LLVM学习笔记②
LLVM学习笔记②高级结构:1、模块结构LLVM程序由模块(Module)组成,每个模块都是源程序的翻译单元,每个模块由函数、全局变量、和符号表项组成。模块可以与LLVM连接器组合在一起,LLVM连接器合并函数(和全局变量)定义,解析前置声明,并合并符号表项。下面是" hello world "模块的一个例子:; Declare the string constant as a global constant.@.str = private unnamed_addr constant [13 x翻译 2021-10-22 21:57:43 · 325 阅读 · 0 评论 -
LLVM学习笔记①
LLVM学习笔记①LLVM标识符:(两种类型)1、全局标识符(函数、全局变量),以‘@’字符开头2、本地标识符(寄存器名称、类型),以‘%’字符开头(三种格式)1、有命名值:表示带有浅醉的字符串,例如%foo, @DivisionByZero, %a.really.long.identifier。实际上使用的是正则表达式’[% @][-a-zA-z.][−a−zA−Z._][-a-zA-Z.][−a−zA−Z._0-9]*’2、未命名值:表示为带前缀的无符号数值,例如%2,@33、常量这翻译 2021-10-22 21:11:56 · 163 阅读 · 0 评论