<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">On 07/08/2014 02:03 PM, deadal nix
      wrote:<br>
    </div>
    <blockquote
cite="mid:CANGV3T251K=RaQtg+VQ4NeRLUQvpJeiPB-1Mq9NrW+Z8KXoGaw@mail.gmail.com"
      type="cite">
      <meta http-equiv="Content-Type" content="text/html;
        charset=ISO-8859-1">
      <div dir="ltr"><br>
        <div class="gmail_extra"><br>
          <br>
          <div class="gmail_quote">2014-07-08 12:11 GMT-07:00 Matt
            Arsenault <span dir="ltr"><<a moz-do-not-send="true"
                href="mailto:Matthew.Arsenault@amd.com" target="_blank">Matthew.Arsenault@amd.com</a>></span>:<br>
            <blockquote class="gmail_quote" style="margin:0px 0px 0px
              0.8ex;border-left:1px solid
              rgb(204,204,204);padding-left:1ex">
              <div bgcolor="#FFFFFF" text="#000000">
                <div class="">
                  <div>On 07/07/2014 09:47 PM, deadal nix wrote:<br>
                  </div>
                  <blockquote type="cite">
                    <div dir="ltr">
                      <div>OK from what I understand, the
                        DAG.getSExtOrTrunc(SetCC, DL, SelectVT) is
                        unecessary and the SelectVT is nto the right
                        type (as it is called with incorrect parameter).<br>
                        <br>
                      </div>
                      Here is a patch so it won't generate a loop. I ran
                      make check and it doesn't look like anything is
                      broken.<br>
                    </div>
                  </blockquote>
                </div>
                No, it is necessary and is the fundamental change in
                that commit. SelectVT is not necessarily the same as VT,
                so it needs to be converted. This patch breaks the
                testcases I have that this fixed. If it helps, this is
                the testcase I was fixing.<br>
                <br>
                define i32 @test_sext_icmp_i64(i64 %arg) {<br>
                  %x = icmp eq i64 %arg, 0<br>
                  %y = sext i1 %x to i32<br>
                  ret i32 %y<br>
                }<br>
                <br>
              </div>
            </blockquote>
            <div><br>
            </div>
            <div>So this is not possible ?<br>
            </div>
            <div>(select (i64 setcc ...), (i32 -1), (i32 0))<br>
            </div>
            <div> </div>
            <blockquote class="gmail_quote" style="margin:0px 0px 0px
              0.8ex;border-left:1px solid
              rgb(204,204,204);padding-left:1ex">
              <div bgcolor="#FFFFFF" text="#000000"> The setcc type is
                i64 for the i64 icmp, so it then needs to be truncated
                to 32-bits in this situation
                <div class=""><br>
                </div>
              </div>
            </blockquote>
            <div><br>
            </div>
            <div>I understand this? Why does the setcc needs to be
              truncated ? It doesn't look like it usually is.<br>
              <br>
            </div>
            <div>I have a test case which is exactly the other way
              around :<br>
            </div>
          </div>
          define i32 @test_sext_icmp_i32(i32 %arg) {<br>
            %x = icmp eq i32 %arg, 0<br>
            %y = sext i1 %x to i64<br>
            ret i64 %y<br>
          }<br>
          <br>
        </div>
        <div class="gmail_extra">The DAG.getSExtOrTrunc(SetCC, DL,
          SelectVT) is returning the node DAGCombiner is working on,
          which create a loop after the substitution. If I have X = (i64
          (sext (i32 (setcc A B)))) to be "combined" as (select X, -1,
          0) and then, after substitution occurs, the select become its
          own condition, creating a loop in the DAG.<br>
        </div>
        <div class="gmail_extra"><br>
        </div>
      </div>
    </blockquote>
    I think this will work if we pull the conversion from out of the
    select, so instead select (getSExtOrTrunc) we do getSExtOrTrunc
    (select). However, my target would much rather do the 32-bit select
    than the 64-bit select (although arguably i32 trunc (i64 select)
    -> select (i32 trunc i64) should be a separate combine.
    Alternatively maybe this should only be done if the setcc type is
    the same as the sext result?<br>
    <br>
    Does this patch work for you?<br>
  </body>
</html>