mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-05 13:26:55 +00:00
Add AnalysisUsage::addRequiredTransitive() to keep analysis info alive for
future queries by clients. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12329 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -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; }
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user