[llvm] [TTI] Add getPointerInfos/getPointerInfo query for target address spaces (PR #213311)
Petr Kurapov via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 4 06:04:59 PDT 2026
https://github.com/kurapov-peter updated https://github.com/llvm/llvm-project/pull/213311
>From 626e648810536c1ff936268635044816623746fc Mon Sep 17 00:00:00 2001
From: Petr Kurapov <petr.kurapov at amd.com>
Date: Fri, 31 Jul 2026 11:31:03 -0500
Subject: [PATCH 1/3] [TTI] Add getPointerInfos/getPointerInfo query for target
address spaces
Adds a PointerInfo struct describing an address space's number and
target-given name, plus TTI query methods to enumerate all address
spaces a target describes or look up a single one. Includes a unit
test for the new queries.
---
.../llvm/Analysis/TargetTransformInfo.h | 20 ++++++
.../llvm/Analysis/TargetTransformInfoImpl.h | 17 +++++
llvm/lib/Analysis/TargetTransformInfo.cpp | 10 +++
llvm/unittests/Analysis/CMakeLists.txt | 1 +
.../Analysis/TargetTransformInfoTest.cpp | 72 +++++++++++++++++++
5 files changed, 120 insertions(+)
create mode 100644 llvm/unittests/Analysis/TargetTransformInfoTest.cpp
diff --git a/llvm/include/llvm/Analysis/TargetTransformInfo.h b/llvm/include/llvm/Analysis/TargetTransformInfo.h
index 107ae4dba5075..3ee61de7fff3d 100644
--- a/llvm/include/llvm/Analysis/TargetTransformInfo.h
+++ b/llvm/include/llvm/Analysis/TargetTransformInfo.h
@@ -547,6 +547,26 @@ class TargetTransformInfo {
/// Return false if a \p AS0 address cannot possibly alias a \p AS1 address.
LLVM_ABI bool addrspacesMayAlias(unsigned AS0, unsigned AS1) const;
+ /// Describes a single address space exposed by the target.
+ struct PointerInfo {
+ /// The address space number, in the target's own numbering.
+ unsigned AddrSpace = 0;
+ /// The target's name for this address space, e.g. "global". Empty if the
+ /// target does not name it.
+ StringRef Name;
+ };
+
+ /// Returns every address space the target gives a meaning to, sorted by
+ /// address space number.
+ ///
+ /// \returns an empty list for targets that do not describe their address
+ /// spaces.
+ LLVM_ABI SmallVector<PointerInfo, 8> getPointerInfos() const;
+
+ /// Returns the description of address space \p AS, or std::nullopt if the
+ /// target does not describe it.
+ LLVM_ABI std::optional<PointerInfo> getPointerInfo(unsigned AS) const;
+
/// Returns the address space ID for a target's 'flat' address space. Note
/// this is not necessarily the same as addrspace(0), which LLVM sometimes
/// refers to as the generic address space. The flat address space is a
diff --git a/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h b/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h
index 25574a2d2c0e5..ef6d7a635294c 100644
--- a/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h
+++ b/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h
@@ -144,6 +144,23 @@ class LLVM_ABI TargetTransformInfoImplBase {
return true;
}
+ virtual SmallVector<TTI::PointerInfo, 8> getPointerInfos() const {
+ return {};
+ }
+
+ virtual std::optional<TTI::PointerInfo> getPointerInfo(unsigned AS) const {
+ // Targets only need to override getPointerInfos(); this searches the list
+ // they report, which is sorted by address space number.
+ SmallVector<TTI::PointerInfo, 8> Infos = getPointerInfos();
+ const auto *I = lower_bound(Infos, AS, [](const TTI::PointerInfo &PI,
+ unsigned AS) {
+ return PI.AddrSpace < AS;
+ });
+ if (I == Infos.end() || I->AddrSpace != AS)
+ return std::nullopt;
+ return *I;
+ }
+
virtual unsigned getFlatAddressSpace() const { return -1; }
virtual bool collectFlatAddressOperands(SmallVectorImpl<int> &OpIndexes,
diff --git a/llvm/lib/Analysis/TargetTransformInfo.cpp b/llvm/lib/Analysis/TargetTransformInfo.cpp
index 595c2d10dd118..82a85334ce5a2 100644
--- a/llvm/lib/Analysis/TargetTransformInfo.cpp
+++ b/llvm/lib/Analysis/TargetTransformInfo.cpp
@@ -312,6 +312,16 @@ bool llvm::TargetTransformInfo::addrspacesMayAlias(unsigned FromAS,
return TTIImpl->addrspacesMayAlias(FromAS, ToAS);
}
+SmallVector<TargetTransformInfo::PointerInfo, 8>
+TargetTransformInfo::getPointerInfos() const {
+ return TTIImpl->getPointerInfos();
+}
+
+std::optional<TargetTransformInfo::PointerInfo>
+TargetTransformInfo::getPointerInfo(unsigned AS) const {
+ return TTIImpl->getPointerInfo(AS);
+}
+
unsigned TargetTransformInfo::getFlatAddressSpace() const {
return TTIImpl->getFlatAddressSpace();
}
diff --git a/llvm/unittests/Analysis/CMakeLists.txt b/llvm/unittests/Analysis/CMakeLists.txt
index 50bf4539e7984..66ecdb4a815bc 100644
--- a/llvm/unittests/Analysis/CMakeLists.txt
+++ b/llvm/unittests/Analysis/CMakeLists.txt
@@ -53,6 +53,7 @@ set(ANALYSIS_TEST_SOURCES
ScalarEvolutionTest.cpp
SparsePropagation.cpp
TargetLibraryInfoTest.cpp
+ TargetTransformInfoTest.cpp
TensorSpecTest.cpp
TBAATest.cpp
UnrollAnalyzerTest.cpp
diff --git a/llvm/unittests/Analysis/TargetTransformInfoTest.cpp b/llvm/unittests/Analysis/TargetTransformInfoTest.cpp
new file mode 100644
index 0000000000000..280f74599d04a
--- /dev/null
+++ b/llvm/unittests/Analysis/TargetTransformInfoTest.cpp
@@ -0,0 +1,72 @@
+//===- TargetTransformInfoTest.cpp - TargetTransformInfo unit tests -------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/Analysis/TargetTransformInfo.h"
+#include "llvm/Analysis/TargetTransformInfoImpl.h"
+#include "llvm/IR/DataLayout.h"
+#include "gmock/gmock.h"
+#include "gtest/gtest.h"
+
+using namespace llvm;
+
+namespace {
+
+// A target that describes some of its address spaces, but not all of them.
+class FakeTTIImpl : public TargetTransformInfoImplBase {
+public:
+ explicit FakeTTIImpl(const DataLayout &DL) : TargetTransformInfoImplBase(DL) {}
+
+ SmallVector<TTI::PointerInfo, 8> getPointerInfos() const override {
+ return {TTI::PointerInfo{1, "global"}, TTI::PointerInfo{3, "local"},
+ TTI::PointerInfo{7, "private"}};
+ }
+};
+
+TargetTransformInfo makeFakeTTI(const DataLayout &DL) {
+ return TargetTransformInfo(std::make_unique<const FakeTTIImpl>(DL));
+}
+
+TEST(TargetTransformInfoTest, PointerInfosDefaultsToEmpty) {
+ DataLayout DL("p1:32:32-p2:64:64");
+ TargetTransformInfo TTI(DL);
+
+ EXPECT_THAT(TTI.getPointerInfos(), ::testing::IsEmpty());
+}
+
+TEST(TargetTransformInfoTest, PointerInfoDefaultsToNullopt) {
+ DataLayout DL("p1:32:32");
+ TargetTransformInfo TTI(DL);
+
+ EXPECT_FALSE(TTI.getPointerInfo(0).has_value());
+}
+
+TEST(TargetTransformInfoTest, PointerInfoFindsDescribedAddrSpace) {
+ DataLayout DL("");
+ TargetTransformInfo TTI = makeFakeTTI(DL);
+
+ std::optional<TTI::PointerInfo> PI = TTI.getPointerInfo(3);
+ ASSERT_TRUE(PI.has_value());
+ EXPECT_EQ(PI->AddrSpace, 3u);
+ EXPECT_EQ(PI->Name, "local");
+}
+
+TEST(TargetTransformInfoTest, PointerInfoFindsEveryReportedAddrSpace) {
+ DataLayout DL("p1:32:32");
+ TargetTransformInfo TTI = makeFakeTTI(DL);
+
+ for (const TTI::PointerInfo &Reported : TTI.getPointerInfos()) {
+ std::optional<TTI::PointerInfo> PI = TTI.getPointerInfo(Reported.AddrSpace);
+ ASSERT_TRUE(PI.has_value()) << "address space " << Reported.AddrSpace;
+ EXPECT_EQ(PI->AddrSpace, Reported.AddrSpace);
+ EXPECT_EQ(PI->Name, Reported.Name);
+ }
+
+ EXPECT_FALSE(TTI.getPointerInfo(999).has_value());
+}
+
+} // end anonymous namespace
>From 796438578465a8751bcd24a19ebc53239b92c9df Mon Sep 17 00:00:00 2001
From: Petr Kurapov <petr.kurapov at amd.com>
Date: Fri, 31 Jul 2026 12:43:56 -0500
Subject: [PATCH 2/3] formate
---
.../llvm/Analysis/TargetTransformInfo.h | 25 +++++++------------
.../llvm/Analysis/TargetTransformInfoImpl.h | 8 +++---
llvm/lib/Analysis/TargetTransformInfo.cpp | 11 ++++----
.../Analysis/TargetTransformInfoTest.cpp | 3 ++-
4 files changed, 20 insertions(+), 27 deletions(-)
diff --git a/llvm/include/llvm/Analysis/TargetTransformInfo.h b/llvm/include/llvm/Analysis/TargetTransformInfo.h
index 3ee61de7fff3d..96c9c352a4897 100644
--- a/llvm/include/llvm/Analysis/TargetTransformInfo.h
+++ b/llvm/include/llvm/Analysis/TargetTransformInfo.h
@@ -235,9 +235,7 @@ class IntrinsicCostAttributes {
const SmallVectorImpl<const Value *> &getArgs() const { return Arguments; }
const SmallVectorImpl<Type *> &getArgTypes() const { return ParamTys; }
- bool isTypeBasedOnly() const {
- return Arguments.empty();
- }
+ bool isTypeBasedOnly() const { return Arguments.empty(); }
bool skipScalarizationCost() const { return ScalarizationCost.isValid(); }
};
@@ -1286,9 +1284,9 @@ class TargetTransformInfo {
SK_PermuteSingleSrc, ///< Shuffle elements of single source vector with any
///< shuffle mask.
SK_Splice ///< Concatenates elements from the first input vector
- ///< with elements of the second input vector. Returning
- ///< a vector of the same type as the input vectors.
- ///< Index indicates start offset in first input vector.
+ ///< with elements of the second input vector. Returning
+ ///< a vector of the same type as the input vectors.
+ ///< Index indicates start offset in first input vector.
};
/// Additional information about an operand's possible values.
@@ -1314,21 +1312,16 @@ class TargetTransformInfo {
OperandValueProperties Properties = OP_None;
bool isConstant() const {
- return Kind == OK_UniformConstantValue || Kind == OK_NonUniformConstantValue;
+ return Kind == OK_UniformConstantValue ||
+ Kind == OK_NonUniformConstantValue;
}
bool isUniform() const {
return Kind == OK_UniformConstantValue || Kind == OK_UniformValue;
}
- bool isPowerOf2() const {
- return Properties == OP_PowerOf2;
- }
- bool isNegatedPowerOf2() const {
- return Properties == OP_NegatedPowerOf2;
- }
+ bool isPowerOf2() const { return Properties == OP_PowerOf2; }
+ bool isNegatedPowerOf2() const { return Properties == OP_NegatedPowerOf2; }
- OperandValueInfo getNoProps() const {
- return {Kind, OP_None};
- }
+ OperandValueInfo getNoProps() const { return {Kind, OP_None}; }
OperandValueInfo mergeWith(const OperandValueInfo OpInfoY) {
OperandValueKind MergeKind = OK_AnyValue;
diff --git a/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h b/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h
index ef6d7a635294c..6a94f7afb6dc8 100644
--- a/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h
+++ b/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h
@@ -152,10 +152,10 @@ class LLVM_ABI TargetTransformInfoImplBase {
// Targets only need to override getPointerInfos(); this searches the list
// they report, which is sorted by address space number.
SmallVector<TTI::PointerInfo, 8> Infos = getPointerInfos();
- const auto *I = lower_bound(Infos, AS, [](const TTI::PointerInfo &PI,
- unsigned AS) {
- return PI.AddrSpace < AS;
- });
+ const auto *I =
+ lower_bound(Infos, AS, [](const TTI::PointerInfo &PI, unsigned AS) {
+ return PI.AddrSpace < AS;
+ });
if (I == Infos.end() || I->AddrSpace != AS)
return std::nullopt;
return *I;
diff --git a/llvm/lib/Analysis/TargetTransformInfo.cpp b/llvm/lib/Analysis/TargetTransformInfo.cpp
index 82a85334ce5a2..e986d1d6b2337 100644
--- a/llvm/lib/Analysis/TargetTransformInfo.cpp
+++ b/llvm/lib/Analysis/TargetTransformInfo.cpp
@@ -733,12 +733,11 @@ bool TargetTransformInfo::isFPVectorizationPotentiallyUnsafe() const {
return TTIImpl->isFPVectorizationPotentiallyUnsafe();
}
-bool
-TargetTransformInfo::allowsMisalignedMemoryAccesses(LLVMContext &Context,
- unsigned BitWidth,
- unsigned AddressSpace,
- Align Alignment,
- unsigned *Fast) const {
+bool TargetTransformInfo::allowsMisalignedMemoryAccesses(LLVMContext &Context,
+ unsigned BitWidth,
+ unsigned AddressSpace,
+ Align Alignment,
+ unsigned *Fast) const {
return TTIImpl->allowsMisalignedMemoryAccesses(Context, BitWidth,
AddressSpace, Alignment, Fast);
}
diff --git a/llvm/unittests/Analysis/TargetTransformInfoTest.cpp b/llvm/unittests/Analysis/TargetTransformInfoTest.cpp
index 280f74599d04a..e4e9469a6500e 100644
--- a/llvm/unittests/Analysis/TargetTransformInfoTest.cpp
+++ b/llvm/unittests/Analysis/TargetTransformInfoTest.cpp
@@ -19,7 +19,8 @@ namespace {
// A target that describes some of its address spaces, but not all of them.
class FakeTTIImpl : public TargetTransformInfoImplBase {
public:
- explicit FakeTTIImpl(const DataLayout &DL) : TargetTransformInfoImplBase(DL) {}
+ explicit FakeTTIImpl(const DataLayout &DL)
+ : TargetTransformInfoImplBase(DL) {}
SmallVector<TTI::PointerInfo, 8> getPointerInfos() const override {
return {TTI::PointerInfo{1, "global"}, TTI::PointerInfo{3, "local"},
>From 1d277c379cf4b3573cf373c122ea5b84cbecfb9d Mon Sep 17 00:00:00 2001
From: Petr Kurapov <petr.kurapov at amd.com>
Date: Tue, 4 Aug 2026 08:04:25 -0500
Subject: [PATCH 3/3] return plain uints
---
.../llvm/Analysis/TargetTransformInfo.h | 17 +-----
.../llvm/Analysis/TargetTransformInfoImpl.h | 17 +-----
llvm/lib/Analysis/TargetTransformInfo.cpp | 15 +++--
.../Analysis/TargetTransformInfoTest.cpp | 57 ++++++++-----------
4 files changed, 35 insertions(+), 71 deletions(-)
diff --git a/llvm/include/llvm/Analysis/TargetTransformInfo.h b/llvm/include/llvm/Analysis/TargetTransformInfo.h
index 96c9c352a4897..493150efc33b8 100644
--- a/llvm/include/llvm/Analysis/TargetTransformInfo.h
+++ b/llvm/include/llvm/Analysis/TargetTransformInfo.h
@@ -545,25 +545,12 @@ class TargetTransformInfo {
/// Return false if a \p AS0 address cannot possibly alias a \p AS1 address.
LLVM_ABI bool addrspacesMayAlias(unsigned AS0, unsigned AS1) const;
- /// Describes a single address space exposed by the target.
- struct PointerInfo {
- /// The address space number, in the target's own numbering.
- unsigned AddrSpace = 0;
- /// The target's name for this address space, e.g. "global". Empty if the
- /// target does not name it.
- StringRef Name;
- };
-
/// Returns every address space the target gives a meaning to, sorted by
- /// address space number.
+ /// address space number and free of duplicates.
///
/// \returns an empty list for targets that do not describe their address
/// spaces.
- LLVM_ABI SmallVector<PointerInfo, 8> getPointerInfos() const;
-
- /// Returns the description of address space \p AS, or std::nullopt if the
- /// target does not describe it.
- LLVM_ABI std::optional<PointerInfo> getPointerInfo(unsigned AS) const;
+ LLVM_ABI SmallVector<unsigned, 8> getAddressSpaces() const;
/// Returns the address space ID for a target's 'flat' address space. Note
/// this is not necessarily the same as addrspace(0), which LLVM sometimes
diff --git a/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h b/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h
index 6a94f7afb6dc8..6e3cdebf5bba0 100644
--- a/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h
+++ b/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h
@@ -144,22 +144,7 @@ class LLVM_ABI TargetTransformInfoImplBase {
return true;
}
- virtual SmallVector<TTI::PointerInfo, 8> getPointerInfos() const {
- return {};
- }
-
- virtual std::optional<TTI::PointerInfo> getPointerInfo(unsigned AS) const {
- // Targets only need to override getPointerInfos(); this searches the list
- // they report, which is sorted by address space number.
- SmallVector<TTI::PointerInfo, 8> Infos = getPointerInfos();
- const auto *I =
- lower_bound(Infos, AS, [](const TTI::PointerInfo &PI, unsigned AS) {
- return PI.AddrSpace < AS;
- });
- if (I == Infos.end() || I->AddrSpace != AS)
- return std::nullopt;
- return *I;
- }
+ virtual SmallVector<unsigned, 8> getAddressSpaces() const { return {}; }
virtual unsigned getFlatAddressSpace() const { return -1; }
diff --git a/llvm/lib/Analysis/TargetTransformInfo.cpp b/llvm/lib/Analysis/TargetTransformInfo.cpp
index e986d1d6b2337..305913bbe6613 100644
--- a/llvm/lib/Analysis/TargetTransformInfo.cpp
+++ b/llvm/lib/Analysis/TargetTransformInfo.cpp
@@ -7,6 +7,7 @@
//===----------------------------------------------------------------------===//
#include "llvm/Analysis/TargetTransformInfo.h"
+#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/Analysis/CFG.h"
#include "llvm/Analysis/LoopIterator.h"
@@ -21,6 +22,7 @@
#include "llvm/IR/Operator.h"
#include "llvm/InitializePasses.h"
#include "llvm/Support/CommandLine.h"
+#include <functional>
#include <optional>
#include <utility>
@@ -312,14 +314,11 @@ bool llvm::TargetTransformInfo::addrspacesMayAlias(unsigned FromAS,
return TTIImpl->addrspacesMayAlias(FromAS, ToAS);
}
-SmallVector<TargetTransformInfo::PointerInfo, 8>
-TargetTransformInfo::getPointerInfos() const {
- return TTIImpl->getPointerInfos();
-}
-
-std::optional<TargetTransformInfo::PointerInfo>
-TargetTransformInfo::getPointerInfo(unsigned AS) const {
- return TTIImpl->getPointerInfo(AS);
+SmallVector<unsigned, 8> TargetTransformInfo::getAddressSpaces() const {
+ SmallVector<unsigned, 8> AddrSpaces = TTIImpl->getAddressSpaces();
+ assert(is_sorted(AddrSpaces, std::less_equal<>()) &&
+ "target reported address spaces out of order or duplicated");
+ return AddrSpaces;
}
unsigned TargetTransformInfo::getFlatAddressSpace() const {
diff --git a/llvm/unittests/Analysis/TargetTransformInfoTest.cpp b/llvm/unittests/Analysis/TargetTransformInfoTest.cpp
index e4e9469a6500e..685b2751e159b 100644
--- a/llvm/unittests/Analysis/TargetTransformInfoTest.cpp
+++ b/llvm/unittests/Analysis/TargetTransformInfoTest.cpp
@@ -15,59 +15,52 @@
using namespace llvm;
namespace {
-
-// A target that describes some of its address spaces, but not all of them.
class FakeTTIImpl : public TargetTransformInfoImplBase {
public:
- explicit FakeTTIImpl(const DataLayout &DL)
- : TargetTransformInfoImplBase(DL) {}
+ FakeTTIImpl(const DataLayout &DL, SmallVector<unsigned, 8> AddrSpaces)
+ : TargetTransformInfoImplBase(DL), AddrSpaces(std::move(AddrSpaces)) {}
- SmallVector<TTI::PointerInfo, 8> getPointerInfos() const override {
- return {TTI::PointerInfo{1, "global"}, TTI::PointerInfo{3, "local"},
- TTI::PointerInfo{7, "private"}};
+ SmallVector<unsigned, 8> getAddressSpaces() const override {
+ return AddrSpaces;
}
+
+private:
+ SmallVector<unsigned, 8> AddrSpaces;
};
-TargetTransformInfo makeFakeTTI(const DataLayout &DL) {
- return TargetTransformInfo(std::make_unique<const FakeTTIImpl>(DL));
+TargetTransformInfo makeFakeTTI(const DataLayout &DL,
+ SmallVector<unsigned, 8> AddrSpaces) {
+ return TargetTransformInfo(
+ std::make_unique<const FakeTTIImpl>(DL, std::move(AddrSpaces)));
}
-TEST(TargetTransformInfoTest, PointerInfosDefaultsToEmpty) {
+TEST(TargetTransformInfoTest, AddressSpacesDefaultsToEmpty) {
DataLayout DL("p1:32:32-p2:64:64");
TargetTransformInfo TTI(DL);
- EXPECT_THAT(TTI.getPointerInfos(), ::testing::IsEmpty());
+ EXPECT_THAT(TTI.getAddressSpaces(), ::testing::IsEmpty());
}
-TEST(TargetTransformInfoTest, PointerInfoDefaultsToNullopt) {
+TEST(TargetTransformInfoTest, AddressSpacesReportsDescribedAddrSpaces) {
DataLayout DL("p1:32:32");
- TargetTransformInfo TTI(DL);
+ TargetTransformInfo TTI = makeFakeTTI(DL, {1, 3, 7});
- EXPECT_FALSE(TTI.getPointerInfo(0).has_value());
+ EXPECT_THAT(TTI.getAddressSpaces(), ::testing::ElementsAre(1u, 3u, 7u));
}
-TEST(TargetTransformInfoTest, PointerInfoFindsDescribedAddrSpace) {
+#if GTEST_HAS_DEATH_TEST
+#ifndef NDEBUG
+TEST(TargetTransformInfoTest, AddressSpacesOutOfOrderOrDuplicatedIsRejected) {
DataLayout DL("");
- TargetTransformInfo TTI = makeFakeTTI(DL);
+ TargetTransformInfo TTI = makeFakeTTI(DL, {3, 1, 7});
- std::optional<TTI::PointerInfo> PI = TTI.getPointerInfo(3);
- ASSERT_TRUE(PI.has_value());
- EXPECT_EQ(PI->AddrSpace, 3u);
- EXPECT_EQ(PI->Name, "local");
-}
+ EXPECT_DEATH(TTI.getAddressSpaces(), "out of order or duplicated");
-TEST(TargetTransformInfoTest, PointerInfoFindsEveryReportedAddrSpace) {
- DataLayout DL("p1:32:32");
- TargetTransformInfo TTI = makeFakeTTI(DL);
-
- for (const TTI::PointerInfo &Reported : TTI.getPointerInfos()) {
- std::optional<TTI::PointerInfo> PI = TTI.getPointerInfo(Reported.AddrSpace);
- ASSERT_TRUE(PI.has_value()) << "address space " << Reported.AddrSpace;
- EXPECT_EQ(PI->AddrSpace, Reported.AddrSpace);
- EXPECT_EQ(PI->Name, Reported.Name);
- }
+ TTI = makeFakeTTI(DL, {1, 3, 3});
- EXPECT_FALSE(TTI.getPointerInfo(999).has_value());
+ EXPECT_DEATH(TTI.getAddressSpaces(), "out of order or duplicated");
}
+#endif // NDEBUG
+#endif // GTEST_HAS_DEATH_TEST
} // end anonymous namespace
More information about the llvm-commits
mailing list