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.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@228677 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chandler Carruth 2015-02-10 08:07:32 +00:00
parent e65664e90d
commit 3e77df419d
2 changed files with 1 additions and 45 deletions

View File

@ -1081,19 +1081,12 @@ Instruction *InstCombiner::visitCallInst(CallInst &CI) {
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,

View File

@ -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 }