LLVM
文章平均质量分 85
burnmite
这个作者很懒,什么都没留下…
展开
-
科普LLVM中MSP430如何lower移位指令
问题背景最近在做LLVM项目的时候,碰到了一个看起来不是问题的问题,就是如何对移位指令进行lower,在LLVMIR中,移位指令使用一个节点进行表示的,表示如下(shl a, b)其中,假设a就是源操作数,b是移位次数,shl为逻辑左移,可是MSP430芯片里面只有一次移动一位的移位指令,如下(MSP430shl a)表示将源操作数a向左移动一位,那么下一步,顺理成章地就会想到,如果每次只移动一位,原创 2017-10-02 19:13:37 · 1029 阅读 · 2 评论 -
用Scheme解释器项目来了解Java
首语原本打算定的题目是,基于Java8的Scheme解释器 ,但是在对项目进行编写的时候,发现有很多scheme的语言细节、理论我了解的少之又少,而本人自认为Java基础还是比很多人要好的,所以想改成现在这个题目,用Scheme解释器来学习Java。写这个项目的缘由是最近的一场面试,这里我就安利一家公司,源伞科技 ,位于深圳的一家公司,主要是做静态分析,编译器构建的。当时我把简历发过去的时候,hr问原创 2017-10-28 22:54:22 · 688 阅读 · 0 评论 -
用Scheme解释器项目来了解Java(三)
本章简介本章承接上一章,上一章我们介绍了如何处理复杂类型,这一张我们详细的介绍一个如何从token流中分析出一个语法结构。代码概述分析简单结构SchemeAtom:第一个字母是英文字母,一直扫描到空格为止,里面只存在英文和数字以及一些合法字符。SchemeNumber:以数字开头,后面的内容只允许是数字,这里我们不分析浮点数,所以不包含小数点SchemeBoolean:只有两种情况可以分析成B原创 2017-10-31 11:30:34 · 366 阅读 · 0 评论 -
用Scheme解释器项目来了解Java(五)
本章介绍本章主要介绍Java中的函数式编程在本项目中的应用,非常简略。各位只需要稍加实践就可以发现函数式编程的妙用。如果想详细入门Java函数式编程的话,下面这个链接很不错。 Java 8 中的 Streams API 详解举例说明我想判断一个List中是不是所有的元素都符合某个条件,比如本项目中有一个逻辑是,判断某一个List中是不是所有的元素都是SchemeNumber类,这样才可以进行+的原创 2017-11-01 21:16:58 · 422 阅读 · 0 评论 -
用Scheme解释器项目来了解Java(四)
本章简介本章主要介绍编译器中最主要的设计模式,观察者模式,这里我无法讲述观察者模式的理论或者是用UML画类图等等,只想就这个项目,说说该如何运用观察者模式。观察者模式观察者模式举例以本项目为基础,结合个人理解,观察者模式具有下面的定义 观察的对象只有一个,而观察者有多个,每个观察者在对观察对象进行观察以后,可以执行不同的操作。这里就可以简单的举两个观察者的例子,最基本的例子就是如何对程序进行树原创 2017-10-31 21:50:20 · 448 阅读 · 0 评论 -
如何lower基本块开头的PHI函数
问题背景最近面试一家静态分析的公司,感觉面试官问的问题非常具有代表性,问的都是《编译原理》里面的知识,并且进行扩展,其中就有一个问题,当时我就很懵逼,即如何对phi函数进行lower。what is “Lower”?简单来说,lower是一个对操作和类型进行合法化的过程,即如果芯片中的寄存器的位数是8位,而你要进行16位的运算,那么就要对两个加法操作数进行拆分,变成两个8位的相加,并分别保存到结果的原创 2017-10-13 11:53:16 · 887 阅读 · 1 评论 -
用Scheme解释器项目来了解Java(二)
本章简介本章主要介绍SchemeToken类的子类SchemeList,这个类是所有复杂类的父类,所有的SchemeList的子类包括自身都具有用()包含的结构,比如(+ 1 2 3)(map + '(1 2 3) '(2 3 4))类的设计类图看起来很复杂,下面我会一一介绍每个类的作用子类介绍这里为了展现子类中的每个元素所对应的成员变量,我就用数学公式表示,不用代码表示了,还未实现的先不进行列举原创 2017-10-30 15:59:10 · 482 阅读 · 0 评论 -
用Scheme解释器项目来了解Java(一)
本章简介本章主要介绍简答的scheme语言的语法,还有简单scheme的token所对应的类。简单介绍scheme语言有两篇ibm的文章我觉得介绍的很详细,这里我贴出来 scheme语言概要(上) scheme语言概要(下) 希望大家能在看本篇博客的时候把这两篇介绍scheme语言的语法看一下,因为我自认为写不出这么好的入门博客了。类的设计类图 从上面这张图片我们可以看出,所有的scheme原创 2017-10-30 11:19:17 · 1950 阅读 · 0 评论 -
对于上一篇文章中的Rewrite Rules的详细分析
问题背景没有背景,这篇文章是对上一篇文章从LLVM的CodeGen角度思考PIC16中的常量数组生成过程中的Rewrite Rules的分析。详细分析过程分析表达式c = arr[1] * a * e + d + f / g整个表达式对应的语法树如下 我们可以使用逆拓扑序对这个DAG图进行遍历,如果遇到了算数运算操作,就进行M阶树的构造,即不断地向上进行节点的汇集操作。如下,分别展示出第一步原创 2017-10-03 16:50:31 · 478 阅读 · 0 评论 -
对于PIC16芯片中有符号扩展的优化
在做毕业设计的时候发现了一个奇妙的位运算,可以在低级芯片上实现有符号扩展操作的窥孔优化。原创 2018-05-28 18:44:24 · 742 阅读 · 1 评论