<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <p><br>
    </p>
    <div class="moz-cite-prefix">On 03/17/2017 04:30 PM, Mehdi Amini via
      llvm-dev wrote:<br>
    </div>
    <blockquote
      cite="mid:24233335-5AD0-4736-A2DE-60C65924A4B3@apple.com"
      type="cite">
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      <br class="">
      <div>
        <blockquote type="cite" class="">
          <div class="">On Mar 17, 2017, at 11:50 AM, Mikhail Zolotukhin
            via llvm-dev <<a moz-do-not-send="true"
              href="mailto:llvm-dev@lists.llvm.org" class="">llvm-dev@lists.llvm.org</a>>
            wrote:</div>
          <br class="Apple-interchange-newline">
          <div class="">
            <div style="word-wrap: break-word; -webkit-nbsp-mode: space;
              -webkit-line-break: after-white-space;" class="">
              <div dir="auto" style="word-wrap: break-word;
                -webkit-nbsp-mode: space; -webkit-line-break:
                after-white-space;" class="">
                <div dir="auto" style="word-wrap: break-word;
                  -webkit-nbsp-mode: space; -webkit-line-break:
                  after-white-space;" class="">
                  <div dir="auto" style="word-wrap: break-word;
                    -webkit-nbsp-mode: space; -webkit-line-break:
                    after-white-space;" class="">
                    <div class="">Hi,</div>
                    <div class=""><br class="">
                    </div>
                    <div class="">One of the most time-consuming passes
                      in LLVM middle-end is InstCombine (see e.g. [1]).
                      It is a very powerful pass capable of doing all
                      the crazy stuff, and new patterns are being
                      constantly introduced there. The problem is that
                      we often use it just as a clean-up pass: it's
                      scheduled 6 times in the current pass pipeline,
                      and each time it's invoked it checks all known
                      patterns. It sounds ok for O3, where we try to
                      squeeze as much performance as possible, but it is
                      too excessive for other opt-levels. InstCombine
                      has an ExpensiveCombines parameter to address that
                      - but I think it's underused at the moment.</div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </blockquote>
        <div><br class="">
        </div>
        <div>Yes, the “ExpensiveCombines” has been added recently (4.0?
          3.9?) but I believe has always been intended to be extended
          the way you’re doing it. So I support this effort :)</div>
      </div>
    </blockquote>
    <br>
    +1<br>
    <br>
    Also, did your profiling reveal why the other combines are
    expensive? Among other things, I'm curious if the expensive ones
    tend to spend a lot of time in ValueTracking (getting known bits and
    similar)?<br>
    <br>
     -Hal<br>
    <br>
    <blockquote
      cite="mid:24233335-5AD0-4736-A2DE-60C65924A4B3@apple.com"
      type="cite">
      <div>
        <div><br class="">
        </div>
        <div>CC: David for the general direction on InstCombine though.</div>
        <div><br class="">
        </div>
        <div><br class="">
        </div>
        <div>— </div>
        <div>Mehdi</div>
        <div><br class="">
        </div>
        <div><br class="">
        </div>
        <br class="">
        <blockquote type="cite" class="">
          <div class="">
            <div style="word-wrap: break-word; -webkit-nbsp-mode: space;
              -webkit-line-break: after-white-space;" class="">
              <div dir="auto" style="word-wrap: break-word;
                -webkit-nbsp-mode: space; -webkit-line-break:
                after-white-space;" class="">
                <div dir="auto" style="word-wrap: break-word;
                  -webkit-nbsp-mode: space; -webkit-line-break:
                  after-white-space;" class="">
                  <div dir="auto" style="word-wrap: break-word;
                    -webkit-nbsp-mode: space; -webkit-line-break:
                    after-white-space;" class="">
                    <div class=""><br class="">
                    </div>
                    <div class="">Trying to find out, which patterns are
                      important, and which are rare, I profiled clang
                      using CTMark and got the following coverage
                      report:</div>
                  </div>
                </div>
              </div>
            </div>
            <span
              id="cid:CEA3012D-A9E2-4318-AA90-C372667C70A9@apple.com"><InstCombine_covreport.html></span>
            <div style="word-wrap: break-word; -webkit-nbsp-mode: space;
              -webkit-line-break: after-white-space;" class="">
              <div dir="auto" style="word-wrap: break-word;
                -webkit-nbsp-mode: space; -webkit-line-break:
                after-white-space;" class="">
                <div dir="auto" style="word-wrap: break-word;
                  -webkit-nbsp-mode: space; -webkit-line-break:
                  after-white-space;" class="">
                  <div dir="auto" style="word-wrap: break-word;
                    -webkit-nbsp-mode: space; -webkit-line-break:
                    after-white-space;" class="">
                    <div class="">
                      <div class="">(beware, the file is ~6MB).</div>
                    </div>
                    <div class=""><br class="">
                    </div>
                    <div class="">Guided by this profile I moved some
                      patterns under the "if (ExpensiveCombines)" check,
                      which expectedly happened to be neutral for
                      runtime performance, but improved compile-time.
                      The testing results are below (measured for Os).</div>
                    <div class=""><br class="">
                    </div>
                    <div class="">
                      <table class="" style="font-family: Helvetica,
                        sans-serif; font-size: 9pt; border-spacing: 0px;
                        border: 1px solid black;">
                        <thead class=""><tr class="">
                            <th style="background-color: rgb(238, 238,
                              238); color: rgb(102, 102, 102); cursor:
                              default; text-align: center; font-family:
                              Verdana; padding: 5px 5px 5px 8px; width:
                              500px;" class="">Performance Improvements
                              - Compile Time</th>
                            <th style="background-color: rgb(238, 238,
                              238); color: rgb(102, 102, 102); cursor:
                              default; text-align: center; font-family:
                              Verdana; padding: 5px 5px 5px 8px;"
                              class="">Δ </th>
                            <th style="background-color: rgb(238, 238,
                              238); color: rgb(102, 102, 102); cursor:
                              default; text-align: center; font-family:
                              Verdana; padding: 5px 5px 5px 8px;"
                              class="">Previous</th>
                            <th style="background-color: rgb(238, 238,
                              238); color: rgb(102, 102, 102); cursor:
                              default; text-align: center; font-family:
                              Verdana; padding: 5px 5px 5px 8px;"
                              class="">Current</th>
                            <th style="background-color: rgb(238, 238,
                              238); color: rgb(102, 102, 102); cursor:
                              default; text-align: center; font-family:
                              Verdana; padding: 5px 5px 5px 8px;"
                              class="">σ </th>
                          </tr>
                        </thead><tbody class="searchable">
                          <tr class="">
                            <td class="benchmark-name" style="padding:
                              5px 5px 5px 8px;"><a
                                moz-do-not-send="true"
                                href="http://michaelsmacmini.local/perf/v4/nts/2/graph?test.15=2"
                                class="">CTMark/sqlite3/sqlite3</a></td>
                            <td style="padding: 5px 5px 5px 8px;
                              background-color: rgb(200, 255, 200);"
                              class="">-1.55%</td>
                            <td style="padding: 5px 5px 5px 8px;"
                              class="">6.8155</td>
                            <td style="padding: 5px 5px 5px 8px;"
                              class="">6.7102</td>
                            <td style="padding: 5px 5px 5px 8px;"
                              class="">0.0081</td>
                          </tr>
                          <tr class="">
                            <td class="benchmark-name" style="padding:
                              5px 5px 5px 8px;"><a
                                moz-do-not-send="true"
                                href="http://michaelsmacmini.local/perf/v4/nts/2/graph?test.1=2"
                                class="">CTMark/mafft/pairlocalalign</a></td>
                            <td style="padding: 5px 5px 5px 8px;
                              background-color: rgb(209, 255, 209);"
                              class="">-1.05%</td>
                            <td style="padding: 5px 5px 5px 8px;"
                              class="">8.0407</td>
                            <td style="padding: 5px 5px 5px 8px;"
                              class="">7.9559</td>
                            <td style="padding: 5px 5px 5px 8px;"
                              class="">0.0193</td>
                          </tr>
                          <tr class="">
                            <td class="benchmark-name" style="padding:
                              5px 5px 5px 8px;"><a
                                moz-do-not-send="true"
                                href="http://michaelsmacmini.local/perf/v4/nts/2/graph?test.7=2"
                                class="">CTMark/ClamAV/clamscan</a></td>
                            <td style="padding: 5px 5px 5px 8px;
                              background-color: rgb(210, 255, 210);"
                              class="">-1.02%</td>
                            <td style="padding: 5px 5px 5px 8px;"
                              class="">11.3893</td>
                            <td style="padding: 5px 5px 5px 8px;"
                              class="">11.2734</td>
                            <td style="padding: 5px 5px 5px 8px;"
                              class="">0.0081</td>
                          </tr>
                          <tr class="">
                            <td class="benchmark-name" style="padding:
                              5px 5px 5px 8px;"><a
                                moz-do-not-send="true"
                                href="http://michaelsmacmini.local/perf/v4/nts/2/graph?test.10=2"
                                class="">CTMark/lencod/lencod</a></td>
                            <td style="padding: 5px 5px 5px 8px;
                              background-color: rgb(210, 255, 210);"
                              class="">-1.01%</td>
                            <td style="padding: 5px 5px 5px 8px;"
                              class="">12.8763</td>
                            <td style="padding: 5px 5px 5px 8px;"
                              class="">12.7461</td>
                            <td style="padding: 5px 5px 5px 8px;"
                              class="">0.0244</td>
                          </tr>
                          <tr class="">
                            <td class="benchmark-name" style="padding:
                              5px 5px 5px 8px;"><a
                                moz-do-not-send="true"
                                href="http://michaelsmacmini.local/perf/v4/nts/2/graph?test.5=2"
                                class="">CTMark/SPASS/SPASS</a></td>
                            <td style="padding: 5px 5px 5px 8px;
                              background-color: rgb(210, 255, 210);"
                              class="">-1.01%</td>
                            <td style="padding: 5px 5px 5px 8px;"
                              class="">12.5048</td>
                            <td style="padding: 5px 5px 5px 8px;"
                              class="">12.3791</td>
                            <td style="padding: 5px 5px 5px 8px;"
                              class="">0.0340</td>
                          </tr>
                        </tbody>
                      </table>
                      <div class=""><br class="">
                      </div>
                      <table class="" style="font-family: Helvetica,
                        sans-serif; font-size: 9pt; border-spacing: 0px;
                        border: 1px solid black;">
                        <thead class=""><tr class="">
                            <th style="background-color: rgb(238, 238,
                              238); color: rgb(102, 102, 102); cursor:
                              default; text-align: center; font-family:
                              Verdana; padding: 5px 5px 5px 8px; width:
                              500px;" class="">Performance Improvements
                              - Compile Time</th>
                            <th style="background-color: rgb(238, 238,
                              238); color: rgb(102, 102, 102); cursor:
                              default; text-align: center; font-family:
                              Verdana; padding: 5px 5px 5px 8px;"
                              class="">Δ </th>
                            <th style="background-color: rgb(238, 238,
                              238); color: rgb(102, 102, 102); cursor:
                              default; text-align: center; font-family:
                              Verdana; padding: 5px 5px 5px 8px;"
                              class="">Previous</th>
                            <th style="background-color: rgb(238, 238,
                              238); color: rgb(102, 102, 102); cursor:
                              default; text-align: center; font-family:
                              Verdana; padding: 5px 5px 5px 8px;"
                              class="">Current</th>
                            <th style="background-color: rgb(238, 238,
                              238); color: rgb(102, 102, 102); cursor:
                              default; text-align: center; font-family:
                              Verdana; padding: 5px 5px 5px 8px;"
                              class="">σ </th>
                          </tr>
                        </thead><tbody class="searchable">
                          <tr class="">
                            <td class="benchmark-name" style="padding:
                              5px 5px 5px 8px;"><a
                                moz-do-not-send="true"
                                href="http://michaelsmacmini.local/perf/v4/nts/2/graph?test.14=2"
                                class="">External/SPEC/CINT2006/403.gcc/403.gcc</a></td>
                            <td style="padding: 5px 5px 5px 8px;
                              background-color: rgb(199, 255, 199);"
                              class="">-1.64%</td>
                            <td style="padding: 5px 5px 5px 8px;"
                              class="">54.0801</td>
                            <td style="padding: 5px 5px 5px 8px;"
                              class="">53.1930</td>
                            <td style="padding: 5px 5px 5px 8px;"
                              class="">-</td>
                          </tr>
                          <tr class="">
                            <td class="benchmark-name" style="padding:
                              5px 5px 5px 8px;"><a
                                moz-do-not-send="true"
                                href="http://michaelsmacmini.local/perf/v4/nts/2/graph?test.7=2"
                                class="">External/SPEC/CINT2006/400.perlbench/400.perlbench</a></td>
                            <td style="padding: 5px 5px 5px 8px;
                              background-color: rgb(205, 255, 205);"
                              class="">-1.25%</td>
                            <td style="padding: 5px 5px 5px 8px;"
                              class="">19.1481</td>
                            <td style="padding: 5px 5px 5px 8px;"
                              class="">18.9091</td>
                            <td style="padding: 5px 5px 5px 8px;"
                              class="">-</td>
                          </tr>
                          <tr class="">
                            <td class="benchmark-name" style="padding:
                              5px 5px 5px 8px;"><a
                                moz-do-not-send="true"
                                href="http://michaelsmacmini.local/perf/v4/nts/2/graph?test.15=2"
                                class="">External/SPEC/CINT2006/445.gobmk/445.gobmk</a></td>
                            <td style="padding: 5px 5px 5px 8px;
                              background-color: rgb(210, 255, 210);"
                              class="">-1.01%</td>
                            <td style="padding: 5px 5px 5px 8px;"
                              class="">15.2819</td>
                            <td style="padding: 5px 5px 5px 8px;"
                              class="">15.1274</td>
                            <td style="padding: 5px 5px 5px 8px;"
                              class="">-</td>
                          </tr>
                        </tbody>
                      </table>
                      <div class=""><br class="">
                      </div>
                      <div class=""><br class="">
                      </div>
                      <div class="">Do such changes make sense? The
                        patch doesn't change O3, but it does change Os
                        and potentially can change performance there
                        (though I didn't see any changes in my tests).</div>
                    </div>
                    <div class=""><br class="">
                    </div>
                    <div class="">The patch is attached for the
                      reference, if we decide to go for it, I'll upload
                      it to phab:</div>
                    <div class=""><br class="">
                    </div>
                  </div>
                </div>
              </div>
            </div>
            <span
              id="cid:2A77C0D9-EE12-4C99-99A0-7A0CF5DF758A@apple.com"><0001-InstCombine-Move-some-infrequent-patterns-under-if-E.patch></span>
            <div style="word-wrap: break-word; -webkit-nbsp-mode: space;
              -webkit-line-break: after-white-space;" class="">
              <div dir="auto" style="word-wrap: break-word;
                -webkit-nbsp-mode: space; -webkit-line-break:
                after-white-space;" class="">
                <div dir="auto" style="word-wrap: break-word;
                  -webkit-nbsp-mode: space; -webkit-line-break:
                  after-white-space;" class="">
                  <div dir="auto" style="word-wrap: break-word;
                    -webkit-nbsp-mode: space; -webkit-line-break:
                    after-white-space;" class="">
                    <div class=""><br class="">
                    </div>
                    <div class=""><br class="">
                    </div>
                    <div class="">Thanks,</div>
                    <div class="">Michael</div>
                    <div class=""><br class="">
                    </div>
                    <div class="">
                      <div class="">[1]: <a moz-do-not-send="true"
href="http://lists.llvm.org/pipermail/llvm-dev/2016-December/108279.html"
                          class="">http://lists.llvm.org/pipermail/llvm-dev/2016-December/108279.html</a></div>
                    </div>
                    <div class=""><br class="">
                    </div>
                  </div>
                </div>
              </div>
            </div>
            _______________________________________________<br class="">
            LLVM Developers mailing list<br class="">
            <a moz-do-not-send="true"
              href="mailto:llvm-dev@lists.llvm.org" class="">llvm-dev@lists.llvm.org</a><br
              class="">
            <a class="moz-txt-link-freetext" href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br
              class="">
          </div>
        </blockquote>
      </div>
      <br class="">
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
LLVM Developers mailing list
<a class="moz-txt-link-abbreviated" href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>
<a class="moz-txt-link-freetext" href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a>
</pre>
    </blockquote>
    <br>
    <pre class="moz-signature" cols="72">-- 
Hal Finkel
Lead, Compiler Technology and Programming Languages
Leadership Computing Facility
Argonne National Laboratory</pre>
  </body>
</html>