作者shane87123 (阳光大肥宅)
看板CompilerDev
标题gcc, LLVM的新前後端开发难易度
时间Thu Apr 14 16:24:54 2022
本篇可能会有很多有关编译器的特性的的地方,
如果描述有错,还请大家鞭小力一点><
LLVM 迷人的地方就是他很多东西都模组化,是一个高度模组化的专案
简单来说
近期我发现 LLVM 某个 IR 优化对特定程式会有优化失败的问题,(效能变差)
因此自己额外写一个演算法加在这个优化里面,避免优化失败。
而这个优化失败的问题在 gcc 上不会出现(当然,两者的优化逻辑应该不太一样)
因此被老板问到:要解决这问题为什麽不用 gcc 就好?
这个问题瞬间考倒我XDD
我的回应是:「因为 LLVM 高度模组化的关系,开发者开发新的前端或後端时,
只需专注在串接前端->优化器或优化器->後端即可,中间优化的过程不用那麽费心力开发
。
该 IR 优化产生的优化失败若解决掉,即可解决所有高阶语言的类似的程式码从前端编译
到所有後端
的效能变差的问题;若往後有开发者开发新的後端前端,可不必考虑这个优化失败的问题
。
gcc 是单向编译器,开发上比较繁重,因此在开发过程中,皆须考量有可能会有这优化失
败
的问题产生。」
其实我一直以为 gcc 的编译流程是这样:
高阶语言
|
|
target-dependent IR
|
|
Optimization
|
|
assembly code
...
(请原谅我的无知)
不过我後来 survey 後,gcc 的编译流程应该是这样:
高阶语言
|
|
target-independent IR (GIMPLE)
|
|
Optimization
|
|
SSA
|
|
RTL (target-dependent ?)
|
|
assembly code
好像其实模组性也很高,假如我今天只开发前端,
只需做掉高阶语言->GIMPLE 这段就好
虽然我不是很了解 gcc 但乍看之下好像是这样,
原本以为 gcc 是一对一进行编译(C->X86 C->MIPS...),不过似乎也不是
可能我观念上有错误,还请版友鞭小力一点QQ
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 49.216.20.240 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/CompilerDev/M.1649924696.A.973.html
1F:推 Dracarys: 我今天被问为何苹果要用lldb,我回答license==04/15 01:02
2F:推 VF84: 要我回答你老板,我大概会回「青菜萝卜各有所好,你爱用 gcc04/15 22:20
3F:→ VF84: 就去用阿」之类的04/15 22:20
学术上,我不知道这这个问题值不值得思考并写进去相关研究XD
※ 编辑: shane87123 (114.43.60.48 台湾), 04/16/2022 00:42:43
4F:→ Lipraxde: 文件、社群活跃人数也有影响吧? 04/16 11:37
5F:推 VF84: 废渣如我连 gcc 都建不起来...QQ 04/16 15:12