From c45c927526220f10722010865bb5de71790397e1 Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Thu, 24 Apr 2025 19:34:23 +0200 Subject: [PATCH] Attributor: Don't rely on use_empty for constants This allows inferring noalias on a null argument parameter. This avoids a non-NFC diff in a future change. --- llvm/lib/Transforms/IPO/AttributorAttributes.cpp | 2 +- llvm/test/Transforms/Attributor/issue87856.ll | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/llvm/lib/Transforms/IPO/AttributorAttributes.cpp b/llvm/lib/Transforms/IPO/AttributorAttributes.cpp index ac56df3823e20..1032dede7cb36 100644 --- a/llvm/lib/Transforms/IPO/AttributorAttributes.cpp +++ b/llvm/lib/Transforms/IPO/AttributorAttributes.cpp @@ -5746,7 +5746,7 @@ bool AANoCapture::isImpliedByIR(Attributor &A, const IRPosition &IRP, assert(ImpliedAttributeKind == Attribute::Captures && "Unexpected attribute kind"); Value &V = IRP.getAssociatedValue(); - if (!IRP.isArgumentPosition()) + if (!isa(V) && !IRP.isArgumentPosition()) return V.use_empty(); // You cannot "capture" null in the default address space. diff --git a/llvm/test/Transforms/Attributor/issue87856.ll b/llvm/test/Transforms/Attributor/issue87856.ll index 4990ef909dfaa..592ec33a31369 100644 --- a/llvm/test/Transforms/Attributor/issue87856.ll +++ b/llvm/test/Transforms/Attributor/issue87856.ll @@ -4,7 +4,7 @@ define void @null_ptr_is_valid_call_with_null() #0 { ; CHECK-LABEL: define void @null_ptr_is_valid_call_with_null( ; CHECK-SAME: ) #[[ATTR0:[0-9]+]] { -; CHECK-NEXT: call void @store_as0(ptr nofree noundef writeonly null) #[[ATTR4:[0-9]+]] +; CHECK-NEXT: call void @store_as0(ptr noalias nofree noundef writeonly null) #[[ATTR4:[0-9]+]] ; CHECK-NEXT: ret void ; call void @store_as0(ptr null)