[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