如何使llvm中的opt调用我添加的llvm传递和内置传递

时间:2018-01-25 02:41:06

标签: compiler-construction compiler-optimization llvm-clang

当我阅读Adrian关于调用自定义LLVM传递的指令时,我感到困惑:

  1. 使用clang -c -emit-llvm code.c将每个源文件编译为bitcode。
  2. 使用opt -load mypass.so -mypass < code.bc > code_inst.bc
  3. 自行运行您的通行证
  4. 使用opt -O3 < code_inst.bc > code_opt.bc运行其余的标准优化。
  5. 使用llc将已优化的bitcode编译为程序集,然后使用您最喜欢的汇编程序和链接程序将其余部分转换为可执行文件。
  6. 为什么第3步必要?这是否意味着第2步只会调用&#34; maypass&#34;并省略所有其他系统默认通行证?

    如果是这样,有没有办法同时运行&#34; mypass&#34;并且所有系统默认值都在一个opt命令中传递?

1 个答案:

答案 0 :(得分:0)

根据我的实验,

  1. 我可以确认第2步只会调用&#34; mypass&#34;。

  2. 如果您使用

    opt -O3 -load mypass.so -mypass&lt; code_inst.bc&gt; code_opt.bc

  3. Opt将首先调用内置的pass,然后&#34; mypass&#34;。

    1. 如果您使用

      opt -load mypass.so -mypass -O3&lt; code_inst.bc&gt; code_opt.bc

    2. Opt将首先调用&#34; mypass&#34;,然后是内置的传递。

      总之,它与manual

      一致
        

      - {passname}

           

      opt提供了以任何顺序运行LLVM的任何优化或分析过程的能力。 -help选项列出了所有可用的传递。选项在命令行中出现的顺序是它们的执行顺序(在传递约束内)。

      特别是&#34; -O3&#34;可以被理解为一组预定义的通行证。