[llvm] [DataLayout] Add isNullPointerAllZeroes (PR #165314)
Robert Imschweiler via llvm-commits
llvm-commits at lists.llvm.org
Tue Nov 4 01:19:35 PST 2025
https://github.com/ro-i updated https://github.com/llvm/llvm-project/pull/165314
>From 107930bb7ac0c2a9867285a931042b707986e606 Mon Sep 17 00:00:00 2001
From: Robert Imschweiler <robert.imschweiler at amd.com>
Date: Mon, 27 Oct 2025 15:41:10 -0500
Subject: [PATCH 1/2] [DataLayout] Add isNullPointerAllZeroes
Add a function to check for a given address space if its null pointer
has an all-zero bit representation.
---
llvm/include/llvm/IR/DataLayout.h | 6 ++++++
llvm/unittests/IR/DataLayoutTest.cpp | 9 +++++++++
2 files changed, 15 insertions(+)
diff --git a/llvm/include/llvm/IR/DataLayout.h b/llvm/include/llvm/IR/DataLayout.h
index 54458201af0b3..d515d090f54e0 100644
--- a/llvm/include/llvm/IR/DataLayout.h
+++ b/llvm/include/llvm/IR/DataLayout.h
@@ -398,6 +398,12 @@ class DataLayout {
PS.HasExternalState;
}
+ /// Returns if the null pointer for this address space has an all-zero bit
+ /// representation.
+ bool isNullPointerAllZeroes(unsigned AddrSpace) const {
+ return AddrSpace == 0;
+ }
+
/// Returns whether this address space has an "unstable" pointer
/// representation. The bitwise pattern of such pointers is allowed to change
/// in a target-specific way. For example, this could be used for copying
diff --git a/llvm/unittests/IR/DataLayoutTest.cpp b/llvm/unittests/IR/DataLayoutTest.cpp
index 9ca88141ca0eb..d5336a89c5859 100644
--- a/llvm/unittests/IR/DataLayoutTest.cpp
+++ b/llvm/unittests/IR/DataLayoutTest.cpp
@@ -700,6 +700,15 @@ TEST(DataLayout, NonIntegralHelpers) {
}
}
+TEST(DataLayoutTest, IsNullPointerAllZeroes) {
+ EXPECT_TRUE(DataLayout("").isNullPointerAllZeroes(0));
+ EXPECT_FALSE(DataLayout("").isNullPointerAllZeroes(1));
+ EXPECT_TRUE(DataLayout("p:32:32").isNullPointerAllZeroes(0));
+ EXPECT_FALSE(DataLayout("p:32:32").isNullPointerAllZeroes(1));
+ EXPECT_TRUE(DataLayout("p:64:64").isNullPointerAllZeroes(0));
+ EXPECT_FALSE(DataLayout("p:64:64").isNullPointerAllZeroes(1));
+}
+
TEST(DataLayoutTest, CopyAssignmentInvalidatesStructLayout) {
DataLayout DL1 = cantFail(DataLayout::parse("p:32:32"));
DataLayout DL2 = cantFail(DataLayout::parse("p:64:64"));
>From 28f70abab70ae1091894720cd779d8a1433d73dd Mon Sep 17 00:00:00 2001
From: Robert Imschweiler <robert.imschweiler at amd.com>
Date: Tue, 4 Nov 2025 03:16:48 -0600
Subject: [PATCH 2/2] always return true for now
---
llvm/include/llvm/IR/DataLayout.h | 4 +---
llvm/unittests/IR/DataLayoutTest.cpp | 6 +++---
2 files changed, 4 insertions(+), 6 deletions(-)
diff --git a/llvm/include/llvm/IR/DataLayout.h b/llvm/include/llvm/IR/DataLayout.h
index d515d090f54e0..7e6d2f9de506d 100644
--- a/llvm/include/llvm/IR/DataLayout.h
+++ b/llvm/include/llvm/IR/DataLayout.h
@@ -400,9 +400,7 @@ class DataLayout {
/// Returns if the null pointer for this address space has an all-zero bit
/// representation.
- bool isNullPointerAllZeroes(unsigned AddrSpace) const {
- return AddrSpace == 0;
- }
+ bool isNullPointerAllZeroes(unsigned AddrSpace) const { return true; }
/// Returns whether this address space has an "unstable" pointer
/// representation. The bitwise pattern of such pointers is allowed to change
diff --git a/llvm/unittests/IR/DataLayoutTest.cpp b/llvm/unittests/IR/DataLayoutTest.cpp
index d5336a89c5859..e26c2aec6549d 100644
--- a/llvm/unittests/IR/DataLayoutTest.cpp
+++ b/llvm/unittests/IR/DataLayoutTest.cpp
@@ -702,11 +702,11 @@ TEST(DataLayout, NonIntegralHelpers) {
TEST(DataLayoutTest, IsNullPointerAllZeroes) {
EXPECT_TRUE(DataLayout("").isNullPointerAllZeroes(0));
- EXPECT_FALSE(DataLayout("").isNullPointerAllZeroes(1));
+ EXPECT_TRUE(DataLayout("").isNullPointerAllZeroes(1));
EXPECT_TRUE(DataLayout("p:32:32").isNullPointerAllZeroes(0));
- EXPECT_FALSE(DataLayout("p:32:32").isNullPointerAllZeroes(1));
+ EXPECT_TRUE(DataLayout("p:32:32").isNullPointerAllZeroes(1));
EXPECT_TRUE(DataLayout("p:64:64").isNullPointerAllZeroes(0));
- EXPECT_FALSE(DataLayout("p:64:64").isNullPointerAllZeroes(1));
+ EXPECT_TRUE(DataLayout("p:64:64").isNullPointerAllZeroes(1));
}
TEST(DataLayoutTest, CopyAssignmentInvalidatesStructLayout) {
More information about the llvm-commits
mailing list