14 #ifndef MLIR_IR_LOCATION_H
15 #define MLIR_IR_LOCATION_H
18 #include "llvm/Support/PointerLikeTypeTraits.h"
44 if (
auto typedLoc = llvm::dyn_cast<T>(loc)) {
66 assert(loc &&
"location should never be null.");
69 assert(
impl &&
"location should never be null.");
82 return llvm::isa<U>(*
this);
86 return llvm::dyn_cast<U>(*
this);
90 return llvm::cast<U>(*
this);
98 void print(raw_ostream &os)
const {
impl.print(os); }
133 #define GET_ATTRDEF_CLASSES
134 #include "mlir/IR/BuiltinLocationAttributes.h.inc"
144 template <
typename MetadataT>
147 using FusedLoc::FusedLoc;
151 return llvm::cast<MetadataT>(FusedLoc::getMetadata());
156 auto fusedLoc = llvm::dyn_cast<FusedLoc>(attr);
157 return fusedLoc && fusedLoc.getMetadata().isa_and_nonnull<MetadataT>();
167 template <
typename T>
168 inline OpaqueLoc
OpaqueLoc::get(T underlyingLocation, MLIRContext *context) {
169 return get(
reinterpret_cast<uintptr_t
>(underlyingLocation), TypeID::get<T>(),
185 return cast<LocationAttr>(attrRepls.
take_front(1)[0]);
218 struct PointerLikeTypeTraits<
mlir::Location> {
226 static constexpr
int NumLowBitsAvailable =
234 struct ValueIsPresent<
mlir::Location> {
241 template <
typename To,
typename From>
244 std::is_same_v<mlir::Location, std::remove_const_t<From>> ||
245 std::is_base_of_v<mlir::Location, From>>>
252 return std::is_same_v<To, std::remove_const_t<From>> ||
259 return To(location->
getImpl());
This class is used by AttrTypeSubElementHandler instances to process sub element replacements.
ArrayRef< T > take_front(unsigned n)
Take the first N replacements as an ArrayRef, dropping them from this replacement list.
Base storage class appearing in an attribute.
Attributes are known-constant values of operations.
constexpr Attribute()=default
ImplType * getImpl() const
Return the internal Attribute implementation.
This class represents a fused location whose metadata is known to be an instance of the given type.
MetadataT getMetadata() const
Return the metadata associated with this fused location.
static bool classof(Attribute attr)
Support llvm style casting.
Location objects represent source locations information in MLIR.
WalkResult walk(function_ref< WalkResult(Location)> walkFn)
Walk all of the locations nested under, and including, the current.
static bool classof(Attribute attr)
Methods for support type inquiry through isa, cast, and dyn_cast.
T findInstanceOf()
Return an instance of the given location type if one is nested under the current location.
This class defines the main interface for locations in MLIR and acts as a non-nullable wrapper around...
const void * getAsOpaquePointer() const
Methods for supporting PointerLikeTypeTraits.
MLIRContext * getContext() const
Return the context this location is uniqued in.
friend ::llvm::hash_code hash_value(Location arg)
Location(LocationAttr loc)
static bool classof(Attribute attr)
Support llvm style casting.
bool isa() const
Type casting utilities on the underlying location.
Location(const LocationAttr::ImplType *impl)
LocationAttr impl
The internal backing location attribute.
static Location getFromOpaquePointer(const void *pointer)
bool operator!=(Location rhs) const
LocationAttr * operator->() const
bool operator==(Location rhs) const
Comparison operators.
void print(raw_ostream &os) const
Print the location.
MLIRContext is the top-level object for a collection of MLIR operations.
A utility result that is used to signal how to proceed with an ongoing walk:
static WalkResult advance()
static WalkResult interrupt()
Include the generated interface declarations.
This header declares functions that assist transformations in the MemRef dialect.
auto get(MLIRContext *context, Ts &&...params)
Helper method that injects context only if needed, this helps unify some of the attribute constructio...
inline ::llvm::hash_code hash_value(AffineExpr arg)
Make AffineExpr hashable.
raw_ostream & operator<<(raw_ostream &os, const AliasResult &result)
static bool isPossible(mlir::Location location)
static To doCast(mlir::Location location)
static bool isEqual(mlir::Location LHS, mlir::Location RHS)
static unsigned getHashValue(mlir::Location val)
static mlir::Location getEmptyKey()
static mlir::Location getTombstoneKey()
static constexpr int NumLowBitsAvailable
static void * getAsVoidPointer(mlir::Location I)
static mlir::Location getFromVoidPointer(void *P)
static bool isPresent(const mlir::Location &location)
static Location replace(Location param, AttrSubElementReplacements &attrRepls, TypeSubElementReplacements &typeRepls)
static void walk(Location param, AttrTypeImmediateSubElementWalker &walker)
This class provides support for interacting with the SubElementInterfaces for different types of para...