BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

ErLLVM——面向HiPE的LLVM后端

| 作者 臧秀涛 关注 2 他的粉丝 发布于 2014年3月27日. 估计阅读时间: 2 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

High Performance Erlang(HiPE)是面向Erlang的一个高性能原生代码编译器,而ErLLVM项目就是为了给HiPE提供多后端支持而设计的。ErLLVM使用了LLVM基础架构。

LLVM是一些模块化、可复用的编译器和工具链技术的集合,得到了Apple等公司的大力支持,比如目前Mac OS上默认的C/C++/Objective-C编译器Clang就是一个LLVM前端。为提高复用程度,LLVM采用了分阶段的设计方式。它将编译器分为前端、优化器和后端三个部分,定义好接口,然后分别设计应用于不同阶段的工具,这样对编程语言感兴趣的人就可以专注与前端,对优化感兴趣的人可以专注于中间的优化器部分,而对特定目标平台感兴趣的人只需要关注后端。ErLLVM正是利用了LLVM的这种优点,为多后端支持提供了方便。此外,LLVM的稳定性也早已得到社区的验证,所以HiPE可以可靠地依赖它。

ErLLVM目前支持AMD64和x86架构,对ARM的支持工作也正在进行之中。

下面我们简单地了解一下ErLLVM的架构。在采用LLVM之前,HiPE的架构如下图所示:

Icode被翻译为RTL(“register-transfer language”,一种类RISC的底层汇编语言),然后从RTL生成面向具体平台的机器语言。而ErLLVM就是在RTL之后插入了LLVM后端

RTL代码被翻译为LLVM汇编语言,翻译完成之后,生成的LLVM代码会被保存在一个文件中,之后就可以利用LLVM的工具链生成目标文件了。工具链的调用顺序可以用下图表示:

ErLLVM的网站上提供了一份安装说明@淘宝褚霸也专门撰写了一篇博客介绍ErLLVM的使用,感兴趣的读者可以参考。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT