forked from OSchip/llvm-project
Add AnalysisUsage::addRequiredTransitive() to keep analysis info alive for
future queries by clients. llvm-svn: 12329
This commit is contained in:
parent
fd747f8db8
commit
386ef6dec8
|
@ -25,14 +25,15 @@ namespace llvm {
|
|||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// AnalysisUsage - Represent the analysis usage information of a pass. This
|
||||
// tracks analyses that the pass REQUIRES (must available when the pass runs),
|
||||
// and analyses that the pass PRESERVES (the pass does not invalidate the
|
||||
// results of these analyses). This information is provided by a pass to the
|
||||
// tracks analyses that the pass REQUIRES (must be available when the pass
|
||||
// runs), REQUIRES TRANSITIVE (must be available throughout the lifetime of the
|
||||
// pass), and analyses that the pass PRESERVES (the pass does not invalidate the
|
||||
// results of these analyses). This information is provided by a pass to the
|
||||
// Pass infrastructure through the getAnalysisUsage virtual function.
|
||||
//
|
||||
class AnalysisUsage {
|
||||
// Sets of analyses required and preserved by a pass
|
||||
std::vector<AnalysisID> Required, Preserved;
|
||||
std::vector<AnalysisID> Required, RequiredTransitive, Preserved;
|
||||
bool PreservesAll;
|
||||
public:
|
||||
AnalysisUsage() : PreservesAll(false) {}
|
||||
|
@ -51,6 +52,15 @@ public:
|
|||
return *this;
|
||||
}
|
||||
|
||||
template<class PassClass>
|
||||
AnalysisUsage &addRequiredTransitive() {
|
||||
AnalysisID ID = Pass::getClassPassInfo<PassClass>();
|
||||
assert(ID && "Pass class not registered!");
|
||||
Required.push_back(ID);
|
||||
RequiredTransitive.push_back(ID);
|
||||
return *this;
|
||||
}
|
||||
|
||||
// addPreserved - Add the specified ID to the set of analyses preserved by
|
||||
// this pass
|
||||
//
|
||||
|
@ -82,6 +92,9 @@ public:
|
|||
void setPreservesCFG();
|
||||
|
||||
const std::vector<AnalysisID> &getRequiredSet() const { return Required; }
|
||||
const std::vector<AnalysisID> &getRequiredTransitiveSet() const {
|
||||
return RequiredTransitive;
|
||||
}
|
||||
const std::vector<AnalysisID> &getPreservedSet() const { return Preserved; }
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue