Search code examples
llvmllvm-clangllvm-ir

Apply LLVM pass to a specific basic block


Is it possible to apply LLVM transformation pass to a specific basic block, instead of the whole IR?

I know how to apply a pass to the whole IR: $ opt –S –instcombine test.ll –o out.ll

But there might be several basic blocks inside test.ll and I want to apply –instcombine to just one of them.


Solution

  • Generally, no. Some LLVM passes are written to work on whole modules, others on whole functions. Some are also safe to use for single basic blocks (more by chance than by design), but LLVM's pass interface deals with only the design unit (functions in case of function passes, modules in case of module passes). That is, function passes are given a function by the pass manager, and nothing else.