<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    Philip,<br>
    <br>
    It kinda depends on user expectations.<br>
    What do you really expect as a result of your compilation when you
    set -opt-bisect-limit=X?<br>
    Do you just get a resulting IR and scan for the bad pattern?<br>
    Then you dont care about pass sequences and do brute-force bisect.<br>
    <br>
    Do you expect to get a runnable code at the end and check for buggy
    run-time behavior?<br>
    Then you need to keep the passes that are required to produce
    runnable code.<br>
    In our Java JIT compiler we have quite a number of passes where we
    lower the semantics<br>
    to C level and those lowerings are absolutely required for the code
    to be runnable.<br>
    <br>
    regards,<br>
      Fedor.<br>
    <br>
    <div class="moz-cite-prefix">On 09/26/2018 08:47 PM, Philip Pfaffe
      wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:CAHe691Hre8yj8U4ncPpXn1zV5mHMMSkCHbhhjd6DmxknKXPeFg@mail.gmail.com">
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      <div dir="ltr">Hi Fedor,
        <div><br>
        </div>
        <div>can you make an example where a pass actually needs to
          opt-out? Because IMO, bisect should quite literally to
          DebugCounter-style skip every step in every ::run method's
          loop. Passes should not even be concerned with this.</div>
        <div><br>
        </div>
        <div>Cheers,</div>
        <div>Philip</div>
      </div>
      <br>
      <div class="gmail_quote">
        <div dir="ltr">On Wed, Sep 26, 2018 at 6:54 PM Fedor Sergeev via
          llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org"
            moz-do-not-send="true">llvm-dev@lists.llvm.org</a>>
          wrote:<br>
        </div>
        <blockquote class="gmail_quote" style="margin:0 0 0
          .8ex;border-left:1px #ccc solid;padding-left:1ex">Greetings!<br>
          <br>
          As the generic Pass Instrumentation framework for new pass
          manager is <br>
          finally *in*,<br>
          I'm glad to start the discussion on implementation of
          -opt-bisect <br>
          through that framework.<br>
          <br>
          As it has already been discovered while porting other features
          (namely, <br>
          -time-passes)<br>
          blindly copying the currently existing legacy implementation
          is most <br>
          likely not a perfect<br>
          way forward. Now is a chance to take a fresh look at the
          overall <br>
          approach and perhaps<br>
          do better, without the restrictions that legacy pass manager
          framework <br>
          imposed on<br>
          the implementation.<br>
          <br>
          Kind of a summary of what we have now:<br>
             - There is a single OptBisect object, requested through
          LLVMContext<br>
               (managed as ManagedStatic).<br>
          <br>
             - OptBisect is defined in lib/IR, but does use analyses,<br>
               which is a known layering issue<br>
          <br>
             - Pass hierarchy provides skipModule etc helper functions<br>
          <br>
             - Individual passes opt-in to OptBisect activities by
          manually <br>
          calling skip* helper functions<br>
               whenever appropriate<br>
          <br>
          With current state of new-pm PassInstrumentation potential
          OptBisect <br>
          implementation<br>
          will have the following properties/issues:<br>
             - OptBisect object that exists per compilation pipeline,
          managed <br>
          similar to PassBuilder/PassManagers<br>
               (which makes it more suitable for use in parallel
          compilations)<br>
          <br>
             - no more layering issues imposed by implementation since <br>
          instrumentations by design<br>
               can live anywhere - lib/Analysis, lib/Passes etc<br>
          <br>
             - since Codegen is still legacy-only we will have to make a
          joint <br>
          implementation that<br>
               provides a sequential passes numbering through both
          new-PM IR and <br>
          legacy Codegen pipelines<br>
          <br>
             - as of right now there is no mechanism for opt-in/opt-out,
          so it <br>
          needs to be designed/implemented<br>
               Here I would like to ask:<br>
                   - what would be preferable - opt-in or opt-out?<br>
          <br>
                   - with legacy implementation passes opt-in both for
          bisect and <br>
          attribute-optnone support at once.<br>
                     Do we need to follow that in new-pm implementation?<br>
          <br>
          Also, I would like to ask whether people see current user
          interface for <br>
          opt-bisect limiting?<br>
          Do we need better controls for more sophisticated bisection?<br>
          Basically I'm looking for any ideas on improving opt-bisect
          user <br>
          experience that might<br>
          affect design approaches we take on the initial
          implementation.<br>
          <br>
          regards,<br>
             Fedor.<br>
          <br>
          _______________________________________________<br>
          LLVM Developers mailing list<br>
          <a href="mailto:llvm-dev@lists.llvm.org" target="_blank"
            moz-do-not-send="true">llvm-dev@lists.llvm.org</a><br>
          <a
            href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev"
            rel="noreferrer" target="_blank" moz-do-not-send="true">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
        </blockquote>
      </div>
    </blockquote>
    <br>
  </body>
</html>