[llvm] 1e08feb - [SimplifyCFG] Switch to use `paramHasNonNullAttr` (#125383)
via llvm-commits
llvm-commits at lists.llvm.org
Sun Jun 1 21:20:16 PDT 2025
Author: Yingwei Zheng
Date: 2025-06-02T12:20:13+08:00
New Revision: 1e08febf0ac5c9c6669bfb5b041b42e535a53cc7
URL: https://github.com/llvm/llvm-project/commit/1e08febf0ac5c9c6669bfb5b041b42e535a53cc7
DIFF: https://github.com/llvm/llvm-project/commit/1e08febf0ac5c9c6669bfb5b041b42e535a53cc7.diff
LOG: [SimplifyCFG] Switch to use `paramHasNonNullAttr` (#125383)
Added:
Modified:
llvm/lib/IR/Instructions.cpp
llvm/lib/Transforms/Utils/SimplifyCFG.cpp
llvm/test/Transforms/SimplifyCFG/UnreachableEliminate.ll
Removed:
################################################################################
diff --git a/llvm/lib/IR/Instructions.cpp b/llvm/lib/IR/Instructions.cpp
index f404e11b9c0f0..e22b04e1bb0b3 100644
--- a/llvm/lib/IR/Instructions.cpp
+++ b/llvm/lib/IR/Instructions.cpp
@@ -448,7 +448,7 @@ bool CallBase::paramHasNonNullAttr(unsigned ArgNo,
(AllowUndefOrPoison || paramHasAttr(ArgNo, Attribute::NoUndef)))
return true;
- if (getParamDereferenceableBytes(ArgNo) > 0 &&
+ if (paramHasAttr(ArgNo, Attribute::Dereferenceable) &&
!NullPointerIsDefined(
getCaller(),
getArgOperand(ArgNo)->getType()->getPointerAddressSpace()))
diff --git a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp
index 7840601d341b8..b7299e01b0c5f 100644
--- a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp
+++ b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp
@@ -8224,8 +8224,8 @@ static bool passingValueIsAlwaysUndefined(Value *V, Instruction *I, bool PtrValu
if (CB->isArgOperand(&Use)) {
unsigned ArgIdx = CB->getArgOperandNo(&Use);
// Passing null to a nonnnull+noundef argument is undefined.
- if (C->isNullValue() && CB->isPassingUndefUB(ArgIdx) &&
- CB->paramHasAttr(ArgIdx, Attribute::NonNull))
+ if (isa<ConstantPointerNull>(C) &&
+ CB->paramHasNonNullAttr(ArgIdx, /*AllowUndefOrPoison=*/false))
return !PtrValueMayBeModified;
// Passing undef to a noundef argument is undefined.
if (isa<UndefValue>(C) && CB->isPassingUndefUB(ArgIdx))
diff --git a/llvm/test/Transforms/SimplifyCFG/UnreachableEliminate.ll b/llvm/test/Transforms/SimplifyCFG/UnreachableEliminate.ll
index aae1ab032f36e..2da5d18b63f49 100644
--- a/llvm/test/Transforms/SimplifyCFG/UnreachableEliminate.ll
+++ b/llvm/test/Transforms/SimplifyCFG/UnreachableEliminate.ll
@@ -238,7 +238,7 @@ else:
}
declare ptr @fn_nonnull_noundef_arg(ptr nonnull noundef %p)
-declare ptr @fn_nonnull_deref_arg(ptr nonnull dereferenceable(4) %p)
+declare ptr @fn_deref_arg(ptr dereferenceable(4) %p)
declare ptr @fn_nonnull_deref_or_null_arg(ptr nonnull dereferenceable_or_null(4) %p)
declare ptr @fn_nonnull_arg(ptr nonnull %p)
declare ptr @fn_noundef_arg(ptr noundef %p)
@@ -271,7 +271,7 @@ define void @test9_deref(i1 %X, ptr %Y) {
; CHECK-NEXT: entry:
; CHECK-NEXT: [[TMP0:%.*]] = xor i1 [[X:%.*]], true
; CHECK-NEXT: call void @llvm.assume(i1 [[TMP0]])
-; CHECK-NEXT: [[TMP1:%.*]] = call ptr @fn_nonnull_deref_arg(ptr [[Y:%.*]])
+; CHECK-NEXT: [[TMP1:%.*]] = call ptr @fn_deref_arg(ptr [[Y:%.*]])
; CHECK-NEXT: ret void
;
entry:
@@ -282,7 +282,7 @@ if:
else:
%phi = phi ptr [ %Y, %entry ], [ null, %if ]
- call ptr @fn_nonnull_deref_arg(ptr %phi)
+ call ptr @fn_deref_arg(ptr %phi)
ret void
}
@@ -290,9 +290,8 @@ else:
define void @test9_deref_or_null(i1 %X, ptr %Y) {
; CHECK-LABEL: @test9_deref_or_null(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[TMP0:%.*]] = xor i1 [[X:%.*]], true
-; CHECK-NEXT: call void @llvm.assume(i1 [[TMP0]])
-; CHECK-NEXT: [[TMP1:%.*]] = call ptr @fn_nonnull_deref_or_null_arg(ptr [[Y:%.*]])
+; CHECK-NEXT: [[Y:%.*]] = select i1 [[X:%.*]], ptr null, ptr [[Y1:%.*]]
+; CHECK-NEXT: [[TMP1:%.*]] = call ptr @fn_nonnull_deref_or_null_arg(ptr [[Y]])
; CHECK-NEXT: ret void
;
entry:
More information about the llvm-commits
mailing list