24小时论文定制热线

热门毕设:土木工程工程造价桥梁工程计算机javaasp机械机械手夹具单片机工厂供电采矿工程
您当前的位置:论文定制 > 毕业设计论文 >
快速导航
毕业论文定制
关于我们
我们是一家专业提供高质量代做毕业设计的网站。2002年成立至今为众多客户提供大量毕业设计、论文定制等服务,赢得众多客户好评,因为专注,所以专业。写作老师大部分由全国211/958等高校的博士及硕士生设计,执笔,目前已为5000余位客户解决了论文写作的难题。 秉承以用户为中心,为用户创造价值的理念,我站拥有无缝对接的售后服务体系,代做毕业设计完成后有专业的老师进行一对一修改与完善,对有答辩需求的同学进行一对一的辅导,为你顺利毕业保驾护航
代做毕业设计
常见问题

基于LLVM的SIC单片机编译器研发

添加时间:2021/08/26 来源:未知 作者:乐枫
LLVM工具是集编译、链接和调试为一体的编译器系统开发框架。整体上分为前端、中间代码和后端等三部分。其内部将一些重复性的工作进行封装和模块化以提供给开发人员进行调用。
以下为本篇论文正文:

摘要

  用C语言而不是汇编语言对SIC单片机开发,可以提高效率和降低学习成本。这样的需求需要交叉编译器把C语言代码编译成对应的单片机汇编语言。SIC单片机是由PIC单片机改进而成。编译器开发是个复杂的过程,包括词法分析、语法分析、中间代码、寄存器分配、指令优化和指令输出等工序。这其中许多工作是具有普遍性和重复性的。为了在开发过程中减少工作量和提高开发效率,便有了LLVM工具。

  LLVM工具是集编译、链接和调试为一体的编译器系统开发框架。整体上分为前端、中间代码和后端等三部分。其内部将一些重复性的工作进行封装和模块化以提供给开发人员进行调用。后端部分是移植工作的重点,主要包括对目标机器的寄存器描述、指令集描述、调用约定以及汇编指令的输出等。同时内部还包含了大量的优化工作。这些所有的功能都提供了相应的接口,在编译器的开发过程中,开发者可以直接调用这些接口来完成相应的功能开发。在LLVM工具内部定义SIC单片机时,先在LLVM源码中进行目标机器信息的注册。之后的重点工作是用LLVM内部的TD语言去描述SIC单片机的寄存器和指令集信息。然后对SIC单片机指令中不支持的一些IR指令进行合法化处理。在指令选择阶段使用自定义的指令选择信息完成由IR指令到SIC单片机指令的匹配,同时处理SIC中工作寄存器被当作默认操作数的问题。最后处理汇编指令的格式输出。

  完成源码的编译后,对SIC单片机的使用方法便和其内部原有的目标机一样。

  通过参数指定SIC单片机作为后端目标机,已经能够输出完整的SIC汇编指令。对SIC单片机中独特部分的处理也得到了解决。

  关键词:SIC单片机、LLVM框架、寄存器描述、指令选择、后端移植

abstract

  It can improve efficiency and reduce the cost of learning new knowledge when we develop programs with C language rather than assembly language on the Microcontrollers. We need a cross-compiler that can compile the C program to the assembly language of singlechip to meet this demand. SIC Microcontrollers we discuss here customized from PIC Microcontrollers. Developing compiler is a complicated task that includes lexical analysis, syntax analysis, intermediate representation, register allocated and instruction optimization procedures. There are lots of repeated task existed in above procedures.Thus, LLVM is developed.

  Llvm tool is a compiler system development framework integrating compilation, linking and debugging. On the whole, it is pided into three parts: front end, intermediate code and back end. It encapsulates and modularizes some repetitive work to provide developers with calls. The back-end part is the focus of the migration work, mainly including the register description, instruction set description, call Convention and assembly instruction output of the target machine. At the same time, it also contains a lot of optimization work. All these functions provide corresponding interfaces. In the development process of the compiler, developers can directly call these interfaces to complete the corresponding function development. When defining SiC MCU in llvm tool, first register the target machine information in llvm source code. After that, the key work is to use the TD language inside llvm to describe the register and instruction set information of SiC MCU. Then legalize some IR instructions that are not supported in SiC MCU instructions. In the instruction selection stage, the user-defined instruction selection information is used to complete the matching from IR instruction to SiC MCU instruction, and deal with the problem that the working register in SiC is regarded as the default operand. Finally, the format output of assembly instructions is processed.

  After compiling the source code, the use method of SiC MCU is the same as its original target machine.

  By specifying SiC MCU as the back-end target machine through parameters, it has been able to output complete SiC assembly instructions. The processing of the unique part of SiC single chip microcomputer has also been solved.

  Key words: SiC MCU, llvm framework, register description, instruction selection, back-end transplantation

