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
|
// AnalysisUsage - Represent the analysis usage information of a pass. This
|
||||||
// tracks analyses that the pass REQUIRES (must available when the pass runs),
|
// tracks analyses that the pass REQUIRES (must be available when the pass
|
||||||
// and analyses that the pass PRESERVES (the pass does not invalidate the
|
// runs), REQUIRES TRANSITIVE (must be available throughout the lifetime of the
|
||||||
// results of these analyses). This information is provided by a pass to 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.
|
// Pass infrastructure through the getAnalysisUsage virtual function.
|
||||||
//
|
//
|
||||||
class AnalysisUsage {
|
class AnalysisUsage {
|
||||||
// Sets of analyses required and preserved by a pass
|
// Sets of analyses required and preserved by a pass
|
||||||
std::vector<AnalysisID> Required, Preserved;
|
std::vector<AnalysisID> Required, RequiredTransitive, Preserved;
|
||||||
bool PreservesAll;
|
bool PreservesAll;
|
||||||
public:
|
public:
|
||||||
AnalysisUsage() : PreservesAll(false) {}
|
AnalysisUsage() : PreservesAll(false) {}
|
||||||
|
@ -51,6 +52,15 @@ public:
|
||||||
return *this;
|
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
|
// addPreserved - Add the specified ID to the set of analyses preserved by
|
||||||
// this pass
|
// this pass
|
||||||
//
|
//
|
||||||
|
@ -82,6 +92,9 @@ public:
|
||||||
void setPreservesCFG();
|
void setPreservesCFG();
|
||||||
|
|
||||||
const std::vector<AnalysisID> &getRequiredSet() const { return Required; }
|
const std::vector<AnalysisID> &getRequiredSet() const { return Required; }
|
||||||
|
const std::vector<AnalysisID> &getRequiredTransitiveSet() const {
|
||||||
|
return RequiredTransitive;
|
||||||
|
}
|
||||||
const std::vector<AnalysisID> &getPreservedSet() const { return Preserved; }
|
const std::vector<AnalysisID> &getPreservedSet() const { return Preserved; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue