自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 收藏
  • 关注

翻译 LLVM别名分析框架

介绍别名分析(又名指针分析,是指针分析的一种)是一类技术,试图确定两个指针是否可以指向内存中的同一对象。别名分析有许多不同的算法和分类方法:流敏感vs.流不敏感、上下文敏感vs.上下文不敏感、字段敏感vs.字段不敏感、基于统一vs.基于子集等。传统上,别名分析用Must、May或No别名response响应查询,表示两个指针总是指向同一个对象,可能指向同一个对象,或者已知永远不会指向同一个对象。LLVM AliasAnalysis类是LLVM系统中客户使用和别名分析实现的主要接口。这个类是别名分析信息的

2021-11-02 16:11:19 1151

翻译 LLVM学习笔记⑦

别名别名不会创建任何新的数据,只是现有位置的新符号和元数据。别名有一个名字和别名,可以是全局值或者常量表达式。别名可能具有可选的连接类型,可选的运行时抢占说明符,可选的可见性属性,可选的DLL存储类和一个可选的tls模型。语法@<Name> = [Linkage] [PreemptionSpecifier] [Visibility] [DLLStorageClass] [ThreadLocal] [(unnamed_addr|local_unnamed_addr)] alias &lt

2021-10-27 22:01:31 367

翻译 LLVM学习笔记⑥

函数LLVM函数定义包括" define "关键字,一个可选的链接类型,一个可选的运行时抢占说明符,一个可选的可见性样式,一个可选的DLL存储类,一个可选的调用约定,一个可选的unnamed_addr属性,一个返回类型,一个可选的返回类型的参数属性,函数名,一个(可能是空的)参数列表(每个参数都有可选的属性),可选的函数属性,可选的地址空间,可选的section,可选的alignment,可选的comdat,可选的垃圾收集器名称,可选的前缀,可选的序言,可选的个性,可选的附加元数据列表,一个左花括号,一个

2021-10-27 14:39:45 296

翻译 LLVM学习笔记⑤

全局变量①全局变量定义在编译时而不是运行时分配的内存区域。②全局变量必须被初始化③全局变量也可以在其他编译单元中声明,这样的话就没有初始化程序了。④全局变量可以指定一个连接类型(前面有说到)无论是全局变量定义还是声明,都可以放一个显式的section在里面,并且可以指定可选的显式对齐。如果变量声明的显式或推断部分信息与其定义之间不匹配,则产生的行为是未定义的。一个变量可以被定义为一个全局constant,它表示变量的内容永远不会被修改(开启更好的优化,允许全局数据被放置在可执行文件的只读部分等)

2021-10-27 11:07:50 366

翻译 LLVM学习笔记④

TLS(Thread Local Storage)线程本地存储模型:一个变量可以被定义为thread_local,然后这个变量不能被线程共享(每个线程享有独立的变量副本)并非所有的目标都支持TLS。一个TLS变量可以被指定为以下的TLS模型之一:①loacaldynamic仅在当前共享库中使用的变量②initialexec不会被动态加载的模块中的变量③localexec在可执行文件中定义的变量,并且仅能在这个可执行文件中使用。如果没有指出明确的模型,则采用“general dynamic”

2021-10-26 21:27:41 473

翻译 points-to-tutorail①

指向分析:偏向于变量可以指向哪些对象别名分析:偏向于对变量或者表达式是否是别名关系,即是否指向同一个对象。指针分析则是两者的结合。输入关系:对应于分析的中间语言。逻辑上分为表示指令的关系和表示名称和类型信息的关系。例如Alloc关系,表示分配新的堆对象,并将它分配给方法内部的局部变量的每条指令。所有的其他指令类型(移动、加载、存储和VCall)都有类似的输入关系。还有编码类型系统、符号表和程序环境信息的关系。例如:输入关系FormalArg显示没某个变量是给定方法的第几个形式参数。LookUp

2021-10-26 20:56:02 88

翻译 LLVM学习笔记③

LLVM学习笔记③调用约定:LLVM functions, calls 和 invokes 都可以为调用指定一个可选的调用约定。每一对caller/callee(调用者/被调用者)的调用约定必须匹配,不然这个程序的行为是未定义的。LLVM支持以下调用约定,以后可能会添加更多:“ccc” - The C calling convention这个调用约定(如果没有指定其他调用约定,则默认为此调用约定)与目标C的调用约定相匹配。这种调用约定支持可变长参数函数调用,并允许在函数声明的原型和实现的声明中存在

2021-10-22 23:00:56 500

翻译 LLVM学习笔记②

LLVM学习笔记②高级结构:1、模块结构LLVM程序由模块(Module)组成,每个模块都是源程序的翻译单元,每个模块由函数、全局变量、和符号表项组成。模块可以与LLVM连接器组合在一起,LLVM连接器合并函数(和全局变量)定义,解析前置声明,并合并符号表项。下面是" hello world "模块的一个例子:; Declare the string constant as a global [email protected] = private unnamed_addr constant [13 x

2021-10-22 21:57:43 322

翻译 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

原创 PAT甲级1001小白思路

#include <iostream>#include <cstdio>using namespace std;int main(){ long int a,b; long int sum; scanf("%ld%ld", &a,&b); sum=a+b; if(sum<1000&&sum&gt...

2020-02-14 19:45:15 99

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除