[llvm] 8b3e345 - [ADT] Clean up TinyPtrVector
Benjamin Kramer via llvm-commits
llvm-commits at lists.llvm.org
Thu Jun 26 02:16:05 PDT 2025
Author: Benjamin Kramer
Date: 2025-06-26T11:13:48+02:00
New Revision: 8b3e345002f39e288109e0d0c1a54d76a1e0bc9d
URL: https://github.com/llvm/llvm-project/commit/8b3e345002f39e288109e0d0c1a54d76a1e0bc9d
DIFF: https://github.com/llvm/llvm-project/commit/8b3e345002f39e288109e0d0c1a54d76a1e0bc9d.diff
LOG: [ADT] Clean up TinyPtrVector
- Remove implicit ArrayRef conversion, ArrayRef has conversions now.
- Remove extra dyn_casts if the TinyPtrVector can only be a big vector
No functionality change intended.
Added:
Modified:
llvm/include/llvm/ADT/TinyPtrVector.h
Removed:
################################################################################
diff --git a/llvm/include/llvm/ADT/TinyPtrVector.h b/llvm/include/llvm/ADT/TinyPtrVector.h
index 501500793509a..8d7a07b5e9eb5 100644
--- a/llvm/include/llvm/ADT/TinyPtrVector.h
+++ b/llvm/include/llvm/ADT/TinyPtrVector.h
@@ -132,47 +132,17 @@ class TinyPtrVector {
: Count == 1 ? PtrUnion(Value)
: PtrUnion(new VecTy(Count, Value))) {}
- // implicit conversion operator to ArrayRef.
- operator ArrayRef<EltTy>() const {
- if (Val.isNull())
- return {};
- if (isa<EltTy>(Val))
- return *Val.getAddrOfPtr1();
- return *cast<VecTy *>(Val);
- }
-
- // implicit conversion operator to MutableArrayRef.
- operator MutableArrayRef<EltTy>() {
- if (Val.isNull())
- return {};
- if (isa<EltTy>(Val))
- return *Val.getAddrOfPtr1();
- return *cast<VecTy *>(Val);
- }
-
- // Implicit conversion to ArrayRef<U> if EltTy* implicitly converts to U*.
- template <
- typename U,
- std::enable_if_t<std::is_convertible<ArrayRef<EltTy>, ArrayRef<U>>::value,
- bool> = false>
- operator ArrayRef<U>() const {
- return operator ArrayRef<EltTy>();
- }
-
bool empty() const {
// This vector can be empty if it contains no element, or if it
// contains a pointer to an empty vector.
- if (Val.isNull()) return true;
- if (VecTy *Vec = dyn_cast_if_present<VecTy *>(Val))
- return Vec->empty();
- return false;
+ if (isa<EltTy>(Val))
+ return Val.isNull();
+ return cast<VecTy *>(Val)->empty();
}
unsigned size() const {
- if (empty())
- return 0;
if (isa<EltTy>(Val))
- return 1;
+ return Val.isNull() ? 0 : 1;
return cast<VecTy *>(Val)->size();
}
@@ -214,6 +184,9 @@ class TinyPtrVector {
return const_reverse_iterator(begin());
}
+ EltTy *data() { return begin(); }
+ const EltTy *data() const { return begin(); }
+
EltTy operator[](unsigned i) const {
assert(!Val.isNull() && "can't index into an empty vector");
if (isa<EltTy>(Val)) {
@@ -250,8 +223,8 @@ class TinyPtrVector {
// If we have a single value, convert to a vector.
if (isa<EltTy>(Val)) {
EltTy V = cast<EltTy>(Val);
- Val = new VecTy();
- cast<VecTy *>(Val)->push_back(V);
+ Val = new VecTy({V, NewVal});
+ return;
}
// Add the new value, we know we have a vector.
@@ -261,20 +234,19 @@ class TinyPtrVector {
void pop_back() {
// If we have a single value, convert to empty.
if (isa<EltTy>(Val))
- Val = (EltTy)nullptr;
- else if (VecTy *Vec = cast<VecTy *>(Val))
- Vec->pop_back();
+ Val = EltTy();
+ else
+ cast<VecTy *>(Val)->pop_back();
}
void clear() {
// If we have a single value, convert to empty.
if (isa<EltTy>(Val)) {
Val = EltTy();
- } else if (VecTy *Vec = dyn_cast_if_present<VecTy *>(Val)) {
+ } else {
// If we have a vector form, just clear it.
- Vec->clear();
+ cast<VecTy *>(Val)->clear();
}
- // Otherwise, we're already empty.
}
iterator erase(iterator I) {
@@ -285,10 +257,10 @@ class TinyPtrVector {
if (isa<EltTy>(Val)) {
if (I == begin())
Val = EltTy();
- } else if (VecTy *Vec = dyn_cast_if_present<VecTy *>(Val)) {
+ } else {
// multiple items in a vector; just do the erase, there is no
// benefit to collapsing back to a pointer
- return Vec->erase(I);
+ return cast<VecTy *>(Val)->erase(I);
}
return end();
}
@@ -301,8 +273,8 @@ class TinyPtrVector {
if (isa<EltTy>(Val)) {
if (S == begin() && S != E)
Val = EltTy();
- } else if (VecTy *Vec = dyn_cast_if_present<VecTy *>(Val)) {
- return Vec->erase(S, E);
+ } else {
+ return cast<VecTy *>(Val)->erase(S, E);
}
return end();
}
More information about the llvm-commits
mailing list