[llvm] a57bfb7 - [InstCombine] Drop redundant dereferenceable assumptions (#202946)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Jun 11 08:23:31 PDT 2026
Author: Nikolas Klauser
Date: 2026-06-11T15:23:26Z
New Revision: a57bfb71f7edee9d24a64473b81caf5555b85a3c
URL: https://github.com/llvm/llvm-project/commit/a57bfb71f7edee9d24a64473b81caf5555b85a3c
DIFF: https://github.com/llvm/llvm-project/commit/a57bfb71f7edee9d24a64473b81caf5555b85a3c.diff
LOG: [InstCombine] Drop redundant dereferenceable assumptions (#202946)
Added:
Modified:
llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
llvm/test/Transforms/InstCombine/assume.ll
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
index 9f6044df52553..0fbc61086f65a 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
@@ -3695,8 +3695,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 RemoveBundle();
+
break;
}
diff --git a/llvm/test/Transforms/InstCombine/assume.ll b/llvm/test/Transforms/InstCombine/assume.ll
index bf073b8d7ce70..5da973f20fdd2 100644
--- a/llvm/test/Transforms/InstCombine/assume.ll
+++ b/llvm/test/Transforms/InstCombine/assume.ll
@@ -1257,6 +1257,32 @@ 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 @redundant_assume_dereferenceable_2_via_assume(ptr %ptr) {
+; CHECK-LABEL: @redundant_assume_dereferenceable_2_via_assume(
+; 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) ]
+ 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