enum MemDepResult::DepType

Declared at: llvm/include/llvm/Analysis/MemoryDependenceAnalysis.h:50

Enumerators

NameValueComment
Invalid0Clients of MemDep never see this.Entries with this marker occur in a LocalDeps map or NonLocalDeps map when the instruction they previously referenced was removed from MemDep. In either case, the entry may include an instruction pointer. If so, the pointer is an instruction in the block where scanning can start from, saving some work.In a default-constructed MemDepResult object, the type will be Invalid and the instruction pointer will be null.
Clobber1This is a dependence on the specified instruction which clobbers the desired value. The pointer member of the MemDepResult pair holds the instruction that clobbers the memory. For example, this occurs when we see a may-aliased store to the memory location we care about.There are several cases that may be interesting here: 1. Loads are clobbered by may-alias stores. 2. Loads are considered clobbered by partially-aliased loads. The client may choose to analyze deeper into these cases.
Def2This is a dependence on the specified instruction which defines or produces the desired memory location. The pointer member of the MemDepResult pair holds the instruction that defines the memory.Cases of interest: 1. This could be a load or store for dependence queries on load/store. The value loaded or stored is the produced value. Note that the pointer operand may be different than that of the queried pointer due to must aliases and phi translation. Note that the def may not be the same type as the query, the pointers may just be must aliases. 2. For loads and stores, this could be an allocation instruction. In this case, the load is loading an undef value or a store is the first store to (that part of) the allocation. 3. Dependence queries on calls return Def only when they are readonly calls or memory use intrinsics with identical callees and no intervening clobbers. No validation is done that the operands to the calls are the same.
Other3This marker indicates that the query has no known dependency in the specified block.More detailed state info is encoded in the upper part of the pair (i.e. the Instruction*)