25 if (kind == other.kind)
42 case Kind::PartialAlias:
82 for (
const std::unique_ptr<Concept> &aliasImpl : aliasImpls) {
95 for (
const std::unique_ptr<Concept> &aliasImpl : aliasImpls) {
96 result = result.
intersect(aliasImpl->getModRef(op, location));
AliasAnalysis(Operation *op)
ModRefResult getModRef(Operation *op, Value location)
Return the modify-reference behavior of op on location.
AliasResult alias(Value lhs, Value rhs)
Given two values, return their aliasing behavior.
void addAnalysisImplementation(AnalysisT &&analysis)
Add a new alias analysis implementation AnalysisT to this analysis aggregate.
The possible results of an alias query.
bool isPartial() const
Returns if this result is a partial alias.
bool isMay() const
Returns if this result is a may alias.
AliasResult merge(AliasResult other) const
Merge this alias result with other and return a new result that represents the conservative merge of ...
void print(raw_ostream &os) const
Print this alias result to the provided output stream.
bool isMust() const
Returns if this result is a must alias.
@ MayAlias
The two locations may or may not alias.
@ PartialAlias
The two locations alias, but only due to a partial overlap.
This class implements a local form of alias analysis that tries to identify the underlying values add...
The possible results of whether a memory access modifies or references a memory location.
ModRefResult intersect(const ModRefResult &other)
Intersect this ModRef result with other and return the result.
bool isNoModRef() const
Returns if this result does not modify or reference memory.
static ModRefResult getModAndRef()
Return a new result that indicates that the memory access may reference and may modify the value stor...
void print(raw_ostream &os) const
Print this ModRef result to the provided output stream.
Operation is the basic unit of execution within MLIR.
This class represents an instance of an SSA value in the MLIR system, representing a computable value...
Include the generated interface declarations.