hstk30 / hstk30.github.io

hstk30's Blog
Apache License 2.0
0 stars 0 forks source link

llvm 调试技巧总结 #7

Closed hstk30 closed 9 months ago

hstk30 commented 1 year ago
  1. 开启debug 信息:-mllvm -debugs
  2. 定位引起问题的pass:opt bisect: -mllvm -opt-bisect-limit=235
  3. -mllvm -print-before=<pass-name> -print-after=<pass-name> -print-after-all -print-before-all pass-name 在对应代码里找到,有时候是 DEBUG_TYPE,有时候是 XX_NAME
  4. 定位到pass后想跳过某个pass 查看IR差异:在对应pass实现文件里查找 cl::opt ,有的好找,有的不好找, 有的在option 能找到,默认会有no 前缀,添加对应选项
  5. 别名分析的一些选项: -disable-basic-aa -aa-trace
  6. gdb 的时候, 遇事不决 dump() 一下
  7. 比对不同版本差异,如果最新版本正确,通过git bisect 确定修复的commit
    $ git bisect start
    $ git bisect bad
    $ git bisect good <goodcommit>
$ git bisect start
$ git bisect good
$ git bisect bad <badcommit>

Yes: $ git bisect bad No: $ git bisect good

$ git bisect reset

-debug-only

-debug-pass=[Structure, Arguments]

hstk30 commented 1 year ago

Global Isel

-stop-before, -stop-after, -start-before, -start-after =[irtranslator, machine-scheduler, finalize-isel, legalizer, instruction-select, ...]

hstk30-hw commented 1 month ago

lto pgo 的调试