<div dir="ltr"><div>Thank You.</div><div><br></div><div>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.</div><div><br></div><div>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.</div><div><br></div><div><br></div><div><br></div><div>I tried writing following code. Could you please help me on this? What to modify here?</div><div><br></div><div><br></div><div><br></div><div><div>namespace {</div><div>struct mypass : public FunctionPass {</div><div>static char ID;</div><div><br></div><div>mypass() : FunctionPass(ID) {</div><div>}</div><div><br></div><div> virtual bool runOnFunction(Function &F)</div><div>        {</div><div>         </div><div>std::unique_ptr<ScopInfo> Result;</div><div>std::unique_ptr<ScopDetection> Result2;</div><div><br></div><div>auto &LI = getAnalysis<LoopInfoWrapperPass>().getLoopInfo();</div><div>  auto &RI = getAnalysis<RegionInfoPass>().getRegionInfo();</div><div>  auto &AA = getAnalysis<AAResultsWrapperPass>().getAAResults();</div><div>  auto &SE = getAnalysis<ScalarEvolutionWrapperPass>().getSE();</div><div>  auto &DT = getAnalysis<DominatorTreeWrapperPass>().getDomTree();</div><div>  Result2.reset(new ScopDetection(F, DT, SE, LI, RI, AA));</div><div><br></div><div> auto &SD2 = getAnalysis<polly::ScopDetectionWrapperPass>().getSD();</div><div>  auto &SE2 = getAnalysis<ScalarEvolutionWrapperPass>().getSE();</div><div>  auto &LI2 = getAnalysis<LoopInfoWrapperPass>().getLoopInfo();</div><div>  auto &AA2 = getAnalysis<AAResultsWrapperPass>().getAAResults();</div><div>  auto const &DL2 = F.getParent()->getDataLayout();</div><div>  auto &DT2 = getAnalysis<DominatorTreeWrapperPass>().getDomTree();</div><div>  auto &AC2 = getAnalysis<AssumptionCacheTracker>().getAssumptionCache(F);</div><div><br></div><div>  Result.reset(new ScopInfo{DL2, SD2, SE2, LI2, AA2, DT2, AC2});</div><div> </div><div>polly::DependenceInfoWrapperPass dp;</div><div><br></div><div>auto &SI = *getAnalysis<polly::ScopInfoWrapperPass>().getSI();</div><div><br></div><div>  for (auto &It : SI) {</div><div>    assert(It.second && "Invalid SCoP object!");</div><div>    dp.recomputeDependences(It.second.get(), polly::Dependences::AL_Access);</div><div>}</div><div>return false;</div><div>        }</div><div><br></div><div>        virtual void getAnalysisUsage(AnalysisUsage &AU) const</div><div>        {</div><div>  AU.addRequiredTransitive<polly::ScopInfoWrapperPass>();</div><div><br></div><div> AU.addRequired<LoopInfoWrapperPass>();</div><div>  AU.addRequired<RegionInfoPass>();</div><div>  AU.addRequired<DominatorTreeWrapperPass>();</div><div>  AU.addRequiredTransitive<ScalarEvolutionWrapperPass>();</div><div>  AU.addRequiredTransitive<polly::ScopDetectionWrapperPass>();</div><div>  AU.addRequired<AAResultsWrapperPass>();</div><div>  AU.addRequired<AssumptionCacheTracker>();</div><div>  // We also need AA and RegionInfo when we are verifying analysis.</div><div>  AU.setPreservesAll();</div><div>}</div><div>};</div><div>}</div><div>char mypass::ID = 0;</div><div>static RegisterPass<mypass> X("mypass", "mypass World Pass", false, false);</div></div><div><br></div><div><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jan 29, 2018 at 8:45 PM, Michael Kruse <span dir="ltr"><<a href="mailto:llvmdev@meinersbur.de" target="_blank">llvmdev@meinersbur.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">How do you compile the code? Within the Polly subdirectory using CMake?<br>
How do you run your pass. Using "opt -mypass inputfile.ll"?<br>
<br>
Michael<br>
<span><br>
2018-01-28 9:30 GMT-06:00 hameeza ahmed via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>>:<br>
> Hello,<br>
><br>
> I need to analyze dependencies in my llvm ir by using polly. i created a new<br>
> pass called mypass there i added polly dependency analysis pass but when i<br>
> execute this pass in gdb i get no data.<br>
><br>
> Why is that so?<br>
<br>
</span>Are you sure there is a SCoP detected in your input file? "opt mypass<br>
-debug" may give you some information.<br>
<span class="gmail-m_250784038297425070im gmail-m_250784038297425070HOEnZb"><br>
> My code is follows;<br>
><br>
><br>
><br>
> namespace {<br>
> struct mypass : public FunctionPass {<br>
> static char ID;<br>
><br>
> mypass() : FunctionPass(ID) {<br>
> }<br>
>  virtual bool runOnFunction(Function &F)<br>
>         {<br>
> polly::DependenceInfoWrapperPa<wbr>ss dp;<br>
><br>
> auto &SI = *getAnalysis<polly::ScopInfoWr<wbr>apperPass>().getSI();<br>
><br>
>   for (auto &It : SI) {<br>
>     assert(It.second && "Invalid SCoP object!");<br>
>     dp.recomputeDependences(It.se<wbr>cond.get(), polly::Dependences::AL_Access)<wbr>;<br>
> }<br>
> virtual void getAnalysisUsage(AnalysisUsage &AU) const<br>
>         {<br>
><br>
>   AU.addRequiredTransitive<poll<wbr>y::ScopInfoWrapperPass>();<br>
>  AU.setPreservesAll();<br>
>         }<br>
> };<br>
> }<br>
> char mypass::ID = 0;<br>
> static RegisterPass<mypass> X("mypass", "mypass World Pass", false, false);<br>
><br>
> please help. i have been trying a lot.<br>
><br>
</span><div class="gmail-m_250784038297425070HOEnZb"><div class="gmail-m_250784038297425070h5">> ______________________________<wbr>_________________<br>
> LLVM Developers mailing list<br>
> <a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-dev</a><br>
><br>
</div></div></blockquote></div><br></div></div>