<div dir="ltr"><div>Unless mem2reg does something other than my understanding of it, I can't see why any pass would "require" that... It is not guaranteed to do anything to any particular piece of code, so relying on it seems very unreliable, I would think. <br><br>--<br></div>Mats<br></div><div class="gmail_extra"><br><div class="gmail_quote">On 22 March 2016 at 04:32, Kevin Hu via llvm-dev <span dir="ltr"><<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
<span class=""><br>
> Is there any way that I can mention mem2reg (PromotePass) pass as a<br>
> pre-requisite in my own pass's implementation?<br>
<br>
</span>I think you can consider overriding the Pass::getAnalysisUsage(AnalysisUsage &)<br>
method. Described as follows in manual:<br>
<br>
<a href="http://www.llvm.org/docs/doxygen/html/classllvm_1_1Pass.html#a048082a5be9ae0d8901ea64de59e5c8f" rel="noreferrer" target="_blank">http://www.llvm.org/docs/doxygen/html/classllvm_1_1Pass.html#a048082a5be9ae0d8901ea64de59e5c8f</a><br>
<br>
In your own pass in method getAnalysisUsage(Analysis &AU), you can add required<br>
pass by:<br>
<br>
AU.addRequired<PassName>();<br>
<br>
And get the analysis from the pass:<br>
<br>
PassName &P = getAnalysis<PassName>();<br>
<br>
See:<br>
<br>
<a href="http://www.llvm.org/docs/doxygen/html/classllvm_1_1Pass.html#ab78af013d3a11515403da8517f8f3d4a" rel="noreferrer" target="_blank">http://www.llvm.org/docs/doxygen/html/classllvm_1_1Pass.html#ab78af013d3a11515403da8517f8f3d4a</a><br>
<br>
Remember to include the necessary header files. This is a way of making sure your<br>
pass always rely on the other passes you want.<br>
<br>
BTW I also have a question for the mailing list, is it acceptable to allow an analysis<br>
pass to depend on a transformation pass (like -mem2reg pass)? Is this acceptable so long<br>
as it doesn't cause loop dependencies?<br>
<br>
<br>
Regards,<br>
Kevin<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
On Mon, Mar 21, 2016 at 09:30:32PM -0400, Syed Rafiul Hussain via llvm-dev wrote:<br>
> I have used the following command for my pass (without -mem2reg):<br>
><br>
> clang -Xclang -load -Xclang MYPASS.so -c ../../tests/test1.c<br>
><br>
><br>
> For mem2reg, I tried the following:<br>
><br>
> clang -mllvm -mem2reg -Xclang -load -Xclang MYPASS.so -c ../../tests/test1.c<br>
><br>
><br>
><br>
><br>
> On Mon, Mar 21, 2016 at 9:26 PM, Mehdi Amini <<a href="mailto:mehdi.amini@apple.com">mehdi.amini@apple.com</a>> wrote:<br>
> ><br>
> >> On Mar 21, 2016, at 6:23 PM, Syed Rafiul Hussain <<a href="mailto:rafiul1906@gmail.com">rafiul1906@gmail.com</a>> wrote:<br>
> >><br>
> >> I have my own llvm pass which requires mem2reg.  It worked fine with<br>
> >> opt. However, I was trying to make it work with clang as I needed it<br>
> >> to run some spec cpu benchmarks.<br>
> >><br>
> >> Is there any way that I can mention mem2reg (PromotePass) pass as a<br>
> >> pre-requisite in my own pass's implementation?<br>
> ><br>
> > How are you inserting your pass in the pipeline setup by clang?<br>
> > You should be able to insert mem2reg before the same way.<br>
> > Also mem2reg is ran by clang when optimizations are enabled, depending on what your pass is doing it may be a matter of inserting it at the right place.<br>
> ><br>
> > --<br>
> > Mehdi<br>
> ><br>
> ><br>
> >><br>
> >><br>
> >> On Mon, Mar 21, 2016 at 9:01 PM, Mehdi Amini <<a href="mailto:mehdi.amini@apple.com">mehdi.amini@apple.com</a>> wrote:<br>
> >>> Hi,<br>
> >>><br>
> >>> You can't schedule passes from the command line using clang, only `opt` has this ability (AFAIK).<br>
> >>><br>
> >>> If you tell us what is your use-case, we may be able to point you to an alternative solution.<br>
> >>><br>
> >>> --<br>
> >>> Mehdi<br>
> >>><br>
> >>>> On Mar 21, 2016, at 5:52 PM, Syed Rafiul Hussain via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br>
> >>>><br>
> >>>> Hi,<br>
> >>>><br>
> >>>> I was trying to pass llvm option -mem2reg to clang using -mllvm and I<br>
> >>>> found the following error:<br>
> >>>><br>
> >>>> clang (LLVM option parsing): Unknown command line argument '-mem2reg'.<br>
> >>>> Try: 'clang (LLVM option parsing) -help'<br>
> >>>> clang (LLVM option parsing): Did you mean '-debug'?<br>
> >>>><br>
> >>>> I would appreciate if anyone could help me.<br>
> >>>><br>
> >>>> --<br>
> >>>> Syed Rafiul Hussain<br>
> >>>> _______________________________________________<br>
> >>>> LLVM Developers mailing list<br>
> >>>> <a href="mailto:llvm-dev@lists.llvm.org">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/mailman/listinfo/llvm-dev</a><br>
> >>><br>
> >><br>
> >><br>
> >><br>
> >> --<br>
> >> Rafi<br>
> ><br>
><br>
><br>
><br>
> --<br>
> Rafi<br>
> _______________________________________________<br>
> LLVM Developers mailing list<br>
> <a href="mailto:llvm-dev@lists.llvm.org">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/mailman/listinfo/llvm-dev</a><br>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org">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/mailman/listinfo/llvm-dev</a><br>
</div></div></blockquote></div><br></div>