<div dir="ltr">Hi Bevin,<div><br></div><div>Thank you for your reply. Unfortunately, I was using EP_ModuleOptimizerEarly and I just realized that it is not early enough, since the FunctionPassManager does apply some basic optimization on the functions before any Module optimizations...</div><div><br></div><div>So there's no way to insert a Module pass earlier than ModuleOptimizerEarly? I will try to hack it as Björn pointed out then.</div><div><br></div><div>Thanks for your help,</div><div><br></div></div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">Son Tuan Vu</div></div></div>
<br><div class="gmail_quote">On Wed, Jun 13, 2018 at 4:01 PM, Bevin Hansson 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">
  
    
  
  <div text="#000000" bgcolor="#FFFFFF">
    <p>Hi,</p>
    <p>EP_EarlyAsPossible only works with FunctionPasses, yes. If you
      look at how it's used in PassManagerBuilder, it is only invoked
      from populateFunctionPassManager.</p>
    <p>The earliest you can add ModulePasses is with
      EP_ModuleOptimizerEarly. However, those passes are not added on
      O0. If the OptLevel is 0, you can instead add the passes to
      EP_EnabledOnOptLevel0.</p>
    <p>This might not be early enough for you, but those are the points
      that are available for module passes as far as I know.</p>
    <p>Regards,<br>
      Bevin<br>
    </p><div><div class="h5">
    <br>
    <div class="m_9071315347602471353moz-cite-prefix">On 2018-06-12 15:46, Son Tuan VU via
      llvm-dev wrote:<br>
    </div>
    </div></div><blockquote type="cite"><div><div class="h5">
      
      <div dir="ltr">Hello all,
        <div><br>
        </div>
        <div>I've followed the example in <a href="https://github.com/CompilerTeaching/SimplePass/blob/master/SimplePass.cc" target="_blank">https://github.com/<wbr>CompilerTeaching/SimplePass/<wbr>blob/master/SimplePass.cc</a>
          in order to create a custom pass.</div>
        <div><br>
        </div>
        <div>The pass needs to be added before any transformation, so I
          used EP_EarlyAsPossible extension point to register it. 
          Furthermore, I need to access to every GlobalVariable in the
          IR, so my pass has to be a ModulePass, like this:</div>
        <div><br>
        </div>
        <div>  struct MyPass : public ModulePass {</div>
        <div>     static char ID;<br>
        </div>
        <div>
          <div>     MyPass(): ModulePass(ID) {}</div>
        </div>
        <div>     virtual bool runOnModule(Module &M) {...}<br>
        </div>
        <div>  ...</div>
        <div>  }</div>
        <div><br>
        </div>
        <div>However, every time I try to access to the Module object M
          inside runOnModule(), clang just crashes.  Even a debug
          message like <b>outs() << M.getName() << '\n';</b> would
          cause a segfault. So am I doing something wrong, like
          EP_EarlyAsPossible is really not to be used with ModulePasses,
          or is this rather a bug?</div>
        <div><br>
        </div>
        <div>In case this is not a bug, what would be the best way to
          manipulate an IR Module as it is coming right out of the
          frontend?</div>
        <div><br>
        </div>
        <div>Thanks for your help,</div>
        <div><br>
        </div>
        <div>
          <div>
            <div class="m_9071315347602471353gmail_signature">
              <div dir="ltr">Son Tuan Vu</div>
            </div>
          </div>
        </div>
      </div>
      <br>
      <fieldset class="m_9071315347602471353mimeAttachmentHeader"></fieldset>
      <br>
      </div></div><pre>______________________________<wbr>_________________
LLVM Developers mailing list
<a class="m_9071315347602471353moz-txt-link-abbreviated" href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>
<a class="m_9071315347602471353moz-txt-link-freetext" href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-dev</a>
</pre>
    </blockquote>
    <br>
  </div>

<br>______________________________<wbr>_________________<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/<wbr>mailman/listinfo/llvm-dev</a><br>
<br></blockquote></div><br></div>