[llvm-dev] Polly Dependency Analysis in MyPass

hameeza ahmed via llvm-dev llvm-dev at lists.llvm.org
Mon Jan 29 08:18:18 PST 2018


Thank You.

Actually i pass polly canonaclize IR to my new created polly pass called
"mypass". Mypass should first detect scops then find depedndencies as the
mechanism conventional approach.

Now i know how to write llvm pass here i am writing pass as loadable module
first afterwards i will integrate it with opt in the end.



I tried writing following code. Could you please help me on this? What to
modify here?



namespace {
struct mypass : public FunctionPass {
static char ID;

mypass() : FunctionPass(ID) {
}

 virtual bool runOnFunction(Function &F)
        {

std::unique_ptr<ScopInfo> Result;
std::unique_ptr<ScopDetection> Result2;

auto &LI = getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
  auto &RI = getAnalysis<RegionInfoPass>().getRegionInfo();
  auto &AA = getAnalysis<AAResultsWrapperPass>().getAAResults();
  auto &SE = getAnalysis<ScalarEvolutionWrapperPass>().getSE();
  auto &DT = getAnalysis<DominatorTreeWrapperPass>().getDomTree();
  Result2.reset(new ScopDetection(F, DT, SE, LI, RI, AA));

 auto &SD2 = getAnalysis<polly::ScopDetectionWrapperPass>().getSD();
  auto &SE2 = getAnalysis<ScalarEvolutionWrapperPass>().getSE();
  auto &LI2 = getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
  auto &AA2 = getAnalysis<AAResultsWrapperPass>().getAAResults();
  auto const &DL2 = F.getParent()->getDataLayout();
  auto &DT2 = getAnalysis<DominatorTreeWrapperPass>().getDomTree();
  auto &AC2 = getAnalysis<AssumptionCacheTracker>().getAssumptionCache(F);

  Result.reset(new ScopInfo{DL2, SD2, SE2, LI2, AA2, DT2, AC2});

polly::DependenceInfoWrapperPass dp;

auto &SI = *getAnalysis<polly::ScopInfoWrapperPass>().getSI();

  for (auto &It : SI) {
    assert(It.second && "Invalid SCoP object!");
    dp.recomputeDependences(It.second.get(), polly::Dependences::AL_Access);
}
return false;
        }

        virtual void getAnalysisUsage(AnalysisUsage &AU) const
        {
  AU.addRequiredTransitive<polly::ScopInfoWrapperPass>();

 AU.addRequired<LoopInfoWrapperPass>();
  AU.addRequired<RegionInfoPass>();
  AU.addRequired<DominatorTreeWrapperPass>();
  AU.addRequiredTransitive<ScalarEvolutionWrapperPass>();
  AU.addRequiredTransitive<polly::ScopDetectionWrapperPass>();
  AU.addRequired<AAResultsWrapperPass>();
  AU.addRequired<AssumptionCacheTracker>();
  // We also need AA and RegionInfo when we are verifying analysis.
  AU.setPreservesAll();
}
};
}
char mypass::ID = 0;
static RegisterPass<mypass> X("mypass", "mypass World Pass", false, false);



On Mon, Jan 29, 2018 at 8:45 PM, Michael Kruse <llvmdev at meinersbur.de>
wrote:

> How do you compile the code? Within the Polly subdirectory using CMake?
> How do you run your pass. Using "opt -mypass inputfile.ll"?
>
> Michael
>
> 2018-01-28 9:30 GMT-06:00 hameeza ahmed via llvm-dev <
> llvm-dev at lists.llvm.org>:
> > Hello,
> >
> > I need to analyze dependencies in my llvm ir by using polly. i created a
> new
> > pass called mypass there i added polly dependency analysis pass but when
> i
> > execute this pass in gdb i get no data.
> >
> > Why is that so?
>
> Are you sure there is a SCoP detected in your input file? "opt mypass
> -debug" may give you some information.
>
> > My code is follows;
> >
> >
> >
> > namespace {
> > struct mypass : public FunctionPass {
> > static char ID;
> >
> > mypass() : FunctionPass(ID) {
> > }
> >  virtual bool runOnFunction(Function &F)
> >         {
> > polly::DependenceInfoWrapperPass dp;
> >
> > auto &SI = *getAnalysis<polly::ScopInfoWrapperPass>().getSI();
> >
> >   for (auto &It : SI) {
> >     assert(It.second && "Invalid SCoP object!");
> >     dp.recomputeDependences(It.second.get(),
> polly::Dependences::AL_Access);
> > }
> > virtual void getAnalysisUsage(AnalysisUsage &AU) const
> >         {
> >
> >   AU.addRequiredTransitive<polly::ScopInfoWrapperPass>();
> >  AU.setPreservesAll();
> >         }
> > };
> > }
> > char mypass::ID = 0;
> > static RegisterPass<mypass> X("mypass", "mypass World Pass", false,
> false);
> >
> > please help. i have been trying a lot.
> >
> > _______________________________________________
> > LLVM Developers mailing list
> > llvm-dev at lists.llvm.org
> > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180129/c6be9f76/attachment.html>


More information about the llvm-dev mailing list