这个演讲者写了个python to c++的程序 pythran,牛逼阿 这个演讲是pythran生成代码有个bug,抓bug的故事,涉及到llvm

演示了一个简单的add代码,性能差很多,编译器问题(怎么定界的这么快)

首先找最小复现代码片 c的实现是向量化的,但是llvm生成的ir没有向量化

用clang的 -Rpass-missed=loop-vectoreze -Rpass-analysis=loop-vectorize

分析得到没有循环优化

然后看llvm的代码,编译debug版本看打印

PHI node检测有问题

看checker的条件

inttoptr <=> ptrtoint 逻辑有问题?

这里我就跟不太上了,llvm不了解。得看一下llvm相关的东西

作者做了个去掉的patch,验证,结果向量化了

深层问题 SROA 已经提bug修了

回到标题,零成本抽象是牛逼的,但是需要编译器来达成这个优化

编译器有没有保证的最低程度优化?没。所以需要了解这个东西,了解优化程度 作者的建议就是看ir结果,对比,跑omit, analyze,以及了解c 的llvm ir。简单

ref

  1. https://github.com/serge-sans-paille/pythran
  2. https://www.bilibili.com/video/BV1pJ411w7kh?p=154
  3. PPT没找到

todo

看看llvm的资料