aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--llvm/lib/Analysis/InlineCost.cpp2
-rw-r--r--llvm/test/Transforms/Inline/nonnull.ll22
2 files changed, 3 insertions, 21 deletions
diff --git a/llvm/lib/Analysis/InlineCost.cpp b/llvm/lib/Analysis/InlineCost.cpp
index 1eb4f2e..6877e44 100644
--- a/llvm/lib/Analysis/InlineCost.cpp
+++ b/llvm/lib/Analysis/InlineCost.cpp
@@ -1732,7 +1732,7 @@ bool CallAnalyzer::isKnownNonNullInCallee(Value *V) {
// parameter attribute, but that's a less interesting case because hopefully
// the callee would already have been simplified based on that.
if (Argument *A = dyn_cast<Argument>(V))
- if (paramHasAttr(A, Attribute::NonNull) || paramHasAttr(A, Attribute::Dereferenceable))
+ if (paramHasAttr(A, Attribute::NonNull))
return true;
// Is this an alloca in the caller? This is distinct from the attribute case
diff --git a/llvm/test/Transforms/Inline/nonnull.ll b/llvm/test/Transforms/Inline/nonnull.ll
index 658ae47..5f8af7f 100644
--- a/llvm/test/Transforms/Inline/nonnull.ll
+++ b/llvm/test/Transforms/Inline/nonnull.ll
@@ -99,11 +99,10 @@ define void @caller3(ptr %arg) {
ret void
}
-; Positive test - arg is known non null
define void @caller4(ptr dereferenceable(8) %arg) {
; CHECK-LABEL: define void @caller4
; CHECK-SAME: (ptr dereferenceable(8) [[ARG:%.*]]) {
-; CHECK-NEXT: call void @bar()
+; CHECK-NEXT: call void @callee(ptr dereferenceable(8) [[ARG]])
; CHECK-NEXT: ret void
;
call void @callee(ptr dereferenceable(8) %arg)
@@ -123,24 +122,7 @@ define void @caller5(ptr dereferenceable(8) %arg) {
define void @caller6(ptr %arg) {
; CHECK-LABEL: define void @caller6
; CHECK-SAME: (ptr [[ARG:%.*]]) {
-; CHECK-NEXT: [[CMP_I:%.*]] = icmp eq ptr [[ARG]], null
-; CHECK-NEXT: br i1 [[CMP_I]], label [[EXPENSIVE_I:%.*]], label [[DONE_I:%.*]]
-; CHECK: expensive.i:
-; CHECK-NEXT: call void @foo()
-; CHECK-NEXT: call void @foo()
-; CHECK-NEXT: call void @foo()
-; CHECK-NEXT: call void @foo()
-; CHECK-NEXT: call void @foo()
-; CHECK-NEXT: call void @foo()
-; CHECK-NEXT: call void @foo()
-; CHECK-NEXT: call void @foo()
-; CHECK-NEXT: call void @foo()
-; CHECK-NEXT: call void @foo()
-; CHECK-NEXT: br label [[CALLEE_EXIT:%.*]]
-; CHECK: done.i:
-; CHECK-NEXT: call void @bar()
-; CHECK-NEXT: br label [[CALLEE_EXIT]]
-; CHECK: callee.exit:
+; CHECK-NEXT: call void @callee(ptr dereferenceable(8) [[ARG]])
; CHECK-NEXT: ret void
;
call void @callee(ptr dereferenceable(8) %arg)