使用单个调用进行多个LLVM传递

使用单个调用进行多个LLVM传递,llvm,Llvm,一般来说,如果我在一个命令行调用中放入两个LLVM过程,就像这样 $(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 $(LLVM_HOME)选择-我的通行证-另一个通行证foo2.bc …这是否定

一般来说,如果我在一个命令行调用中放入两个LLVM过程,就像这样

$(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
$(LLVM_HOME)选择-我的通行证-另一个通行证foo2.bc
…这是否定义为与连续运行两个过程完全相同,并带有一个额外的中间文件,如下所示

$(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
$(LLVM_HOME)opt-my passfoo11.bc
$(LLVM_HOME)opt-另一个通行证foo2.bc

…或者这两个过程是以某种方式同时执行的?

如果这两个过程是转换过程,如
-simplifycfg
-licm
,那么是的,您可以认为这两个过程之间存在一个中间文件,并按照您的建议运行命令

但是,也存在分析过程,如别名分析的
-aa
。这些不会像您所描述的那样工作,因为它们不会按摩IR,它们只会向传递信息(例如
-licm


因此,
opt-aa-licm
并不等同于
opt-aa
后面紧跟着
opt-licm

它们在内部通常是不同的。您可以使用
--debug pass=Structure
查看到底发生了什么。有关更多详细信息,请参阅。