目 录

  1 绪论

  1.1 研究背景与意义

  在万物联网的环境下,单片机的使用领域越来越广泛。在单片机环境中进行开发成了一项重要的技能。但单片机下的开发通常采用汇编语言进行。为了更好的适应产品的需求和提升性能,有些企业还对单片机芯片进行定制。这样的结果使得单片机下的编程效率不高。因为在利用汇编语言编程的同时还要掌握不同定制芯片间的差异问题。在这样一个背景下,如何提高在单片机下的编程效率便成了一个值得探究的问题。而其中一个便捷的方法莫过于直接在编程方式上进行改进,即通过高级语言直接对单片机进行程序的开发,之后再用编译器把高级语言编译成对应单片机的汇编语言。这样开发人员只需要关注如何用高级语言进行开发而不用再关心如何掌握对应芯片的汇编语言以及底层各芯片间的差异问题。这其中的转换都将由编译器来完成,而如何开发这编译器便是本文项目要研究的内容。

  众所周知,无论是计算机下的芯片还是单片机中的芯片,都只能识别二进制形式的可执行代码。但进行程序的开发工作却是由高级语言来完成的。如何由高级语言转换到二进制形式便是编译器的工作。编译器的设计直接受一门高级语言语法格式、编程风格的影响;同时设计的好坏又会影响着语言的运行性能及适用范围。例如对于 C/C++高级语言,GNU(GNU is Not Unix)下的编译器和 Studio Visual 中的编译器虽然完成一样的功能,但是在一些细节处理如虚继承、多重继承等中也会存在着差异。而 Java 语言则是实现一次编译,多次运行的跨平台移植。它先将 Java 源代码先编译成字节码,之后再由 Java 的虚拟机 JVM(Java Virtual Machine)对其解释执行。只要安装不同操作系统下的 JVM 工具,便可以在不同平台上运行了。即使各语言间存在着巨大的语法差异,以及同一门语言中的不同编译器也有着设计上的不同。但它们的本质功能都是为了把程序翻译成在运行性能尽可能好的二进制文件。

  虽然编译器的功能本质上就是翻译,但编译器的内部工作流程以及开发却是相当复杂的工程,它涉及到高级语言中语法特性,大量的底层硬件信息和对于生成的代码的优化工作。如果整个流程都亲自完成,那么对于开发功能简单和时间紧的项目来讲却是性价比比较低的工作。在这样的背景下便出现了辅助编译器开发的工具模块。这些工具把编译器开发中的一些重复性、通用性的工作进行封装和模块化,开发人员在开发时只需要直接调用即可。开发人员只需要关注高级语言和后端目标机中的独特特性即可,只有针对这些特性才需要作相应的开发工作。本文项目中要用到的 LLVM 工具便是这样的一个辅助工具。它大大减少了编译器开发中的工作量和难度,同时利用了其本身自带的优化工具。为开发人员节省了大量的时间和精力。

  本文要研究的就是这样一个项目,采用 LLVM 工具开发一个能够将高级语言编译成对应单片机汇编语言的交叉编译器。这样的一个研究项目能够解决实际生产中的需求,同时对 LLVM 工具本身的设计结构和编译器后端的具体实现流程也有一定的研究意义。

  1.2 国内外研究现状

  1.2.1 编译器概述

  编译器作为连接高级语言和机器语言的工具,既要支持高级语言中各种高度抽象的特性,同时也要处理底层中烦琐的硬件信息以及如何对生成的代码进行优化[1].

  对于开发人员来讲,这无疑是个复杂费力的研究。而借用于已有的开源工具链,在其基础上进行修改便成为了一种便捷可靠的开发方法。GCC(GNU CompilerCollection)作为前端支持多种高级语言,后端支持多种目标平台的编译系统,对于后端的移植开发来讲是一个合适的辅助开发工具。李杰[2](2004)探讨了在 GCC 下的移植工作。孟昭天[3](2010)利用 GCC 的目标可重定位特性,探索了 GCC 系统下的移植方法,生成了适用于 ARCA3 的编译器。张梅娟、张荣[4](2018)基于 GCC 的编译工具开发。GNU 下的 GCC 工具有多年的发展历程和丰富的工具链,这些优势本应成为辅助编译器开发的一个最佳的选择。只是由于 GCC 工具设计之初的目的并不在于复用性和易修改性,对于其内部的一些功能也没有提供太多的调用接口。加上多年的发展,GCC 代码的阅读和修改已经是一个异常困难的任务了。这种困难性主要体现在GCC 的中间代码 RTL(Register Transfer Language)、错误信息的提示以及对于信息接口的设计上[5](2004)。因此在关于辅助编译器开发中需要一个新的框架来支持。

  基于这种需求,2000 年 illinois 大学开始了 LLVM 项目[6].Chris Lattner 和Vikram Adved 在早年发表的论文[7](2003)[8](2004)中设计了一个编译框架支持编译器的开发工作。在文中讨论了对于 LLVM 整体结构的设计,并阐明其目的是封装相应的功能模块然后通过提供接口来简化对编译器的开发工作,尽可能让更多的编译器工作自动化生成。随着苹果公司加入该项目,该项目更是获得了长足的发展和商用化[9].现在 LLVM 拥有资料详尽的文档介绍和一个良好的社区环境,还有一年两次的开发者大会[10](2018),对于开发问题的探讨和相关论文的分享。对于 LLVM 的介绍,Chris Lattner[11](2002)[12](2008)[13](2018)还提供了一个文档以帮助开发人员进行理解。

  1.2.2 国内研究现状

  国内较早关注 LLVM 工具的研究者董峰[14](2007)。在 2007 年就详细阐述和分析了LLVM 架构的基本结构,其组成部分中的各项具体功能和 LLVM 的后端移植机制。并且对 ARM 的基本特性也作了详细的介绍,之后实现了对 ARM 后端移植的支持。对于特定的芯片的移植,赵晔[15](2015)利用 LLVM 编译工具和 PowerPC970 处理器设计了一款交叉编译器。它是把高级语言翻译成了 PowerPC970 目标机器的汇编代码。而任艳珍[16](2017)则以国产自主研发的 STX 专用处理器作为目标芯片,实现了对于这款芯片的移植。而这款芯片主要是用于嵌入式的处理中。胡敏[17](2014)成功实现了 C-SKY自主知识产权的高性能嵌入式 CPU 在 LLVM 系统上的移植。张祖羽[18](2012)的 C*Core嵌入式处理器架构移植及卢念[19]对于 NiosII 后端的移植。后端机器的移植基本上完成了所有的后端流程,是深深的立足于 LLVM 工具本身的研究。

  LLVM 的优越性之一是内部良好的结构设计和优化机制,而这种友好性除了在工具内部使用外,同时也可以通过接口被开发人员所调用。所以 LLVM 另外一个常用的地方是利用其内部的功能来完成某些特定的功能。如使用 LLVM 内部的 DAG 图信息,陈星昊[20](2018)利用 LLVM 内部的程序代码依赖图和程序依赖图在克隆代码检测中具有分析全面和精确度高的特点。提出了一个利用 LLVM 工具的克隆代码检测的技术。

  在 LLVM 优化机制的使用上。安龙飞[21](2015)利用 LLVM 编译器的内部架构实现对函数内联模型进行改进。通过该技术他遍历程序的效率平均提高了 1.52%.裴根[22](2013)则对异构编译的优化进行研究。用于在异构计算机系统中开发可移植的并行应用程序。李昊[23](2017)用 LLVM 实现软件代码的静态检测,以降低软件测试所 需花费成本,提高整体开发的效率。在静态程序的处理上,还有陈云潇[24](2018)、徐晨晨[25](2017)等也做了相关的研究。利用 LLVM 工具的中间代码 IR 设计,赵天宇[26](2016)把 IR 转换成脚本语言,从而实现了从一种高级语言到另一种高级语言的转换。王时雨[27](2018)把 LLVM 工具应用于图像处理,提高处理速度。Clang 工具是 LLVM 的前端组成部分,这一工具也提供了众多接口。张代远[28](2015)、李树芳[29](2017)用 Clang 提供的工具完成了对 C 语言的分析处理。

  1.2.2 国外研究现状

  国外对于 LLVM 工具的研究也主要分布于后端目标机的移植和工具的内部模块及优化机制。Bruno Cardoso Lopes 和 Rafael Auler[30]撰写的著作对于 LLVM 工具的整体结构和各个接口作了详尽的描述。这是目前了解 LLVM 的一个权威书籍。目前关于LLVM领域内的另一本书籍为Mayur Pandey[31]所著。Juneyoung Lee和Yoonseung Kim[32]

  (2017)研究了中间代码 IR 的未定义行为。未定义行为不一定代表不安全的程序,但可能有对一些语法的处理的缺陷。通过处理这些未定义的行为可以对程序代码作更进一步的优化。Juneyoung Lee 和 Chung-Kil Hur[33](2018)探究了内存模型,实现对 LLVM 内部的优化和底层代码进行进一步处理。在利用 LLVM 进行后端移植的研究中,Connor Goldberg[34](2017)完成了对于自定义的 32 位精简指令集 CPU 的移植。Chen Chung-Shu 和 Anoushe Jamshid[35]用自定义的 Cpu0 芯片,详细描述了如何在 LLVM 工具进行移植的方法。这是一个详尽的教程,对于 LLVM 后端的移植具有很强的指导意义。对编译器的研究可以知道,大量的窥孔优化存在于编译器之中,但这其中的一些优化可能会成为Bug的来源。David Menendez和Santosh Nagarakatte[36]

  (2016)探讨了利用自动检测技术验证窥孔优化技术的正确性。以及对于浮点数的检测处理[37].同时也有 Alex Denisov 和 Stanislav Pankevich[38](2018)对工作在IR 代码上的异常检测研究。Yi-Hong Lyu 和 Ding-Yong Hong[39](2014)利用 LLVM 后端开发了一个动态二进制库来作为程序执行时调试工具的核心组成部分。

  LLVM 工具的功能非常多,从各种研究中也可以看到在应用上有各种各样的使用和尝试。而国内外的研究更多地聚焦于后端移植和内部优化。通过这些研究,对 LLVM工具的框架结构和内部机制有了更深入和全面的了解。

  1.3 本文的研究内容

  本文的主要研究目的是如何在 LLVM 工具内部定义一个单片机的芯片。因此研究该款 SIC 单片机芯片结构、了解 LLVM 框架的设计结构和学习如何把 SIC 单片机定义在 LLVM 工具中将成为本文的主要研究内容。

  (1)SIC 单片机结构的研究SIC 单片机是基于 PIC 单片机而改进的。在改进的过程,针对特定的功能和需求进行了相应的精简。为了更好的在 LLVM 工具下进行移植,便需要先从整体的角度来了解 SIC 单片机。这包括 SIC 的指令结构、内存布局、中断函数、堆栈结构等重要组成部分,这其中有些信息将会在 LLVM 工具中直接用到的,而其中的一些则可能会需要特别处理。如 SIC 单片机中所有的指令都需要用到一个工作寄存器,这样的设计跟一般的计算机指令有很大的不同,在编译过程中怎样处理将是一个需要考虑的问题。所以首要的工作便是要充分了解这些信息,了解单片机内部的运行和组成结构。因为在 LLVM 后端移植中用的最多的是它的内存布局和指令集等信息,所以对于单片机结构的研究也将更集中于这些方面。

  (2)LLVM 架构分析对 LLVM 工具的框架研究则是另一个主要的内容。随着多年的发展,LLVM 工具和整个框架体系不断丰富扩大,由最初的底层虚拟机演变成了构架编译器的框架系统。

  现在的 LLVM 工具能够在众多领域中发挥作用,并都有着不错的表现。LLVM 工具的更新迭代比较快,本文结合在项目中的研究工作,将采用 LLVM3.9 版本作为研究对象。

  将重点关注 LLVM 的整体框架和基本工作流程;同时学习单片机这种内存较为简单,但与一般的计算机系统结构有较大差异的芯片结构在 LLVM 工具中如何定义和实现的方法。通过 LLVM 架构的分析使得对其有一个深入的了解和掌握,这样可以更大限度的挖掘其能力。现在兴起的人工智能热中,有些企业在开发能够更快处理图像的处理器,以及利用 LLVM 对数据库引擎进行优化处理。这些处理器都需要定制相应的编译器去支持,这些完全可以采 LLVM 工具来辅助开发。同时 LLVM 工具内部除了提供自带的优化机制外,还有相应的接口给开发人去增添优化处理功能。这对于需要更快性能的内核来讲是一个极大的便利。因此可以预见到,LLVM 工具具有远大的使用前景。本文希望可以借此为 LLVM 工具的广泛应用贡献一份绵薄之力。

  (3)SIC 编译器的实现在 LLVM 内定义一个目标机后端将是本文重点研究的内容。在完成了对 SIC 单片机和 LLVM 框架的分析后,将会对 SIC 编译器的操作和实现过程有了大概的了解。但由于SIC单片机与一般计算机系统上的差异,还将要重点要关注如何调整修改LLVM,使其能够处理单片机下内存简单,指令精简的情况。虽然 LLVM 工具在内部有提供相应的接口使开发人员能够去修改,但在实操中才会发现所有的修改都是非常复杂的工程。所以在实现了对单片机芯片的定义后,将对这次项目的经验进行归纳总结,甚至是添加一个新的接口,把对于这类单片机的特定处理过程进一步简化。从而可以为以后的深入探索提供帮助。

  1.4 本文的组织结构

  本文内容的组织结构主要分为以下几个部分:

  第一章,绪论。介绍本文的研究背景和意义。探讨了当前国内外学者对于 LLVM工具的研究现状和应用示例,LLVM 官方对于 LLVM 未来发展的展望。以及对于把 LLVM工具移植到 SIC 芯片中的意义和 LLVM 工具的学习价值。

  第二章,SIC 结构研究。SIC 单片机是本文要进行移植的目标机器,在这里探讨了其内部特色的内存设计和二地址式指令集的组成。并与一般的计算机系统结构进行对比,及分析这种差异会给编译器的设计带来什么影响。

  第三章,LLVM 框架分析。了解其自动生成编译器代码的主要的工作原理和设计思想。理清LLVM工具的组成部分和后端编译过程中各模块和功能的组成,指令在LLVM各个阶段中的演变和提供了哪些接口进行定制化处理。

  第四章,SIC 编译器实现。给出基于 LLVM 工具的 SIC 单片机后端移植的具体实现。介绍对寄存器、指令集、调用约定和汇编指令的处理。同时还有对于 SIC 芯片中的特殊性部分的处理方法。

  第五章,测试结果。介绍 LLVM 源码的编译和使用命令,并给出测试结果。

  第六章,总结与展望。对整个项目的工作进行归纳总结,并展望在以后的工作中可以作进一步研究的地方。

  2 SIC 结构研究

  2.1 SIC 单片机 CPU

  2.2 内存存储结构

  2.3 指令集组成

  2.4 本章小结

  3 LLVM 框架分析

  3.1 LLVM 整体框架结构

  3.2 LLVM 编译流程之前端

  3.3 LLVM 编译流程之中间代码 IR

  3.4 LLVM 编译流程之后端

  3.5 LLVM 后端的具体接口

  3.6 本章小结

  4 SIC 编译器实现

  4.1 配置文件的处理

  4.2 指令集的处理

  4.3 寄存器的处理

  4.4 调用约定的处理

  4.5 指令周期的处理

  4.6 合法化的处理

  4.7 指令选择的处理

  4.8 输出结果的处理

  4.9 本章小结

  5 测试结果

  5.1 源码编译处理

  5.2 结果输出

