<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><div><br><br>Sent from my iPhone</div><div><br>On Aug 25, 2015, at 6:08 PM, Philip Reames <<a href="mailto:listmail@philipreames.com">listmail@philipreames.com</a>> wrote:<br><br></div><blockquote type="cite"><div>
  
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  
  
    <div class="moz-cite-prefix">On 08/25/2015 05:08 PM, Pete Cooper
      wrote:<br>
    </div>
    <blockquote cite="mid:C23C56ED-627D-402A-BE11-9123C09BB317@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 Aug 25, 2015, at 4:54 PM, Philip Reames <<a moz-do-not-send="true" href="mailto:listmail@philipreames.com" class="">listmail@philipreames.com</a>>
            wrote:</div>
          <br class="Apple-interchange-newline">
          <div class="">
            <div class="">Pete,<br class="">
              <br class="">
              I'm not really following why your example is problematic,
              even for an non-zero address space.  We're not changing
              anything about the interpretation of the null pointer with
              this change.  We're simply propagating that the pointer
              *isn't* null, whatever meaning that might have for the
              given address space.  What I am missing in your
              explanation?  Where does this go wrong?<br class="">
            </div>
          </div>
        </blockquote>
        Ah, sorry i should have explained better.</div>
      <div><br class="">
      </div>
      <div>What i was describing was a bit of a what-if.  If we had an
        optimization which propagated the not null to the function
        itself, which isn’t difficult now that you’ve added it to all
        the eligible call sites, then it would be possible to
        incorrectly remove code in the example I gave.<br class="">
      </div>
    </blockquote>
    I'm willing to accept the non-null propagation from the call sites
    to the callee for an internal function. </div></blockquote>Yeah. I'm still trying to work out the best way to do that. We don't seem to have a good pass that fits. But that's an issue for later I guess.<br><blockquote type="cite"><div> However, I'm still not
    seeing why the transform is incorrect,  If we proved the pointer
    can't be null at the one and only call site, the check inside the
    function obviously can't ever see null.  What's wrong with this
    picture?  </div></blockquote>I think it was distracting of me to give an example where not null might go wrong. This example shows that if we incorrectly put not null on the pointer then the kind of optimisation that might incorrectly trigger.<br><blockquote type="cite"><div>Where'd we go wrong?  (Is it just the issue below?)<br></div></blockquote>It is just the issue below yeah.<br><blockquote type="cite"><div>
    <blockquote cite="mid:C23C56ED-627D-402A-BE11-9123C09BB317@apple.com" type="cite">
      <div>
        <blockquote type="cite" class="">
          <div class="">
            <div class=""><br class="">
              Are you possibly trying to say that we false concluded it
              was nonnull at the call site?  i.e. Did you find a bug in
              isKnownNonNull for non-zero address space pointers?<br class="">
            </div>
          </div>
        </blockquote>
        But yes, this is the real bug.  This is the relevant code, which
        really needs to be checking for address spaces.</div>
      <div><br class="">
      </div>
      <div>
        <div style="margin: 0px; font-size: 11px; line-height: normal;
          font-family: Menlo; color: rgb(0, 132, 0);" class=""><span style="font-variant-ligatures: no-common-ligatures; color:
            #000000" class="">  </span>// Global values are not null
          unless extern weak.</div>
        <div style="margin: 0px; font-size: 11px; line-height: normal;
          font-family: Menlo;" class="">  <span style="font-variant-ligatures: no-common-ligatures; color:
            #bb2ca2" class="">if</span> (<span style="font-variant-ligatures: no-common-ligatures; color:
            #bb2ca2" class="">const</span> <span style="font-variant-ligatures: no-common-ligatures; color:
            #4f8187" class="">GlobalValue</span> *GV =
          dyn_cast<GlobalValue>(V))</div>
        <div style="margin: 0px; font-size: 11px; line-height: normal;
          font-family: Menlo; color: rgb(49, 89, 93);" class=""><span style="font-variant-ligatures: no-common-ligatures; color:
            #000000" class="">    </span><span style="font-variant-ligatures: no-common-ligatures; color:
            #bb2ca2" class="">return</span><span style="font-variant-ligatures: no-common-ligatures; color:
            #000000" class=""> !GV-></span>hasExternalWeakLinkage<span style="font-variant-ligatures: no-common-ligatures; color:
            #000000" class="">();</span></div>
      </div>
    </blockquote>
    Want to send a patch?  I'll be happy to review.  <br></div></blockquote>Cool. Thanks. I'll try get something done tomorrow.<div><br></div><div>Cheers</div><div>Pete<br><blockquote type="cite"><div>
    <blockquote cite="mid:C23C56ED-627D-402A-BE11-9123C09BB317@apple.com" type="cite">
      <div><br class="">
      </div>
      <div>Cheers,</div>
      <div>Pete<br class="">
        <blockquote type="cite" class="">
          <div class="">
            <div class=""><br class="">
              Philip<br class="">
              <br class="">
              On 08/25/2015 11:09 AM, Pete Cooper wrote:<br class="">
              <blockquote type="cite" class="">Hey Philip<br class="">
                <br class="">
                We just came across a case internally where this
                optimization applied not null to a pointer with an
                address space other than 0.<br class="">
                <br class="">
                Sorry, I reviewed this and really should have thought
                about that at the time.<br class="">
                <br class="">
                What are your thoughts on this?  I believe we can only
                assume nullness on address space 0 and have to leave all
                others alone.<br class="">
                <br class="">
                I don’t think we have an optimization pipeline which
                will expose this, but lets assume that we have something
                like:<br class="">
                <br class="">
                foo(&g)<br class="">
                ...<br class="">
                foo(int *addresspace(1) p) {<br class="">
                  if (p != null) { bar(); }<br class="">
                }<br class="">
                <br class="">
                then you could imagine us propagating the not null from
                the call to the callee (if all calls to the callee have
                not null), and so we have<br class="">
                <br class="">
                foo(&g __attribute__((not null)) )<br class="">
                ...<br class="">
                foo(int *addresspace(1) __attribute__((not null)) p) {<br class="">
                  if (p != null) { bar(); }<br class="">
                }<br class="">
                <br class="">
                and then some optimization would constant fold the if to
                give us<br class="">
                <br class="">
                foo(int *addresspace(1) __attribute__((not null)) p) {<br class="">
                  bar();<br class="">
                }<br class="">
                <br class="">
                which might be incorrect if 0 was a valid address on
                address space 1.<br class="">
                <br class="">
                Cheers,<br class="">
                Pete<br class="">
                <blockquote type="cite" class="">On Jun 16, 2015, at
                  1:24 PM, Philip Reames <<a moz-do-not-send="true" href="mailto:listmail@philipreames.com" class="">listmail@philipreames.com</a>>
                  wrote:<br class="">
                  <br class="">
                  Author: reames<br class="">
                  Date: Tue Jun 16 15:24:25 2015<br class="">
                  New Revision: 239849<br class="">
                  <br class="">
                  URL: <a moz-do-not-send="true" href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject-3Frev-3D239849-26view-3Drev&d=BQIDaQ&c=eEvniauFctOgLOKGJOplqw&r=03tkj3107244TlY4t3_hEgkDY-UG6gKwwK0wOUS3qjM&m=1F4F5ne45cMxjcevazqUxYm1cFJzKct3OPthe_IDLv8&s=zCZOTfrNGX-URsmw7bhhRVxYQvKoRUQU_sSrbdhbtX8&e=" class="">https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject-3Frev-3D239849-26view-3Drev&d=BQIDaQ&c=eEvniauFctOgLOKGJOplqw&r=03tkj3107244TlY4t3_hEgkDY-UG6gKwwK0wOUS3qjM&m=1F4F5ne45cMxjcevazqUxYm1cFJzKct3OPthe_IDLv8&s=zCZOTfrNGX-URsmw7bhhRVxYQvKoRUQU_sSrbdhbtX8&e=</a>
                  Log:<br class="">
                  Reapply 239795 - [InstCombine] Propagate non-null
                  facts to call parameters<br class="">
                  <br class="">
                  The original change broke clang side tests.  I will be
                  submitting those momentarily.  This change includes
                  post commit feedback on the original change from from
                  Pete Cooper.<br class="">
                  <br class="">
                  Original Submission comments:<br class="">
                  If a parameter to a function is known non-null, use
                  the existing parameter attributes to record that fact
                  at the call site. This has no optimization benefit by
                  itself - that I know of - but is an enabling change
                  for <a moz-do-not-send="true" href="https://urldefense.proofpoint.com/v2/url?u=http-3A__reviews.llvm.org_D9129&d=BQIDaQ&c=eEvniauFctOgLOKGJOplqw&r=03tkj3107244TlY4t3_hEgkDY-UG6gKwwK0wOUS3qjM&m=1F4F5ne45cMxjcevazqUxYm1cFJzKct3OPthe_IDLv8&s=xdQ7r5usnFj24cbkbi7xrqULBEj9KxRiv5IHualA0vA&e=" class="">https://urldefense.proofpoint.com/v2/url?u=http-3A__reviews.llvm.org_D9129&d=BQIDaQ&c=eEvniauFctOgLOKGJOplqw&r=03tkj3107244TlY4t3_hEgkDY-UG6gKwwK0wOUS3qjM&m=1F4F5ne45cMxjcevazqUxYm1cFJzKct3OPthe_IDLv8&s=xdQ7r5usnFj24cbkbi7xrqULBEj9KxRiv5IHualA0vA&e=</a>
                  .<br class="">
                  <br class="">
                  Differential Revision: <a moz-do-not-send="true" href="https://urldefense.proofpoint.com/v2/url?u=http-3A__reviews.llvm.org_D9132&d=BQIDaQ&c=eEvniauFctOgLOKGJOplqw&r=03tkj3107244TlY4t3_hEgkDY-UG6gKwwK0wOUS3qjM&m=1F4F5ne45cMxjcevazqUxYm1cFJzKct3OPthe_IDLv8&s=_0McocxwRnNqXY2DzhWVljrDylGa8auvq2rGWSwe85c&e=" class="">https://urldefense.proofpoint.com/v2/url?u=http-3A__reviews.llvm.org_D9132&d=BQIDaQ&c=eEvniauFctOgLOKGJOplqw&r=03tkj3107244TlY4t3_hEgkDY-UG6gKwwK0wOUS3qjM&m=1F4F5ne45cMxjcevazqUxYm1cFJzKct3OPthe_IDLv8&s=_0McocxwRnNqXY2DzhWVljrDylGa8auvq2rGWSwe85c&e=</a>
                  <br class="">
                  <br class="">
                  Modified:<br class="">
                     llvm/trunk/include/llvm/IR/CallSite.h<br class="">
   llvm/trunk/lib/Transforms/InstCombine/InstCombineCalls.cpp<br class="">
                     llvm/trunk/test/CodeGen/NVPTX/intrin-nocapture.ll<br class="">
   llvm/trunk/test/Transforms/Inline/byval-tail-call.ll<br class="">
                     llvm/trunk/test/Transforms/InstCombine/select.ll<br class="">
                  <br class="">
                  Modified: llvm/trunk/include/llvm/IR/CallSite.h<br class="">
                  URL: <a moz-do-not-send="true" href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_include_llvm_IR_CallSite.h-3Frev-3D239849-26r1-3D239848-26r2-3D239849-26view-3Ddiff&d=BQIDaQ&c=eEvniauFctOgLOKGJOplqw&r=03tkj3107244TlY4t3_hEgkDY-UG6gKwwK0wOUS3qjM&m=1F4F5ne45cMxjcevazqUxYm1cFJzKct3OPthe_IDLv8&s=CVzzdRdB5oRpo9UQEYi2KTvToOeg6iF0XMftoXK5DFo&e=" class="">https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_include_llvm_IR_CallSite.h-3Frev-3D239849-26r1-3D239848-26r2-3D239849-26view-3Ddiff&d=BQIDaQ&c=eEvniauFctOgLOKGJOplqw&r=03tkj3107244TlY4t3_hEgkDY-UG6gKwwK0wOUS3qjM&m=1F4F5ne45cMxjcevazqUxYm1cFJzKct3OPthe_IDLv8&s=CVzzdRdB5oRpo9UQEYi2KTvToOeg6iF0XMftoXK5DFo&e=</a>
