[llvm] r228677 - Revert r228556: InstCombine: propagate nonNull through assume

Chandler Carruth chandlerc at gmail.com
Tue Feb 10 00:07:32 PST 2015


Author: chandlerc
Date: Tue Feb 10 02:07:32 2015
New Revision: 228677

URL: http://llvm.org/viewvc/llvm-project?rev=228677&view=rev
Log:
Revert r228556: InstCombine: propagate nonNull through assume

This commit isn't using the correct context, and is transfoming calls
that are operands to loads rather than calls that are operands to an
icmp feeding into an assume. I've replied on the original review thread
with a very reduced test case and some thoughts on how to rework this.

Modified:
    llvm/trunk/lib/Transforms/InstCombine/InstCombineCalls.cpp
    llvm/trunk/test/Transforms/InstCombine/assume.ll

Modified: llvm/trunk/lib/Transforms/InstCombine/InstCombineCalls.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/InstCombine/InstCombineCalls.cpp?rev=228677&r1=228676&r2=228677&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/InstCombine/InstCombineCalls.cpp (original)
+++ llvm/trunk/lib/Transforms/InstCombine/InstCombineCalls.cpp Tue Feb 10 02:07:32 2015
@@ -1081,19 +1081,12 @@ Instruction *InstCombiner::visitCallInst
           cast<Constant>(RHS)->isNullValue()) {
         LoadInst* LI = cast<LoadInst>(LHS);
         if (isValidAssumeForContext(II, LI, DL, DT)) {
-          // assume( load (call|invoke) != null ) -> add 'nonnull' return
-          // attribute
-          Value *LIOperand = LI->getOperand(0);
-          if (CallInst *I = dyn_cast<CallInst>(LIOperand))
-            I->addAttribute(AttributeSet::ReturnIndex, Attribute::NonNull);
-          else if (InvokeInst *I = dyn_cast<InvokeInst>(LIOperand))
-            I->addAttribute(AttributeSet::ReturnIndex, Attribute::NonNull);
-
           MDNode *MD = MDNode::get(II->getContext(), None);
           LI->setMetadata(LLVMContext::MD_nonnull, MD);
           return EraseInstFromFunction(*II);
         }
       }
+      // TODO: apply nonnull return attributes to calls and invokes
       // TODO: apply range metadata for range check patterns?
     }
     // If there is a dominating assume with the same condition as this one,

Modified: llvm/trunk/test/Transforms/InstCombine/assume.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/assume.ll?rev=228677&r1=228676&r2=228677&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/InstCombine/assume.ll (original)
+++ llvm/trunk/test/Transforms/InstCombine/assume.ll Tue Feb 10 02:07:32 2015
@@ -257,45 +257,8 @@ entry:
 ; CHECK: call void @llvm.assume
 }
 
-declare i32** @id(i32** %a)
 
-; Check that nonnull return attribute is applied to call
-define i1 @nonnull5(i32** %a) {
-entry:
-  %idr = call i32** @id(i32** %a)
-  %load = load i32** %idr
-  %cmp = icmp ne i32* %load, null
-  tail call void @llvm.assume(i1 %cmp)
-  %rval = icmp eq i32* %load, null
-  ret i1 %rval
 
-; CHECK-LABEL: @nonnull5
-; CHECK: call nonnull
-; CHECK-NOT: call void @llvm.assume
-; CHECK: ret i1 false
-}
-
-declare i32 @__personality0(...)
-
-; Check that nonnull return attribute is applied to invoke
-define i1 @nonnull6(i32** %a) {
-entry:
-  %idr = invoke i32** @id(i32** %a) to label %norm unwind label %lpad
-norm:
-  %load = load i32** %idr
-  %cmp = icmp ne i32* %load, null
-  tail call void @llvm.assume(i1 %cmp)
-  %rval = icmp eq i32* %load, null
-  ret i1 %rval
-lpad:
-  %res = landingpad { i8*, i32 } personality i32 (...)* @__personality0 cleanup
-  resume { i8*, i32 } undef
-
-; CHECK-LABEL: @nonnull6
-; CHECK: invoke nonnull
-; CHECK-NOT: call void @llvm.assume
-; CHECK: ret i1 false
-}
 
 attributes #0 = { nounwind uwtable }
 attributes #1 = { nounwind }





More information about the llvm-commits mailing list