多次 LLVM 通过单次调用
Multiple LLVM passes with single call
一般来说,如果我将两个 LLVM pass 放入单个命令行调用中,就像这样...
$(LLVM_HOME)opt -my-pass -another-pass < foo1.bc > foo2.bc
...这个是不是定义成和运行一模一样的连续两次通过,多了一个中间文件,像这样...
$(LLVM_HOME)opt -my-pass < foo1.bc > foo11.bc
$(LLVM_HOME)opt -another-pass < foo11.bc > foo2.bc
...或者这两个过程是否以某种方式同时执行?
如果这两个过程是转换过程,比如-simplifycfg
和-licm
,那么是的,你可以认为两者之间有一个中间文件和运行命令你建议。
然而,也存在分析通道,如-aa
用于别名分析。这些 不会 像您描述的那样工作,因为它们不按摩 IR,它们只是为按摩 IR 提供信息(例如 -licm
)。
因此,opt -aa -licm
不等同于 opt -aa
后接 opt -licm
。
一般来说,如果我将两个 LLVM pass 放入单个命令行调用中,就像这样...
$(LLVM_HOME)opt -my-pass -another-pass < foo1.bc > foo2.bc
...这个是不是定义成和运行一模一样的连续两次通过,多了一个中间文件,像这样...
$(LLVM_HOME)opt -my-pass < foo1.bc > foo11.bc
$(LLVM_HOME)opt -another-pass < foo11.bc > foo2.bc
...或者这两个过程是否以某种方式同时执行?
如果这两个过程是转换过程,比如-simplifycfg
和-licm
,那么是的,你可以认为两者之间有一个中间文件和运行命令你建议。
然而,也存在分析通道,如-aa
用于别名分析。这些 不会 像您描述的那样工作,因为它们不按摩 IR,它们只是为按摩 IR 提供信息(例如 -licm
)。
因此,opt -aa -licm
不等同于 opt -aa
后接 opt -licm
。