<html><head></head><body><div class="ydpbcc23031yahoo-style-wrap" style="font-family:verdana, helvetica, sans-serif;font-size:10px;"><div><div dir="ltr" data-setdir="false">Hi Lorenzo,</div><div dir="ltr" data-setdir="false"><br></div><div dir="ltr" data-setdir="false">Sorry for the late answer.</div><div dir="ltr" data-setdir="false"><br></div><div dir="ltr" data-setdir="false">I am loading LLVMHello.so in the command, but, as I was explaining to Andrzej in the previous mail, I copy pasted in the mail another command, from the source article, which uses dummypass. I also registered the Hello pass. There is no error or warning when executing the opt load command, but it seems like it is doing some processing (maybe in infinite loop) because the command does not finish execution. It is strange though that the command is not displaying nothing, even though there is a print at the very beginning of the runOnModule function.</div><div dir="ltr" data-setdir="false"><br></div><div dir="ltr" data-setdir="false">This is the structure of my pass:</div><div dir="ltr" data-setdir="false"><br></div><div dir="ltr" data-setdir="false"><div><div style="color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Droid Sans Mono, monospace, monospace, Droid Sans Fallback; font-weight: normal; font-size: 14px; line-height: 19px; white-space: pre-wrap;"><div><span style="color: #569cd6;">class</span><span style="color: #d4d4d4;"> </span><span style="color: #4ec9b0;">Hello</span><span style="color: #d4d4d4;"> : </span><span style="color: #569cd6;">public</span><span style="color: #d4d4d4;"> </span><span style="color: #4ec9b0;">ModulePass</span><span style="color: #d4d4d4;"> {</span></div><div><span style="color: #569cd6;">public:</span></div><div><span style="color: #d4d4d4;">  </span><span style="color: #569cd6;">static</span><span style="color: #d4d4d4;"> </span><span style="color: #569cd6;">char</span><span style="color: #d4d4d4;"> ID;</span><span style="color: #6a9955;"></span></div><div><span style="color: #d4d4d4;">  </span></div><div><span style="color: #d4d4d4;">  </span><span style="color: #dcdcaa;">Hello</span><span style="color: #d4d4d4;">() : </span><span style="color: #dcdcaa;">ModulePass</span><span style="color: #d4d4d4;">(ID) {</span></div><div><span style="color: #d4d4d4;">  }</span></div><br><div><span style="color: #d4d4d4;">  </span><span style="color: #569cd6;">bool</span><span style="color: #d4d4d4;"> </span><span style="color: #dcdcaa;">runOnModule</span><span style="color: #d4d4d4;">(Module </span><span style="color: #d4d4d4;">&</span><span style="color: #d4d4d4;">M) </span><span style="color: #569cd6;">override</span><span style="color: #d4d4d4;">;</span></div><br><div><span style="color: #d4d4d4;">  </span><span style="color: #569cd6;">void</span><span style="color: #d4d4d4;"> </span><span style="color: #dcdcaa;">getAnalysisUsage</span><span style="color: #d4d4d4;">(AnalysisUsage </span><span style="color: #d4d4d4;">&</span><span style="color: #d4d4d4;">AU) </span><span style="color: #569cd6;">const</span><span style="color: #d4d4d4;"> </span><span style="color: #569cd6;">override</span><span style="color: #d4d4d4;"> {</span></div><div><span style="color: #d4d4d4;">    </span><span style="color: #dcdcaa;">getAnalysisUsage</span><span style="color: #d4d4d4;">(AU);</span></div><div><span style="color: #d4d4d4;">  }</span></div></div></div><div><br></div><div>...<br></div></div><div dir="ltr" data-setdir="false"><br></div><div dir="ltr" data-setdir="false"><div><div style="color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Droid Sans Mono, monospace, monospace, Droid Sans Fallback; font-weight: normal; font-size: 14px; line-height: 19px; white-space: pre-wrap;"><div><span style="color: #569cd6;">static</span><span style="color: #d4d4d4;"> RegisterPass</span><span style="color: #d4d4d4;"><</span><span style="color: #d4d4d4;">Hello</span><span style="color: #d4d4d4;">></span><span style="color: #d4d4d4;"> </span><span style="color: #dcdcaa;">X</span><span style="color: #d4d4d4;">(</span><span style="color: #ce9178;">"hello"</span><span style="color: #d4d4d4;">, </span><span style="color: #ce9178;">"Hello World Pass"</span><span style="color: #d4d4d4;">,</span></div><div><span style="color: #d4d4d4;">                             </span><span style="color: #569cd6;">false</span><span style="color: #d4d4d4;"> </span><span style="color: #6a9955;">/* Only looks at CFG */</span><span style="color: #d4d4d4;">,</span></div><div><span style="color: #d4d4d4;">                             </span><span style="color: #569cd6;">false</span><span style="color: #d4d4d4;"> </span><span style="color: #6a9955;">/* Analysis Pass */</span><span style="color: #d4d4d4;">);</span></div><br><div><span style="color: #569cd6;">static</span><span style="color: #d4d4d4;"> RegisterStandardPasses </span><span style="color: #dcdcaa;">Y</span><span style="color: #d4d4d4;">(</span></div><div><span style="color: #d4d4d4;">    PassManagerBuilder::EP_EarlyAsPossible,</span></div><div><span style="color: #d4d4d4;">    [](</span><span style="color: #569cd6;">const</span><span style="color: #d4d4d4;"> PassManagerBuilder </span><span style="color: #d4d4d4;">&</span><span style="color: #d4d4d4;">Builder,</span></div><div><span style="color: #d4d4d4;">       legacy::PassManagerBase </span><span style="color: #d4d4d4;">&</span><span style="color: #d4d4d4;">PM) { PM.</span><span style="color: #dcdcaa;">add</span><span style="color: #d4d4d4;">(</span><span style="color: #c586c0;">new</span><span style="color: #d4d4d4;"> </span><span style="color: #dcdcaa;">Hello</span><span style="color: #d4d4d4;">()); });</span></div></div></div><div><br></div><div>...</div><div><br></div></div><div><div><div style="color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Droid Sans Mono, monospace, monospace, Droid Sans Fallback; font-weight: normal; font-size: 14px; line-height: 19px; white-space: pre-wrap;"><div><span style="color: #569cd6;">bool</span><span style="color: #d4d4d4;"> </span><span style="color: #dcdcaa;">Hello::runOnModule</span><span style="color: #d4d4d4;">(Module </span><span style="color: #d4d4d4;">&</span><span style="color: #d4d4d4;">M) {</span></div><div><span style="color: #d4d4d4;">  </span><span style="color: #dcdcaa;">errs</span><span style="color: #d4d4d4;">() </span><span style="color: #d4d4d4;"><<</span><span style="color: #d4d4d4;"> </span><span style="color: #ce9178;">"Start pass: "</span><span style="color: #d4d4d4;">;</span></div></div></div><br></div><div class="ydpbcc23031signature"><div style="font-family:verdana, helvetica, sans-serif;font-size:10px;"><div><br></div><div dir="ltr" data-setdir="false">Could you please help with any ideas?</div><div dir="ltr" data-setdir="false"><br></div><div dir="ltr" data-setdir="false">Thank you.</div><div dir="ltr" data-setdir="false">Kind regards,</div><div dir="ltr" data-setdir="false">Iulia Stirb<br></div><div><br></div></div></div></div>
        <div><br></div><div><br></div>
        
        </div><div id="ydpdbe42a30yahoo_quoted_0060109268" class="ydpdbe42a30yahoo_quoted">
            <div style="font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;color:#26282a;">
                
                <div>
                    On Thursday, September 19, 2019, 12:32:06 AM GMT+3, Lorenzo Casalino <lorenzo.casalino93@gmail.com> wrote:
                </div>
                <div><br></div>
                <div><br></div>
                <div><div id="ydpdbe42a30yiv3384221672"><div class="ydpdbe42a30yiv3384221672yqt6263616678" id="ydpdbe42a30yiv3384221672yqtfd78534"></div><div><div class="ydpdbe42a30yiv3384221672yqt6263616678" id="ydpdbe42a30yiv3384221672yqtfd31502">
    </div><blockquote type="cite"><div class="ydpdbe42a30yiv3384221672yqt6263616678" id="ydpdbe42a30yiv3384221672yqtfd07002">
      </div><div class="ydpdbe42a30yiv3384221672yahoo_quoted" id="ydpdbe42a30yiv3384221672yahoo_quoted_9469010984"><div class="ydpdbe42a30yiv3384221672yqt6263616678" id="ydpdbe42a30yiv3384221672yqtfd19915">
        </div><div style="font-size:13px;color:rgb(38, 40, 42);"><div class="ydpdbe42a30yiv3384221672yqt6263616678" id="ydpdbe42a30yiv3384221672yqtfd10429">
          </div><div><div class="ydpdbe42a30yiv3384221672yqt6263616678" id="ydpdbe42a30yiv3384221672yqtfd65730">
            </div><div dir="ltr"><div class="ydpdbe42a30yiv3384221672yqt6263616678" id="ydpdbe42a30yiv3384221672yqtfd74468"><tt>opt -load lib­dum­my­pass.so -dum­my­pass
                hel­lo.ll</tt></div><tt><br clear="none">
              </tt></div>
          </div>
        </div>
      </div>
    </blockquote>
    <tt><br clear="none">
    </tt><tt>
    </tt>
    <p><tt>Looks like you are loading a shared library different from
        "LLVMHello.so".</tt></p>
    <p><tt>did you change the name of the compilation unit from
        "Hello.cpp" into</tt><tt><br clear="none">
      </tt><tt>"dummypass.cpp"?</tt><tt><br clear="none">
      </tt></p>
    <p><tt><br clear="none">
      </tt></p>
    <p><tt>(As asked previously by Andrzej) did you register the dummy
        pass?</tt></p>
    <p><tt>> RegisterPass<DummyPass> X("dummypass",
        "whatever");</tt></p>
    <p><tt><br clear="none">
      </tt></p>
    <p><tt>Is any error/warning triggered when loading the library,
        executing "opt" or</tt><tt><br clear="none">
      </tt><tt>during compilation?</tt><tt><br clear="none">
      </tt></p>
    <p><tt><br clear="none">
      </tt></p>
    <p><tt>Could you attach the fragment containing the "DummyPass"?</tt><br clear="none">
    </p>
    <p><br clear="none">
    </p>
    <p><tt>Lorenzo</tt></p><div class="ydpdbe42a30yiv3384221672yqt6263616678" id="ydpdbe42a30yiv3384221672yqtfd99478"><br clear="none">
    </div><div class="ydpdbe42a30yiv3384221672yqt6263616678" id="ydpdbe42a30yiv3384221672yqtfd09331">
  </div></div></div></div>
            </div>
        </div></body></html>