6 总结与展望

  6.1 本文工作总结

  开发编译器是一个复杂的工程,如果全部的内容都由开发者自己完成。这无疑是一个巨大和艰巨的工作。为了解决这一问题,产生了专门用来辅助开发人员进行编译器开发的工具。LLVM 便是这样的一个集编译、链接和调试为一体的编译系统。本文项目利用 LLVM 工具辅助开发了一个 SIC 单片机的交叉编译器,它将 C 语言编译成SIC 单片机的汇编语言,提高生产工人的工作效率。

  (1)在项目的伊始阶段是对 SIC 单片机内部的结构进行了解和分析。SIC 单片机与一般的计算机系统一样,具有 CPU、内存等结构以及汇编语言。但在具体细节上也存在着一定的差异。如内存结构的组成上,SIC 单片机全部由寄存器完成,而不像计算机系统中有寄存器、缓存、主存及硬盘存储等。而另一个较大的差异则是 SIC单片机的汇编指令格式为二地址式,采用一个默认的工作寄存器来充当其中的一个操作数。

  (2)LLVM 的整体结构分为前端、中间代码和后端等部分。中间代码是 LLVM 框架的基石,它由前端工具 Clang 生成,而用于后端的指令编译。中间代码采用了 SSA形式,便于支持高级语言的语法和对其进行优化。前端主要完成了词法分析、语法分析、语义分析等编译器的基本操作,这一部分在 LLVM 中定义 SIC 单片机时直接沿袭,未作修改。后端部分是在 LLVM 中定义一个新目标机器时的重要部分,其内部由众多阶段组成。每一个阶段基本上代表着一个功能模块,主要的功能有寄存器描述、指令集描述、指令的合法化和指令选择等。

  (3)对于后端的各个功能模块,LLVM 提供了相应的接口给开发人员进行功能的完成。本文中主要是解决了 LLVM 中 TD 语言对于 SIC 单片机寄存器和指令集的描述;同时还在 C++代码里面解决 LLVM 的中间代码 IR 不被 SIC 汇编指令支持的问题;接着解决了指令的输出和格式化问题。最后是对所作的工作进行了测试和验证。

  6.2 工作展望

  本次在 LLVM 工具中定义一个目标机的过程中,对于其整个框架结构和功能实现都有了较为深入的学习与了解。虽然在项目研究中只用到了 LLVM 工具的一部分功能,但已经充分认识到该工具的强大性和应用范围的广泛性。展望今后的学习,如果有幸继续耕耘于此领域,那么将会更多的关注 LLVM 工具内部自带的优化工具及添加自定义的优化程序。因为在 LLVM 工具的后端部分,针对每次生成的指令代码都会做一次优化遍历。这种处处优化的精神无疑有着其内部良好结构设计的支持,同时这对开发一个追求运行速度的编译器来讲具有很大的吸引力,因此值得在这方面继续深入探究。

