how to add createLowerSwitchPass to PassManager object?

My pass crashes on the callsite of runOnFunction() as it calls GetAnalysis to LazyValue internally.

FunctionPass* lower = createLowerSwitchPass();
lower->runOnFunction(F);

The crash log says: Assertion failed: (Resolver && “Pass has not been inserted into a PassManager object!”)

How do I get the PassManager object to add LowerSwitchPass? I can’t happen to find the object anywhere. Can the legacy pass manager run lower passes in llvm14? Alternatively, is there another method I can use to create LowerSwitchPass with the new PassManager?

Hi:
As the message suggests, you’ll need a PM for it.
Something like the following would do:

legacy::FunctionPassManager FPM(&M);;
FPM.add(createLowerSwitchPass());
FPM.run(Func)

Zhang

This is run on a function pass, specifically runOnFunction which only gives you current function &F.

Where do you get current module &M from? Can you even run a lower switch pass using the legacy pass manager system?

nvm, found it.

auto* CurrentModule = F.getParent();