==============================================================================<br class="">
                  --- llvm/trunk/include/llvm/IR/CallSite.h (original)<br class="">
                  +++ llvm/trunk/include/llvm/IR/CallSite.h Tue Jun 16
                  15:24:25 2015<br class="">
                  @@ -27,6 +27,7 @@<br class="">
                  #define LLVM_IR_CALLSITE_H<br class="">
                  <br class="">
                  #include "llvm/ADT/PointerIntPair.h"<br class="">
                  +#include "llvm/ADT/iterator_range.h"<br class="">
                  #include "llvm/IR/Attributes.h"<br class="">
                  #include "llvm/IR/CallingConv.h"<br class="">
                  #include "llvm/IR/Instructions.h"<br class="">
                  @@ -150,6 +151,9 @@ public:<br class="">
                    }<br class="">
                  <br class="">
                    IterTy arg_end() const { return (*this)->op_end()
                  - getArgumentEndOffset(); }<br class="">
                  +  iterator_range<IterTy> args() const {<br class="">
                  +    return iterator_range<IterTy>(arg_begin(),
                  arg_end());<br class="">
                  +  }<br class="">
                    bool arg_empty() const { return arg_end() ==
                  arg_begin(); }<br class="">
                    unsigned arg_size() const { return
                  unsigned(arg_end() - arg_begin()); }<br class="">
                  <br class="">
                  <br class="">
                  Modified:
                  llvm/trunk/lib/Transforms/InstCombine/InstCombineCalls.cpp<br class="">
                  URL: <a moz-do-not-send="true" href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_lib_Transforms_InstCombine_InstCombineCalls.cpp-3Frev-3D239849-26r1-3D239848-26r2-3D239849-26view-3Ddiff&d=BQIDaQ&c=eEvniauFctOgLOKGJOplqw&r=03tkj3107244TlY4t3_hEgkDY-UG6gKwwK0wOUS3qjM&m=1F4F5ne45cMxjcevazqUxYm1cFJzKct3OPthe_IDLv8&s=BsxlpsGfx6RU9emQe7mFuMYbqKdxo8JJtB7UqpwfeKU&e=" class="">https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_lib_Transforms_InstCombine_InstCombineCalls.cpp-3Frev-3D239849-26r1-3D239848-26r2-3D239849-26view-3Ddiff&d=BQIDaQ&c=eEvniauFctOgLOKGJOplqw&r=03tkj3107244TlY4t3_hEgkDY-UG6gKwwK0wOUS3qjM&m=1F4F5ne45cMxjcevazqUxYm1cFJzKct3OPthe_IDLv8&s=BsxlpsGfx6RU9emQe7mFuMYbqKdxo8JJtB7UqpwfeKU&e=</a>
