摘要: 本节介绍一段对LLVM 的Function进行遍历的过程,遍历过程中统计每个Function内的BasicBlock数目和指令数目,同时统计所有的operand出现的次数。 因为涉及到IR的东西,UserManual手册为: https://llvm.org/docs/LangRef.html 。真 阅读全文
posted @ 2021-03-26 01:03 转换无极限 阅读(711) 评论(0) 推荐(0) 编辑
摘要: 这一节介绍一点getelementptr指令的处理。 https://llvm.org/docs/LangRef.html#getelementptr-instruction 这条指令一般用来获取指向结构体指针和指向数组元素的指针操作。语法如下: <result> = getelementptr < 阅读全文
posted @ 2021-03-26 00:39 转换无极限 阅读(436) 评论(0) 推荐(0) 编辑
摘要: 这里介绍LLVM或者所有编译器中非常重要的一种结构,def-use链,或者叫DU-chain。说是DU,实际上除了def-use,还有use-def的存在。 通常,我们可能有Value类的一个实例,并且我们想确定哪些使用者使用了该Value。我们将具有特定值的所有用户的列表称为def-use链。 另 阅读全文
posted @ 2021-03-26 00:38 转换无极限 阅读(1495) 评论(0) 推荐(0) 编辑
摘要: 本节将介绍一种特殊的IR指令——PHINode。 关于PHI,首先需要介绍SSA静态单赋值https://en.wikipedia.org/wiki/Static_single_assignment_form 为了实现SSA,需要将类似的branch语句: int max(int a, int b) 阅读全文
posted @ 2021-03-26 00:36 转换无极限 阅读(242) 评论(0) 推荐(0) 编辑
摘要: LLVM Pass框架是LLVM系统的重要组成部分,因为LLVM Pass负责LLVM编译器绝大部分的工作。 构成编译器的Pass执行各种转换和优化,在转换中使用的前边Pass的分析结果。所有的类实现都必须继承至Pass基类,一般来说可供使用的Pass类型一般包括 ModulePass , Call 阅读全文
posted @ 2021-03-26 00:34 转换无极限 阅读(1093) 评论(0) 推荐(0) 编辑