diff --git a/llvm/include/llvm/Analysis/MemoryDependenceAnalysis.h b/llvm/include/llvm/Analysis/MemoryDependenceAnalysis.h --- a/llvm/include/llvm/Analysis/MemoryDependenceAnalysis.h +++ b/llvm/include/llvm/Analysis/MemoryDependenceAnalysis.h @@ -79,6 +79,10 @@ /// the calls are the same. Def, + /// This marker indicates that the query has dependency from select + /// instruction. + Select, + /// This marker indicates that the query has no known dependency in the /// specified block. /// @@ -106,6 +110,7 @@ DepType, PointerSumTypeMember, PointerSumTypeMember, PointerSumTypeMember, + PointerSumTypeMember, PointerSumTypeMember>>; ValueTy Value; @@ -124,6 +129,9 @@ assert(Inst && "Clobber requires inst"); return MemDepResult(ValueTy::create(Inst)); } + static MemDepResult getSelect(Instruction *Inst) { + return MemDepResult(ValueTy::create(); } + + /// Tests if this MemDepResult represents a local query (Clobber/Def/Select). + bool isLocal() const { return isClobber() || isDef() || isSelect(); } + /// Tests if this MemDepResult represents a query that is transparent to the /// start of the block, but where a non-local hasn't been done. bool isNonLocal() const { @@ -170,6 +185,8 @@ return Value.cast(); case Def: return Value.cast(); + case Select: + return Value.cast