==============================================================================<br class="">
                  ---
                  llvm/trunk/lib/Transforms/InstCombine/InstCombineCalls.cpp
                  (original)<br class="">
                  +++
                  llvm/trunk/lib/Transforms/InstCombine/InstCombineCalls.cpp
                  Tue Jun 16 15:24:25 2015<br class="">
                  @@ -1391,11 +1391,29 @@ static IntrinsicInst
                  *FindInitTrampoline<br class="">
                  // visitCallSite - Improvements for call and invoke
                  instructions.<br class="">
                  //<br class="">
                  Instruction *InstCombiner::visitCallSite(CallSite CS)
                  {<br class="">
                  +<br class="">
                    if (isAllocLikeFn(CS.getInstruction(), TLI))<br class="">
                      return visitAllocSite(*CS.getInstruction());<br class="">
                  <br class="">
                    bool Changed = false;<br class="">
                  <br class="">
                  +  // Mark any parameters that are known to be
                  non-null with the nonnull<br class="">
                  +  // attribute.  This is helpful for inlining calls
                  to functions with null<br class="">
                  +  // checks on their arguments.<br class="">
                  +  unsigned ArgNo = 0;<br class="">
                  +  for (Value *V : CS.args()) {<br class="">
                  +    if (!CS.paramHasAttr(ArgNo+1, Attribute::NonNull)
                  &&<br class="">
                  +        isKnownNonNull(V)) {<br class="">
                  +      AttributeSet AS = CS.getAttributes();<br class="">
                  +      AS =
                  AS.addAttribute(CS.getInstruction()->getContext(),
                  ArgNo+1,<br class="">
                  +                           Attribute::NonNull);<br class="">
                  +      CS.setAttributes(AS);<br class="">
                  +      Changed = true;<br class="">
                  +    }<br class="">
                  +    ArgNo++;<br class="">
                  +  }<br class="">
                  +  assert(ArgNo == CS.arg_size() && "sanity
                  check");<br class="">
                  +<br class="">
                    // If the callee is a pointer to a function, attempt
                  to move any casts to the<br class="">
                    // arguments of the call/invoke.<br class="">
                    Value *Callee = CS.getCalledValue();<br class="">
                  <br class="">
                  Modified:
                  llvm/trunk/test/CodeGen/NVPTX/intrin-nocapture.ll<br class="">
                  URL: <a moz-do-not-send="true" href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_test_CodeGen_NVPTX_intrin-2Dnocapture.ll-3Frev-3D239849-26r1-3D239848-26r2-3D239849-26view-3Ddiff&d=BQIDaQ&c=eEvniauFctOgLOKGJOplqw&r=03tkj3107244TlY4t3_hEgkDY-UG6gKwwK0wOUS3qjM&m=1F4F5ne45cMxjcevazqUxYm1cFJzKct3OPthe_IDLv8&s=kckzUpGGcdQiQaHhAEGRU6W6UAfgOgvxHHo3Wf-D9_4&e=" class="">https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_test_CodeGen_NVPTX_intrin-2Dnocapture.ll-3Frev-3D239849-26r1-3D239848-26r2-3D239849-26view-3Ddiff&d=BQIDaQ&c=eEvniauFctOgLOKGJOplqw&r=03tkj3107244TlY4t3_hEgkDY-UG6gKwwK0wOUS3qjM&m=1F4F5ne45cMxjcevazqUxYm1cFJzKct3OPthe_IDLv8&s=kckzUpGGcdQiQaHhAEGRU6W6UAfgOgvxHHo3Wf-D9_4&e=</a>
==============================================================================<br class="">
                  --- llvm/trunk/test/CodeGen/NVPTX/intrin-nocapture.ll
                  (original)<br class="">
                  +++ llvm/trunk/test/CodeGen/NVPTX/intrin-nocapture.ll
                  Tue Jun 16 15:24:25 2015<br class="">
                  @@ -11,7 +11,7 @@ declare i32 addrspace(1)*
                  @llvm.nvvm.ptr<br class="">
                  ; CHECK: @bar<br class="">
                  define void @bar() {<br class="">
                    %t1 = alloca i32<br class="">
                  -; CHECK: call i32 addrspace(1)*
                  @llvm.nvvm.ptr.gen.to.global.p1i32.p0i32(i32* %t1)<br class="">
                  +; CHECK: call i32 addrspace(1)*
                  @llvm.nvvm.ptr.gen.to.global.p1i32.p0i32(i32* nonnull
                  %t1)<br class="">
                  ; CHECK-NEXT: store i32 10, i32* %t1<br class="">
                    %t2 = call i32 addrspace(1)*
                  @llvm.nvvm.ptr.gen.to.global.p1i32.p0i32(i32* %t1)<br class="">
                    store i32 10, i32* %t1<br class="">
                  <br class="">
                  Modified:
                  llvm/trunk/test/Transforms/Inline/byval-tail-call.ll<br class="">
                  URL: <a moz-do-not-send="true" href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_test_Transforms_Inline_byval-2Dtail-2Dcall.ll-3Frev-3D239849-26r1-3D239848-26r2-3D239849-26view-3Ddiff&d=BQIDaQ&c=eEvniauFctOgLOKGJOplqw&r=03tkj3107244TlY4t3_hEgkDY-UG6gKwwK0wOUS3qjM&m=1F4F5ne45cMxjcevazqUxYm1cFJzKct3OPthe_IDLv8&s=jdGpDmu_-liQ4QSf2MasxZbLc3jcwqygDUOa4Yzaxh4&e=" class="">https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_test_Transforms_Inline_byval-2Dtail-2Dcall.ll-3Frev-3D239849-26r1-3D239848-26r2-3D239849-26view-3Ddiff&d=BQIDaQ&c=eEvniauFctOgLOKGJOplqw&r=03tkj3107244TlY4t3_hEgkDY-UG6gKwwK0wOUS3qjM&m=1F4F5ne45cMxjcevazqUxYm1cFJzKct3OPthe_IDLv8&s=jdGpDmu_-liQ4QSf2MasxZbLc3jcwqygDUOa4Yzaxh4&e=</a>
==============================================================================<br class="">
                  ---
                  llvm/trunk/test/Transforms/Inline/byval-tail-call.ll
                  (original)<br class="">
                  +++
                  llvm/trunk/test/Transforms/Inline/byval-tail-call.ll
                  Tue Jun 16 15:24:25 2015<br class="">
                  @@ -33,7 +33,7 @@ define void @frob(i32* %x) {<br class="">
                  ; CHECK: %[[POS:.*]] = alloca i32<br class="">
                  ; CHECK: %[[VAL:.*]] = load i32, i32* %x<br class="">
                  ; CHECK: store i32 %[[VAL]], i32* %[[POS]]<br class="">
                  -; CHECK: {{^ *}}call void @ext(i32* %[[POS]]<br class="">
                  +; CHECK: {{^ *}}call void @ext(i32* nonnull %[[POS]]<br class="">
                  ; CHECK: tail call void @ext(i32* null)<br class="">
                  ; CHECK: ret void<br class="">
                    tail call void @qux(i32* byval %x)<br class="">
                  <br class="">
                  Modified:
                  llvm/trunk/test/Transforms/InstCombine/select.ll<br class="">
                  URL: <a moz-do-not-send="true" href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_test_Transforms_InstCombine_select.ll-3Frev-3D239849-26r1-3D239848-26r2-3D239849-26view-3Ddiff&d=BQIDaQ&c=eEvniauFctOgLOKGJOplqw&r=03tkj3107244TlY4t3_hEgkDY-UG6gKwwK0wOUS3qjM&m=1F4F5ne45cMxjcevazqUxYm1cFJzKct3OPthe_IDLv8&s=pW5HrUeNAokTQHaGtkCTws1Ku_LNanlrzInZl5Ykkdo&e=" class="">https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_test_Transforms_InstCombine_select.ll-3Frev-3D239849-26r1-3D239848-26r2-3D239849-26view-3Ddiff&d=BQIDaQ&c=eEvniauFctOgLOKGJOplqw&r=03tkj3107244TlY4t3_hEgkDY-UG6gKwwK0wOUS3qjM&m=1F4F5ne45cMxjcevazqUxYm1cFJzKct3OPthe_IDLv8&s=pW5HrUeNAokTQHaGtkCTws1Ku_LNanlrzInZl5Ykkdo&e=</a>
==============================================================================<br class="">
                  --- llvm/trunk/test/Transforms/InstCombine/select.ll
                  (original)<br class="">
                  +++ llvm/trunk/test/Transforms/InstCombine/select.ll
                  Tue Jun 16 15:24:25 2015<br class="">
                  @@ -1265,7 +1265,7 @@ define i32 @test77(i1 %flag,
                  i32* %x) {<br class="">
                  ; load does.<br class="">
                  ; CHECK-LABEL: @test77(<br class="">
                  ; CHECK: %[[A:.*]] = alloca i32, align 1<br class="">
                  -; CHECK: call void @scribble_on_i32(i32* %[[A]])<br class="">
                  +; CHECK: call void @scribble_on_i32(i32* nonnull
                  %[[A]])<br class="">
                  ; CHECK: store i32 0, i32* %x<br class="">
                  ; CHECK: %[[P:.*]] = select i1 %flag, i32* %[[A]],
                  i32* %x<br class="">
                  ; CHECK: load i32, i32* %[[P]]<br class="">
                  <br class="">
                  <br class="">
                  _______________________________________________<br class="">
                  llvm-commits mailing list<br class="">
                  <a moz-do-not-send="true" href="mailto:llvm-commits@cs.uiuc.edu" class="">llvm-commits@cs.uiuc.edu</a><br class="">
                  <a class="moz-txt-link-freetext" href="https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.cs.uiuc.edu_mailman_listinfo_llvm-2Dcommits&d=BQIDaQ&c=eEvniauFctOgLOKGJOplqw&r=03tkj3107244TlY4t3_hEgkDY-UG6gKwwK0wOUS3qjM&m=1F4F5ne45cMxjcevazqUxYm1cFJzKct3OPthe_IDLv8&s=5hlvP4QWrrzH4QOwn4guDATXRPO64TYAQrR4ljD7zYI&e=">https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.cs.uiuc.edu_mailman_listinfo_llvm-2Dcommits&d=BQIDaQ&c=eEvniauFctOgLOKGJOplqw&r=03tkj3107244TlY4t3_hEgkDY-UG6gKwwK0wOUS3qjM&m=1F4F5ne45cMxjcevazqUxYm1cFJzKct3OPthe_IDLv8&s=5hlvP4QWrrzH4QOwn4guDATXRPO64TYAQrR4ljD7zYI&e=</a>
                  <br class="">
                </blockquote>
              </blockquote>
              <br class="">
            </div>
          </div>
        </blockquote>
      </div>
      <br class="">
    </blockquote>
    <br>
  

</div></blockquote></div></body></html>