[llvm] 440c3d1 - [IRBuilder][NFC] Add CreateNonnullAssumption and use it in InstCombine (#195935)
via llvm-commits
llvm-commits at lists.llvm.org
Wed May 6 04:05:24 PDT 2026
Author: Nikolas Klauser
Date: 2026-05-06T13:05:19+02:00
New Revision: 440c3d1224d1430624d00acc52ddf967d523695a
URL: https://github.com/llvm/llvm-project/commit/440c3d1224d1430624d00acc52ddf967d523695a
DIFF: https://github.com/llvm/llvm-project/commit/440c3d1224d1430624d00acc52ddf967d523695a.diff
LOG: [IRBuilder][NFC] Add CreateNonnullAssumption and use it in InstCombine (#195935)
Added:
Modified:
llvm/include/llvm/IR/IRBuilder.h
llvm/lib/IR/IRBuilder.cpp
llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/IR/IRBuilder.h b/llvm/include/llvm/IR/IRBuilder.h
index d3c782a7b4a48..e28a9027740a3 100644
--- a/llvm/include/llvm/IR/IRBuilder.h
+++ b/llvm/include/llvm/IR/IRBuilder.h
@@ -2824,10 +2824,14 @@ class IRBuilderBase {
Value *Alignment,
Value *OffsetValue = nullptr);
- /// Create an assume intrinsic call that represents an dereferencable
+ /// Create an assume intrinsic call that represents a dereferencable
/// assumption on the provided pointer.
LLVM_ABI CallInst *CreateDereferenceableAssumption(Value *PtrValue,
Value *SizeValue);
+
+ /// Create an assume intrinsic call that represents a nonnull assumption on
+ /// the provided pointer.
+ LLVM_ABI CallInst *CreateNonnullAssumption(Value *PtrValue);
};
/// This provides a uniform API for creating instructions and inserting
diff --git a/llvm/lib/IR/IRBuilder.cpp b/llvm/lib/IR/IRBuilder.cpp
index b322d5e0d0650..09945044c79a1 100644
--- a/llvm/lib/IR/IRBuilder.cpp
+++ b/llvm/lib/IR/IRBuilder.cpp
@@ -1386,13 +1386,20 @@ CallInst *IRBuilderBase::CreateAlignmentAssumption(const DataLayout &DL,
CallInst *IRBuilderBase::CreateDereferenceableAssumption(Value *PtrValue,
Value *SizeValue) {
assert(isa<PointerType>(PtrValue->getType()) &&
- "trying to create an deferenceable assumption on a non-pointer?");
+ "trying to create a deferenceable assumption on a non-pointer?");
SmallVector<Value *, 4> Vals({PtrValue, SizeValue});
OperandBundleDefT<Value *> DereferenceableOpB("dereferenceable", Vals);
return CreateAssumption(ConstantInt::getTrue(getContext()),
{DereferenceableOpB});
}
+CallInst *IRBuilderBase::CreateNonnullAssumption(Value *PtrValue) {
+ assert(isa<PointerType>(PtrValue->getType()) &&
+ "trying to create a nonnull assumption on a non-pointer?");
+ return CreateAssumption(ConstantInt::getTrue(getContext()),
+ OperandBundleDef("nonnull", PtrValue));
+}
+
IRBuilderDefaultInserter::~IRBuilderDefaultInserter() = default;
IRBuilderCallbackInserter::~IRBuilderCallbackInserter() = default;
IRBuilderFolder::~IRBuilderFolder() = default;
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
index 7244981b7fa5b..da258b3b34e27 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
@@ -3718,13 +3718,8 @@ Instruction *InstCombinerImpl::visitCallInst(CallInst &CI) {
if (match(IIOperand,
m_SpecificICmp(ICmpInst::ICMP_NE, m_Value(A), m_Zero())) &&
A->getType()->isPointerTy()) {
- if (auto *Replacement = buildAssumeFromKnowledge(
- {RetainedKnowledge{Attribute::NonNull, 0, A}}, Next, &AC, &DT)) {
-
- InsertNewInstBefore(Replacement, Next->getIterator());
- AC.registerAssumption(Replacement);
- return RemoveConditionFromAssume(II);
- }
+ Builder.CreateNonnullAssumption(A);
+ return eraseInstFromFunction(*II);
}
// Convert alignment assume like:
More information about the llvm-commits
mailing list