Skip to content

Commit 784915b

Browse files
committed
[InstCombine] Allow Ephemerals when trying to remove assume.
1 parent 876174f commit 784915b

File tree

2 files changed

+7
-15
lines changed

2 files changed

+7
-15
lines changed

llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3217,7 +3217,8 @@ Instruction *InstCombinerImpl::visitCallInst(CallInst &CI) {
32173217
m_Zero())) &&
32183218
LHS->getOpcode() == Instruction::Load &&
32193219
LHS->getType()->isPointerTy() &&
3220-
isValidAssumeForContext(II, LHS, &DT)) {
3220+
isValidAssumeForContext(II, LHS, &DT,
3221+
/*AllowEphemerals=*/true)) {
32213222
MDNode *MD = MDNode::get(II->getContext(), {});
32223223
LHS->setMetadata(LLVMContext::MD_nonnull, MD);
32233224
LHS->setMetadata(LLVMContext::MD_noundef, MD);

llvm/test/Transforms/InstCombine/assume.ll

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -502,10 +502,9 @@ define i1 @nonnull3B(ptr %a, i1 %control) {
502502
; CHECK-NEXT: entry:
503503
; CHECK-NEXT: br i1 [[CONTROL:%.*]], label [[TAKEN:%.*]], label [[NOT_TAKEN:%.*]]
504504
; CHECK: taken:
505-
; CHECK-NEXT: [[LOAD:%.*]] = load ptr, ptr [[A:%.*]], align 8
506-
; CHECK-NEXT: [[CMP:%.*]] = icmp ne ptr [[LOAD]], null
507-
; CHECK-NEXT: call void @llvm.assume(i1 [[CMP]]) [ "nonnull"(ptr [[LOAD]]) ]
508-
; CHECK-NEXT: ret i1 [[CMP]]
505+
; CHECK-NEXT: [[LOAD:%.*]] = load ptr, ptr [[A:%.*]], align 8, !nonnull [[META6]], !noundef [[META6]]
506+
; CHECK-NEXT: call void @llvm.assume(i1 true) [ "nonnull"(ptr [[LOAD]]) ]
507+
; CHECK-NEXT: ret i1 true
509508
; CHECK: not_taken:
510509
; CHECK-NEXT: ret i1 false
511510
;
@@ -582,16 +581,8 @@ not_taken:
582581
}
583582

584583
define void @nonnull_only_ephemeral_use(ptr %p) {
585-
; DEFAULT-LABEL: @nonnull_only_ephemeral_use(
586-
; DEFAULT-NEXT: [[A:%.*]] = load ptr, ptr [[P:%.*]], align 8
587-
; DEFAULT-NEXT: [[CMP:%.*]] = icmp ne ptr [[A]], null
588-
; DEFAULT-NEXT: tail call void @llvm.assume(i1 [[CMP]])
589-
; DEFAULT-NEXT: ret void
590-
;
591-
; BUNDLES-LABEL: @nonnull_only_ephemeral_use(
592-
; BUNDLES-NEXT: [[A:%.*]] = load ptr, ptr [[P:%.*]], align 8
593-
; BUNDLES-NEXT: call void @llvm.assume(i1 true) [ "nonnull"(ptr [[A]]) ]
594-
; BUNDLES-NEXT: ret void
584+
; CHECK-LABEL: @nonnull_only_ephemeral_use(
585+
; CHECK-NEXT: ret void
595586
;
596587
%a = load ptr, ptr %p
597588
%cmp = icmp ne ptr %a, null

0 commit comments

Comments
 (0)