将 LLVM pass 应用于特定的基本块

Apply LLVM pass to a specific basic block

是否可以将 LLVM 转换应用到特定的基本块,而不是整个 IR?

我知道如何将通行证应用于整个 IR: $ opt –S –instcombine test.ll –o out.ll

但是 test.ll 中可能有几个基本块,我只想将 –instcombine 应用于其中一个。

一般不会。一些 LLVM passes 被编写为在整个模块上工作,其他的则在整个函数上工作。有些也可以安全地用于单个基本块(更多的是偶然而不是设计),但是 LLVM 的传递接口只处理设计单元(函数传递情况下的功能,模块传递情况下的模块)。也就是说,函数传递由传递管理器赋予函数,仅此而已。