[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