[llvm] [InstCombine] Drop redundant dereferenceable assumptions (PR #202946)
Nikolas Klauser via llvm-commits
llvm-commits at lists.llvm.org
Wed Jun 10 05:09:32 PDT 2026
https://github.com/philnik777 created https://github.com/llvm/llvm-project/pull/202946
None
>From 337d6fa37cc79526d7c540490278cb298ccbbf34 Mon Sep 17 00:00:00 2001
From: Nikolas Klauser <nikolasklauser at berlin.de>
Date: Wed, 10 Jun 2026 14:03:31 +0200
Subject: [PATCH] [InstCombine] Drop redundant dereferenceable assumptions
---
.../Transforms/InstCombine/InstCombineCalls.cpp | 8 +++++++-
llvm/test/Transforms/InstCombine/assume.ll | 17 +++++++++++++++++
2 files changed, 24 insertions(+), 1 deletion(-)
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
index 22856c7d25e67..4f3fbb4d2dfb5 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
@@ -3677,8 +3677,14 @@ Instruction *InstCombinerImpl::visitCallInst(CallInst &CI) {
case BundleAttr::Dereferenceable: {
auto [Ptr, _, Count] = getAssumeDereferenceableInfo(OBU);
- if (Count && *Count == 0)
+ if (!Count)
+ break;
+
+ if (*Count == 0 || isDereferenceableAndAlignedPointer(
+ Ptr, Align(1), APInt(64, *Count),
+ getSimplifyQuery().getWithInstruction(II)))
return CallBase::removeOperandBundleAt(II, Idx);
+
break;
}
diff --git a/llvm/test/Transforms/InstCombine/assume.ll b/llvm/test/Transforms/InstCombine/assume.ll
index bf073b8d7ce70..e381325c807da 100644
--- a/llvm/test/Transforms/InstCombine/assume.ll
+++ b/llvm/test/Transforms/InstCombine/assume.ll
@@ -1257,6 +1257,23 @@ define void @assume_dereferenceable_variable_on_nullptr(i64 %count) {
ret void
}
+define void @redundant_assume_dereferenceable_2(ptr dereferenceable(2) %ptr) {
+; CHECK-LABEL: @redundant_assume_dereferenceable_2(
+; CHECK-NEXT: ret void
+;
+ call void @llvm.assume(i1 true) [ "dereferenceable"(ptr %ptr, i64 2) ]
+ ret void
+}
+
+define void @not_redundant_assume_dereferenceable_2(ptr dereferenceable(1) %ptr) {
+; CHECK-LABEL: @not_redundant_assume_dereferenceable_2(
+; CHECK-NEXT: call void @llvm.assume(i1 true) [ "dereferenceable"(ptr [[PTR:%.*]], i64 2) ]
+; CHECK-NEXT: ret void
+;
+ call void @llvm.assume(i1 true) [ "dereferenceable"(ptr %ptr, i64 2) ]
+ ret void
+}
+
declare void @use(i1)
declare void @llvm.dbg.value(metadata, metadata, metadata)
More information about the llvm-commits
mailing list