<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">I would tend to lean towards making
      SUBCARRY return the same value on all targets, assuming it doesn't
      complicate the target-specific code much.  We want to make the
      target-independent code more straightforward if we can, and it
      probably makes the code easier to understand if SUBCARRY and USUBO
      are consistent.<br>
      <br>
      If it somehow ends up being too tricky to lower SUBCARRY on ARM,
      it probably makes more sense to add new opcodes, rather than make
      the semantics of the existing opcodes depend on a target flag. 
      (The end result is essentially equivalent, but it's harder to
      accidentally mistake which kind of node you're dealing with.)<br>
      <br>
      -Eli<br>
      <br>
      On 6/28/2017 9:58 AM, Roger Ferrer Ibanez via llvm-dev wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:DB6PR0802MB2534325FBC62CD5C19EE1FC587DD0@DB6PR0802MB2534.eurprd08.prod.outlook.com">
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      <meta name="Generator" content="Microsoft Word 14 (filtered
        medium)">
      <style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
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="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Hi
            James,<o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">thanks
            for your answer.<o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Your
            suggestion looks sensible to me, then I understand that a
            combiner like the following one (DAGCombiner::visitSUBCARRY)<o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> 
            <a
              href="http://www.llvm.org/doxygen/DAGCombiner_8cpp_source.html#l02498"
              moz-do-not-send="true">http://www.llvm.org/doxygen/DAGCombiner_8cpp_source.html#l02498</a><o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">that
            assumes that “subcarry x, y, 0” can be simplified as “usubo
            x, y” should be parameterized using TargetLowering, as this
            assumes that the third input of subcarry is a borrow (e.g.
            x86) rather than a “carry” (e.g. ARM).<o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Does
            this make sense? Maybe I’m mixing things here.<o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">(
            For context: I’m trying to establish if I can avoid adding
            ARM specific combiners in
            <a href="https://reviews.llvm.org/D34515"
              moz-do-not-send="true">https://reviews.llvm.org/D34515</a>
            and use the generic ones instead. )<o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Kind
            regards,<o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Roger<o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
        <div style="border:none;border-left:solid blue 1.5pt;padding:0cm
          0cm 0cm 4.0pt">
          <div>
            <div style="border:none;border-top:solid #B5C4DF
              1.0pt;padding:3.0pt 0cm 0cm 0cm">
              <p class="MsoNormal"><b><span
style="font-size:10.0pt;font-family:"Tahoma","sans-serif""
                    lang="EN-US">From:</span></b><span
style="font-size:10.0pt;font-family:"Tahoma","sans-serif""
                  lang="EN-US"> James Y Knight
                  [<a class="moz-txt-link-freetext" href="mailto:jyknight@google.com">mailto:jyknight@google.com</a>]
                  <br>
                  <b>Sent:</b> 27 June 2017 17:00<br>
                  <b>To:</b> Roger Ferrer Ibanez<br>
                  <b>Cc:</b> llvm-dev; nd<br>
                  <b>Subject:</b> Re: [llvm-dev] Question about
                  ISD::SUBCARRY<o:p></o:p></span></p>
            </div>
          </div>
          <p class="MsoNormal"><o:p> </o:p></p>
          <div>
            <p class="MsoNormal">That's an excellent question. :)<o:p></o:p></p>
            <div>
              <p class="MsoNormal"><o:p> </o:p></p>
            </div>
            <div>
              <p class="MsoNormal">I'd say it should _probably_ be
                defined as having the same boolean value as the
                hardware's carry-flag, and there should be a
                TargetLowering function which describes the semantics
                upon subtract.<o:p></o:p></p>
            </div>
            <div>
              <div>
                <p class="MsoNormal"><o:p> </o:p></p>
                <div>
                  <p class="MsoNormal">On Tue, Jun 27, 2017 at 4:53 AM,
                    Roger Ferrer Ibanez via llvm-dev <<a
                      href="mailto:llvm-dev@lists.llvm.org"
                      target="_blank" moz-do-not-send="true">llvm-dev@lists.llvm.org</a>>
                    wrote:<o:p></o:p></p>
                  <p class="MsoNormal">Dear all,<br>
                    <br>
                    a couple of new generic DAG nodes ISD::ADCARRY and
                    ISD::SUBCARRY were recently introduced in
                    <a href="https://reviews.llvm.org/D29872"
                      target="_blank" moz-do-not-send="true">https://reviews.llvm.org/D29872</a><br>
                    <br>
                    These nodes have three inputs and two outputs, the
                    second output being the "carry". I understand that
                    carry is well defined for ADDCARRY but my question
                    is about SUBCARRY.<br>
                    <br>
                    Some architectures set the "carry" of a "x - y"
                    subtraction is set when x < y (e.g x86, "borrow")
                    and some others set it when x >= y (e.g. ARM).
                    Does the ISD::SUBCARRY picks one interpretation (and
                    uses it for combiners on top of this node) or leaves
                    the interpretation to the target.<br>
                    <br>
                    Maybe my whole question does not make sense and even
                    if only one interpretation is chosen this does not
                    impact the target?<br>
                    <br>
                    Thank you very much,<br>
                    Roger<br>
                    _______________________________________________<br>
                    LLVM Developers mailing list<br>
                    <a href="mailto:llvm-dev@lists.llvm.org"
                      moz-do-not-send="true">llvm-dev@lists.llvm.org</a><br>
                    <a
                      href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev"
                      target="_blank" moz-do-not-send="true">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><o:p></o:p></p>
                </div>
                <p class="MsoNormal"><o:p> </o:p></p>
              </div>
            </div>
          </div>
        </div>
      </div>
      <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>
    <p><br>
    </p>
    <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>