一起学习LLVM(四):学习llvm-cbe
近来学习一下LLVM-cbe这个后端对于ir解析成c的一个框架,很有意思。
github源码:https://github.com/buzhishishi/llvm-cbe
一、安装注意事项:
由于要编译C到ir的过程,所以要安装clang,这里注意由于后面要执行make llvm-cbe,要在llvm 下面的CmakeList.txt中添加这个任务:
option (LLVM_BUILD_EXTERNAL_LLVM_CBE
"Build llvm-cbe as an external project." ON)
其他的步骤按照链接中所说的去安装就可以了。
二、原理分析:
大致原理是根据ir的结构去解析,然后进行等价的翻译为C语言的语法格式。
2.1数据类型:
2.2对应的Array、Vector的名字:
2.3对应的比较语句的转换:
等等
三、结果分析:
3.1实验分析
转换前:
转换后:
转换完以后:以大量的goto语句存在。
3.2已知问题:
1.可能是由于clang版本问题,解析格式有问题:
2.对于太复杂的C编译成的文件估计2c会有问题:
一种为变量的定义问题以及对于一些类型的识别。
但是能做到这一步已经很厉害了,可以在此基础上更新,修复。
四、总结:
缺点是只是支持对于C语言,但是要支持C++确实是很难,毕竟C++在C的基础上扩展那么多。
优点就是XX2IR,IR2c等等,与clang LLC -macrh=cpp 这种以API的格式来表现完全不一样。这个是真正的转为C语言。当然还有一个很大用途就是可以增加安全保护的轻量化。
一起学习LLVM(四):学习llvm-cbe相关推荐
- Java IO流学习总结四:缓冲流-BufferedReader、BufferedWriter
Java IO流学习总结四:缓冲流-BufferedReader.BufferedWriter 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/det ...
- 强化学习(四) - 蒙特卡洛方法(Monte Carlo Methods)及实例
强化学习(四) - 蒙特卡洛方法(Monte Carlo Methods)及实例 4. 蒙特卡洛方法 4.1 蒙特卡洛预测 例4.1:Blackjack(21点) 4.2 动作价值的蒙特卡洛估计 4. ...
- Maven学习总结(四)——Maven核心概念
2019独角兽企业重金招聘Python工程师标准>>> Maven学习总结(四)--Maven核心概念 一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平 ...
- 【转】MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突
[转]MyBatis学习总结(四)--解决字段名与实体类属性名不相同的冲突 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体 ...
- C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻
前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...
- 四、Android学习第四天——JAVA基础回顾(转)
(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 四.Android学习第四天--JAVA基础回顾 这才学习Android的 ...
- IOS学习笔记(四)之UITextField和UITextView控件学习
IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...
- RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决)
RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决) 参考文章: (1)RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决) (2)https://www.cnblogs. ...
- JSP学习笔记(四十九):抛弃POI,使用iText生成Word文档
POI操作excel的确很优秀,操作word的功能却不敢令人恭维.我们可以利用iText生成rtf文档,扩展名使用doc即可. 使用iText生成rtf,除了iText的包外,还需要额外的一个支持rt ...
- MVC学习(四)几种分页的实现(3)
在这篇MVC学习(四)几种分页的实现(2)博文中,根据URL中传入的两个参数(页码数,首页.上一页.下一页.末页的标记符)来获得对应的分页数据, 只是传入的参数太多,调用起来不太方便(标记符不能够写错 ...
最新文章
- 【学习笔记】JAVA IO与NIO(new IO)的对比与不同IO模型的理解
- 【LeetCode】200. 岛屿的个数
- python读取文件数据堆栈溢出的原因_堆栈溢出一般是什么原因?
- 必须知道的app测试与web测试的区别
- 每秒570000的写入,MySQL如何实现?
- 用openswan 2.4.7构建ipsec ×××笔记
- 哈夫曼树【最优二叉树】【Huffman】
- python 使用 ipx协议_肝了三天,万字长文教你玩转 tcpdump,从此抓包不用愁
- Grasshopper Essential Training Grasshopper基础教程 Lynda课程中文字幕
- Hbase与Hadoop版本对应
- 海尔跨越福特、丰田制造标杆主导世界制造业国际标准
- html里的底部c怎么打出来,版权所属符号-网站底部版权符号怎么打出来
- 计算机中插入背景图片怎样操作,word插入背景图片_Word 2007中插入图片的背景设置妙招_word中插入背景图片_word插入图片做背景...
- FPGA仿锆石代码风格组合电路时序电路严格分开之(一)8通道16位AD采集
- 英文论文评审意见_小弟第一篇英文论文审稿意见求助 - 论文投稿 - 小木虫 - 学术 科研 互动社区...
- Will you pity a beggar ? What do you think of them ?
- Java学习视频资料
- reduceByKeyAndWindow基于滑动窗口的热点搜索词实时统计(Scala版本)
- PADS 找不到FileDir INI文件条目指定的目录
- windows 下 MAC地址绑定
热门文章
- 还在手工制作APP规范文档?这款设计神器你不容错过
- WIN7系统的桌面突然不好使了,右键没反应,桌面上所有的图标点击都没反应explorer
- 产品创业应该如何绕过陷阱
- 北京交通大学计算机科学与技术研究生,2019计算机考研北京交通大学计算机科学与技术专业简介...
- 【前端实例代码】Html5+css3+JavaScript创建在线播放架子鼓电子鼓演奏网页效果!前端开发网页设计基础入门教程!超简单~
- 什么是分布式?什么是系统单例模式/集群模式?
- element-ui上传excel验证
- otn与stn网络_OTN与波分的区别
- 给图片数据集批量改名字
- 通过shell脚本抽取MySQL实例信息