毕业答辩-基于LLVM的程序切片系统.ppt

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于LLVM的程序切片系统 2014年6月7日 目录页 contents 01 选题 02 设计 03 实现 1、选题 问题: 背景 ——当一个大的计算机程序被分解成一个个较小的程序片以后,很容易被构造、理解和维护。 ——在程序分析测试时,由于程序段代码量大,针对不同程序变量、接口的测试分析起来较为困难,费时又费力,而且还容易出错。 解决: ——我们需要一些用于程序分解的技术和方法,在这些技术中程序切片起到了无可替代的作用 1、选题 发展 (1)基于数据流方程的程序切片阶段 (2)基于依赖图的程序切片阶段 (3)面向对象程序切片阶段 (4)程序切片发展“百花齐放”阶段 M.Weiser (基于CFG的数据流方程) K.J.Ottenstein(基于程序依赖图)、S.Horwitz(前向切片)等 M.J.Horrald(扩充的依赖图)、D.Liang和Z.Chen(面向对象动态切片) 削片、砍片、数据切片、层次切片和无定型切片 2、设计理论 基本思想 ——M.Weiser等人将只与某个输出有关的语句和谓词所构成的程序成为程序的一种静态切片(static slice),并提出了基于CFG的计算程序切片的算法。 ——他定义的程序切片是通过对初始程序删除零条或多条语句得到的可执行程序。切片准则是二元组n,V,其中V表示在n定义或使用变量的集合,n表示程序中的某个点。关于切片准则的程序切片是程序P的语句的一个子集S,它必须满足: (1)S必须是一个有效程序; (2)对一个给定的输入,P中断时,S也中断,无论何时,与S相关的语句被执行时,计算V中所有变量的值都必须是相同的。 2、设计理论 依赖关系 ——在一个源代码中,对于一个变量的有直接影响关系的称为数据依赖,而对一个变量有间接影响关系的称为控制依赖,比如出现if,while的时候。 —第4条语句的i变量和第7条语句i变量有着直接影响关系,所以其存在数据依赖关系 —第6条语句存在if判断语句,所以对i变量的语句存在间接依赖,我们称之为控制依赖关系 2、设计理论 依赖图的构造 ——目前的程序切片大都是以SDG为基础,在其上利用图的可达性算法获得的。 ——SDG包含许多过程依赖图(ProcedureDependence Graph,PDG),每一个PDG对应程序中的一个过程。PDG由点和边组成,其中点代表语句或判定表达式,边又分为数据依赖边和控制依赖边。 ——基于数据流分析的算法:确定直接相关变量与语句,确定间接相关变量和语句的方程 ——图的可达性算法:找出所有从依赖图的入口节点到切片准则节点的所有路径,把这些路径所经过的节点标记出来,其构成的集合就是关于切片准则的一个依赖图切片。 2、设计理论 2 5 4 6 7 ——图中可以看出,对于i变量,我们根据控制依赖和数据依赖关系构造成简单的依赖图。其中结点为父子关系的为控制依赖关系,节点是虚线的是数据依赖关系。 依赖图的构造的例子 2、设计理论 设计流程图 源程序 数据依赖关系 控制依赖关系 系统依赖图(SDG) 切片生成器 基于数据/控制流分析算法 可达性计算 根据依赖关系构造成图 2、设计理论 支撑工具 LLVM? (Low Level Virtual Machine ),可以作为多种语言编译器的后台。 LLVM编译系统 中间代码 集 成 库 工 具 虚拟指令集 高层结构 类型系统 核心库 分析库 转换库 代码生成库 运行库 目标处理库 基本工具 编译工具 调试工具 后端工具 单指令 内函数 原子类型 衍生类型 2、设计理论 支撑工具 LLVM工具及相互关系 2、设计理论 支撑工具 LLVM编译流程 高级语言前端 中间代码优化器 后端代码生成器 C代码 C++代码 LLVM IR LLVM IR 后端代码 文件 标准的标量优化和循环优化 进程间优化(跨函数) 3、运行演示 执行步骤 1.编译过程: 在LLVMSlicer-build目录下依次执行指令: (1)cmake .. (2)make 2.执行过程: 在LLVMSlicer-build-src目录下依次执行指令: (1)opt –load ./LLVMSliser.so –create-hammock-cfg slice-inter calc.bc –o calc1.bc (2)sh ./process.sh 源程序名 切片变量 3、运行演示 切片举例 对左边程序中的X变量进行切片: 执行切片之后,在LLVMSlicer-bulid-src目录下会创建一个test文件夹,test文件夹中包括如下的内容: * *

文档评论(0)

***** + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档