How to get Scalar Evolution information of a loop in a Function Pass (original) (raw)

Hi everyone,

I am writing a function pass where I need to know the tripcount of each loop. I try to get the ScalarEvolution using the following code:

unsigned getLoopTripcount(llvm::Function &F, llvm::LoopInfo &LI, llvm::Loop *loop)
{
  llvm::ScalarEvolutionWrapperPass sewp = llvm::ScalarEvolutionWrapperPass();
  llvm::ScalarEvolution &se = sewp.getSE();
  unsigned tripcount = se.getSmallConstantTripCount(loop);
  return tripcount;
}

Which leads to a segmentation fault.
I also tried a bunch of stuff like:

llvm::ScalarEvolution *SE = &FAM.getResult<llvm::ScalarEvolution>(F);

which does not even compile :slight_smile: .

Can someone give me some pointers on what I am getting wrong?
Thanks

Found it. Looks like I was close. This works:

llvm::ScalarEvolution &SE = FAM.getResult<llvm::ScalarEvolutionAnalysis(F);
unsigned tripcount = SE.getSmallConstantTripCount(loop);