Skip to content

Commit

Permalink
[mlir] Mark isa/dyn_cast/cast/... member functions deprecated. (#90413
Browse files Browse the repository at this point in the history
)

This also removes the member overload in TypeSwitch.

All other users have been removed in
fac349a and
bd9fdce.
  • Loading branch information
chsigg authored Apr 30, 2024
1 parent f78949a commit 7ac1fb0
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 22 deletions.
24 changes: 2 additions & 22 deletions llvm/include/llvm/ADT/TypeSwitch.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,29 +61,9 @@ template <typename DerivedT, typename T> class TypeSwitchBase {
}

protected:
/// Trait to check whether `ValueT` provides a 'dyn_cast' method with type
/// `CastT`.
template <typename ValueT, typename CastT>
using has_dyn_cast_t =
decltype(std::declval<ValueT &>().template dyn_cast<CastT>());

/// Attempt to dyn_cast the given `value` to `CastT`. This overload is
/// selected if `value` already has a suitable dyn_cast method.
/// Attempt to dyn_cast the given `value` to `CastT`.
template <typename CastT, typename ValueT>
static decltype(auto) castValue(
ValueT &&value,
std::enable_if_t<is_detected<has_dyn_cast_t, ValueT, CastT>::value> * =
nullptr) {
return value.template dyn_cast<CastT>();
}

/// Attempt to dyn_cast the given `value` to `CastT`. This overload is
/// selected if llvm::dyn_cast should be used.
template <typename CastT, typename ValueT>
static decltype(auto) castValue(
ValueT &&value,
std::enable_if_t<!is_detected<has_dyn_cast_t, ValueT, CastT>::value> * =
nullptr) {
static decltype(auto) castValue(ValueT &&value) {
return dyn_cast<CastT>(value);
}

Expand Down
5 changes: 5 additions & 0 deletions mlir/include/mlir/IR/Attributes.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,14 +50,19 @@ class Attribute {
/// Casting utility functions. These are deprecated and will be removed,
/// please prefer using the `llvm` namespace variants instead.
template <typename... Tys>
[[deprecated("Use mlir::isa<U>() instead")]]
bool isa() const;
template <typename... Tys>
[[deprecated("Use mlir::isa_and_nonnull<U>() instead")]]
bool isa_and_nonnull() const;
template <typename U>
[[deprecated("Use mlir::dyn_cast<U>() instead")]]
U dyn_cast() const;
template <typename U>
[[deprecated("Use mlir::dyn_cast_or_null<U>() instead")]]
U dyn_cast_or_null() const;
template <typename U>
[[deprecated("Use mlir::cast<U>() instead")]]
U cast() const;

/// Return a unique identifier for the concrete attribute type. This is used
Expand Down
3 changes: 3 additions & 0 deletions mlir/include/mlir/IR/Location.h
Original file line number Diff line number Diff line change
Expand Up @@ -78,14 +78,17 @@ class Location {

/// Type casting utilities on the underlying location.
template <typename U>
[[deprecated("Use mlir::isa<U>() instead")]]
bool isa() const {
return llvm::isa<U>(*this);
}
template <typename U>
[[deprecated("Use mlir::dyn_cast<U>() instead")]]
U dyn_cast() const {
return llvm::dyn_cast<U>(*this);
}
template <typename U>
[[deprecated("Use mlir::cast<U>() instead")]]
U cast() const {
return llvm::cast<U>(*this);
}
Expand Down
5 changes: 5 additions & 0 deletions mlir/include/mlir/IR/Types.h
Original file line number Diff line number Diff line change
Expand Up @@ -97,14 +97,19 @@ class Type {
bool operator!() const { return impl == nullptr; }

template <typename... Tys>
[[deprecated("Use mlir::isa<U>() instead")]]
bool isa() const;
template <typename... Tys>
[[deprecated("Use mlir::isa_and_nonnull<U>() instead")]]
bool isa_and_nonnull() const;
template <typename U>
[[deprecated("Use mlir::dyn_cast<U>() instead")]]
U dyn_cast() const;
template <typename U>
[[deprecated("Use mlir::dyn_cast_or_null<U>() instead")]]
U dyn_cast_or_null() const;
template <typename U>
[[deprecated("Use mlir::cast<U>() instead")]]
U cast() const;

/// Return a unique identifier for the concrete type. This is used to support
Expand Down
28 changes: 28 additions & 0 deletions mlir/include/mlir/Tools/PDLL/AST/Types.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,23 +64,28 @@ class Type {

/// Provide type casting support.
template <typename U>
[[deprecated("Use mlir::isa<U>() instead")]]
bool isa() const {
assert(impl && "isa<> used on a null type.");
return U::classof(*this);
}
template <typename U, typename V, typename... Others>
[[deprecated("Use mlir::isa<U>() instead")]]
bool isa() const {
return isa<U>() || isa<V, Others...>();
}
template <typename U>
[[deprecated("Use mlir::dyn_cast<U>() instead")]]
U dyn_cast() const {
return isa<U>() ? U(impl) : U(nullptr);
}
template <typename U>
[[deprecated("Use mlir::dyn_cast_or_null<U>() instead")]]
U dyn_cast_or_null() const {
return (impl && isa<U>()) ? U(impl) : U(nullptr);
}
template <typename U>
[[deprecated("Use mlir::cast<U>() instead")]]
U cast() const {
assert(isa<U>());
return U(impl);
Expand Down Expand Up @@ -323,6 +328,29 @@ struct DenseMapInfo<mlir::pdll::ast::Type> {
return lhs == rhs;
}
};

/// Add support for llvm style casts.
/// We provide a cast between To and From if From is mlir::pdll::ast::Type or
/// derives from it
template <typename To, typename From>
struct CastInfo<
To, From,
std::enable_if_t<
std::is_same_v<mlir::pdll::ast::Type, std::remove_const_t<From>> ||
std::is_base_of_v<mlir::pdll::ast::Type, From>>>
: NullableValueCastFailed<To>,
DefaultDoCastIfPossible<To, From, CastInfo<To, From>> {
static inline bool isPossible(mlir::pdll::ast::Type ty) {
/// Return a constant true instead of a dynamic true when casting to self or
/// up the hierarchy.
if constexpr (std::is_base_of_v<To, From>) {
return true;
} else {
return To::classof(ty);
};
}
static inline To doCast(mlir::pdll::ast::Type ty) { return To(ty.getImpl()); }
};
} // namespace llvm

#endif // MLIR_TOOLS_PDLL_AST_TYPES_H_

0 comments on commit 7ac1fb0

Please sign in to comment.