<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html;
      charset=windows-1252">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">On 6/30/2017 11:38 AM, Balaram Makam
      wrote:<br>
    </div>
    <blockquote type="cite"
      cite="mid:01a201d2f1d0$06e72970$14b57c50$@codeaurora.org">
      <meta http-equiv="Content-Type" content="text/html;
        charset=windows-1252">
      <meta name="Generator" content="Microsoft Word 15 (filtered
        medium)">
      <style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        color:black;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";
        color:black;}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:Consolas;
        color:black;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;
        color:black;}
span.EmailStyle20
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.EmailStyle21
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.EmailStyle22
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
      <div class="WordSection1">
        <p class="MsoNormal"><span style="color:windowtext">Thanks Eli,<o:p></o:p></span></p>
        <p class="MsoNormal"><span style="color:windowtext"><o:p> </o:p></span></p>
        <p class="MsoNormal"><span style="color:windowtext">I was
            looking at this code which keeps track of loop headers but
            is checking if the destination of branch is a loop header
            sufficient? This prevents merging empty preheaders into the
            loop headers as well.</span></p>
      </div>
    </blockquote>
    <br>
    There isn't really any reason to collapse preheaders anyway;
    LoopSimplify will recreate them, and they don't really block other
    optimizations as far as I know.<br>
    <br>
    <blockquote type="cite"
      cite="mid:01a201d2f1d0$06e72970$14b57c50$@codeaurora.org">
      <div class="WordSection1">
        <p class="MsoNormal"><span style="color:windowtext">Is that
            reasonable approach or do we need to skip only if the
            original unconditional branch was a backedge and folding
            this branch might result in additional backedges? I made a
            quick hack to find the function backedges and skip
            simplifycfg to merge the latch block into the loop header
            when it results in an additional backedge. Although it
            solves my purpose I am not sure if this the right approach,
            as finding the backedges looks expensive.</span></p>
      </div>
    </blockquote>
    <br>
    Well, not that expensive to calculate if you cache it, but probably
    tricky to keep the cache up-to-date, yes.<br>
    <br>
    <blockquote type="cite"
      cite="mid:01a201d2f1d0$06e72970$14b57c50$@codeaurora.org">
      <div class="WordSection1">
        <p class="MsoNormal"><span style="color:windowtext">I also found
            a regression with this patch where a huge switch statement
            with multiple empty blocks have been skipped from merging
            resulting in bad code. Instead, should loopsimplify try to
            unify multiple exit blocks and collapse multiple backedges
            whenever possible instead of splitting it out into a nested
            loop?</span></p>
      </div>
    </blockquote>
    <br>
    I'm not sure I follow the issue here.  Could you give an example?<br>
    <br>
    -Eli<br>
    <br>
    <pre class="moz-signature" cols="72">-- 
Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project</pre>
  </body>
</html>