致谢

  春尽夏立,柳絮飘尽,梧桐花散。在本是初夏燥热时节,灰铅色的天空却像极了暮秋之感。在此情此景下,此时此刻的我坐在图书馆里,追忆往昔。

  回首过去两年研究生生活,那些个片段如走马灯般呈现,内容若隐若现。人们常说不念过往,但不念过往又哪来的对生活的蛛丝马迹。过去的种种筑垒起了如今的一切,无论是喜或忧,都深深的嵌在了脚下。现在在这样的一个时节中,于我,则寄望可以带着过去奔赴将来,去走进下一段旅程。

  在两年的学习中,感谢徐丽萍老师在学习和项目工作中的帮助,使得我可以完成研究生阶段的各项任务。感谢两位同窗,郑展和王芳同学,两年的学习,我们从最开始的研究生复试开始认识,一起完成研究生的学习。感谢学弟严智康,我们一起进入项目,在开发过程中他提供了很多的帮助。实验室里的谢云菲、王凯和李硕琳,大家一起欢聚的时光为单调的学习日子增添了不一样的色彩。向大家伙儿致谢!同时对于花费时间和精力来参与论文答辩的老师表示感谢!

  参考文献

  [1] 张素琴,吕映芝。编译原理。版本(第 2 版)。北京:清华大学出版社,2005.

  [2] 李杰。GCC 编译系统结构分析与后端移植实践:[硕士学位论文].杭州:浙江大学图书馆,2004.

  [3] 孟昭天。基于 GCC 的 ARCA3 的编译器移植:[硕士学位论文].哈尔滨:哈尔滨工业大学图书馆,2010.

  [4] 张梅娟,张荣。基于 GCC 的 cmdsp2f01 编译工具移植开发。电子与封装,2018,18(1):26~42.

  [5] Clang vs GCC[EB/OL]. http://clang.llvm.org/comparison.html#gcc,2019-05-01.

  [6] The LLVM Compiler Infrastructure[EB/OL]. https://llvm.org/.2019-05-01.

  [7] Vikram Adve,Chris Lattner,Michael Brukman et al.LLVA: A Low-level VirtualInstruction Set Architecture.in: Proceedings of the 36th annual ACM/IEEEinternational symposium on Microarchitecture (MICRO-36)。San Diego,CA,December 2003.

  [8] Chris Lattner,Vikram Adve.LLVM: A Compilation Framework for LifelongProgram Analysis & Transformation.Technical Report #UIUCDCS-R-2003-2380,Computer Science Dept. Univ. of Illinois,Sep.2003.

  [9] LLVM Users[EB/OL].http://llvm.org/Users.html,2019-05-01.

  [10] LLVM Developers' Meeting[EB/OL].http://llvm.org/devmtg/,2019-05-01.

  [11] Chris Lattner.LLVM: An Infrastructure for Multi-Stage Optimization: [M.SThesis].Urbana,IL:Computer Science Dept.,University of Illinois atUrbana-Champaign,2002.

  [12] Chris Lattner.Introduction to the LLVM Compiler System.AdvancedComputing and Analysis Techniques in Physics Research,Erice,Sicily,Italy,Nov.2008.

  [13] Tatiana Shpeisman,Chris Lattner.MLIR: Multi-Level IntermediateRepresentation for Compiler Infrastructure.2019 European LLVM DevelopersMeeting,April 2019.

  [14] 董峰。LLVM 编译系统结构分析与后端移植:[硕士学位论文].上海:上海交通大学图书馆,2007.

  [15] 赵晔。基于 LLVM 的交叉编译器的设计与实现:[硕士学位论文].西安:西安电子科技大学图书馆,2015.

  [16] 任艳珍。基于 LLVM 的专用 CPU 后端移植分析与设计:[硕士学位论文].成都:成都理工大学图书馆,2017.

  [17] 胡敏。基于 LLVM 编译架构的 CSKY 后端移植:[硕士学位论文].杭州:浙江大学图书馆,2014.

  [18] 张祖羽。基于 LLVM 的 C_Core 后端移植研究:[硕士学位论文].哈尔滨:哈尔滨工程大学图书馆,2012.

  [19] 卢念。基于 LLVM 的 NiosⅡ处理器后端快速移植及优化:[硕士学位论文].长沙:中南大学图书馆,2011.

  [20] 陈星昊。基于 LLVM 克隆代码检测关键技术研究:[硕士学位论文].南京:南京邮电大学图书馆,2018.

  [21] 安龙飞。基于 LLVM 的函数内联优化技术研究:[硕士学位论文].哈尔滨:哈尔滨工程大学图书馆,2015.

  [22] 裴根。基于 LLVM 的异构编译优化方法研究:[硕士学位论文].重庆:重庆交通大学图书馆,2013.

  [23] 李昊。基于 LLVM_Clang 的软件静态检测工具研究与实现:[硕士学位论文].西安:西安理工大学图书馆,2017.

  [24] 陈云潇。基于 LLVM 的静态程序有界模型检测:[硕士学位论文].福州:华侨大学图书馆,2018.

  [25] 徐晨晨。基于 LLVM 的静态程序切片方法研究:[硕士学位论文].南京:南京邮电大学图书馆,2017.

  [26] 赵天宇。基于 LLVM 的脚本语言后端工具设计与实现:[硕士学位论文].长春:吉林大学图书馆,2016.

  [27] 王时雨。基于 LLVM 架构的图像处理程序的并行分类。 微电子学与计算机,2018,35(1):66~71.

  [28] 张代远。基于Clang的C语言代码并行化转换工具的设计与实现:[硕士学位论文].长春:吉林大学图书馆,2015.

  [29] 李树芳。采用 Clang_LLVM 的 C_源代码覆盖率分析插装方法。 计算机科学,2017,44(11):191~194.

  [30] Bruno Cardoso Lopes,Rafael Auler.Getting Started with LLVM CoreLibraries.Edition(1st Edition)。UK: Packt Publishing Ltd,2014.

  [31] Mayur Pandey.LLVM Cookbook.Edition(1st Edition)。UK:Packt Publishing Ltd,2015.

  [32] Juneyoung Lee,Yoonseung Kim,Youngju Song et al.Taming Undefined Behaviorin LLVM.in:Proc.of the 38th ACM SIGPLAN Conference on ProgrammingLanguage Design and Implementation (PLDI),June 2017.

  [33] Juneyoung Lee,Chung Kil Hur, Ralf Jung et al.Reconciling High-LevelOptimizations and Low-Level Code in LLVM.in:Proc.of the ACM onProgramming Languages,Volume 2 Issue OOPSLA,Nov.2018.

  [34] Connor Jan Goldberg.The Design of a Custom 32-bit RISC CPU and LLVMCompiler Backend.Master's Thesis, Rochester Institute of Technology,Aug.2017.

  [35] Chen Chung Shu,Anoushe Jamshidi.Tutorial LLVMBankend Cpu0.

  [36] David Menendez,Santosh Nagarakatte.Termination-Checking for LLVMPeephole Optimizations.

  [37] David Menendez,Santosh Nagarakatte,Aarti Gupta.Alive-FP:AutomatedVerification of FloatingPoint Based Peephole Optimizations in LLVM.Proceedings of the 23rd Static Analysis Symposium (SAS 2016),Aug.2016.

  [38] Alex Denisov,Stanislav Pankevich.Mull It Over: Mutation Testing Based onLLVM. IEEE International Conference on Software Testing, Verification andValidation Workshops (ICSTW),Apr.2018.

  [39] Yi Hong Lyu,Ding Yong Hong,Tai Yi Wu et al.DBILL: An Efficient andRetargetable Dynamic Binary Instrumentation Framework Using LLVM Backend.in: Proceedings of the Tenth ACM SIGPLAN/SIGOPS International Conferenceon Virtual Execution Environments (VEE 2014),Mar.2014.

  [40] LLVM Download Page[EB/OL].http://releases.llvm.org/,2019-05-01.

  [41] Chris Lattner.The Architecture of Open Source Applications[EB/OL].http://www.aosabook.org/en/llvm.html,2019-05-01.

(如您需要查看本篇毕业设计全文,请您联系客服索取)

相关内容
相关标签:单片机毕业设计
好优论文定制中心主要为您提供代做毕业设计及各专业毕业论文写作辅导服务。 网站地图
所有论文、资料均源于网上的共享资源以及一些期刊杂志,所有论文仅免费供网友间相互学习交流之用,请特别注意勿做其他非法用途。
如有侵犯您的版权或其他有损您利益的行为,请联系指出,论文定制中心会立即进行改正或删除有关内容!