[llvm-commits] [llvm] r108856 - in /llvm/trunk: include/llvm/PassSupport.h lib/VMCore/PassManager.cpp
Owen Anderson
resistor at mac.com
Tue Jul 20 09:55:05 PDT 2010
Author: resistor
Date: Tue Jul 20 11:55:05 2010
New Revision: 108856
URL: http://llvm.org/viewvc/llvm-project?rev=108856&view=rev
Log:
Pull out r108755. After offline discussion with Chris, we're going to go a different direction with this.
Modified:
llvm/trunk/include/llvm/PassSupport.h
llvm/trunk/lib/VMCore/PassManager.cpp
Modified: llvm/trunk/include/llvm/PassSupport.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/PassSupport.h?rev=108856&r1=108855&r2=108856&view=diff
==============================================================================
--- llvm/trunk/include/llvm/PassSupport.h (original)
+++ llvm/trunk/include/llvm/PassSupport.h Tue Jul 20 11:55:05 2010
@@ -36,10 +36,6 @@
class PassInfo {
public:
typedef Pass* (*NormalCtor_t)();
- struct InterfaceInfo {
- const PassInfo *interface;
- const InterfaceInfo *next;
- };
private:
const char *const PassName; // Nice name for Pass
@@ -48,7 +44,7 @@
const bool IsCFGOnlyPass; // Pass only looks at the CFG.
const bool IsAnalysis; // True if an analysis pass.
const bool IsAnalysisGroup; // True if an analysis group.
- const InterfaceInfo *ItfImpl;// Interfaces implemented by this pass
+ std::vector<const PassInfo*> ItfImpl;// Interfaces implemented by this pass
NormalCtor_t NormalCtor;
@@ -120,16 +116,13 @@
/// template.
///
void addInterfaceImplemented(const PassInfo *ItfPI) {
- InterfaceInfo *NewInfo = new InterfaceInfo();
- NewInfo->interface = ItfPI;
- NewInfo->next = ItfImpl;
- ItfImpl = NewInfo;
+ ItfImpl.push_back(ItfPI);
}
/// getInterfacesImplemented - Return a list of all of the analysis group
/// interfaces implemented by this pass.
///
- const InterfaceInfo *getInterfacesImplemented() const {
+ const std::vector<const PassInfo*> &getInterfacesImplemented() const {
return ItfImpl;
}
Modified: llvm/trunk/lib/VMCore/PassManager.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/PassManager.cpp?rev=108856&r1=108855&r2=108856&view=diff
==============================================================================
--- llvm/trunk/lib/VMCore/PassManager.cpp (original)
+++ llvm/trunk/lib/VMCore/PassManager.cpp Tue Jul 20 11:55:05 2010
@@ -638,14 +638,10 @@
// If Pass not found then check the interfaces implemented by Immutable Pass
if (!P) {
- const PassInfo::InterfaceInfo *ImmPI = PI->getInterfacesImplemented();
- while (ImmPI) {
- if (ImmPI->interface == AID) {
- P = *I;
- break;
- } else
- ImmPI = ImmPI->next;
- }
+ const std::vector<const PassInfo*> &ImmPI =
+ PI->getInterfacesImplemented();
+ if (std::find(ImmPI.begin(), ImmPI.end(), AID) != ImmPI.end())
+ P = *I;
}
}
@@ -735,11 +731,9 @@
//This pass is the current implementation of all of the interfaces it
//implements as well.
- const PassInfo::InterfaceInfo *II = PI->getInterfacesImplemented();
- while (II) {
- AvailableAnalysis[II->interface] = P;
- II = II->next;
- }
+ const std::vector<const PassInfo*> &II = PI->getInterfacesImplemented();
+ for (unsigned i = 0, e = II.size(); i != e; ++i)
+ AvailableAnalysis[II[i]] = P;
}
// Return true if P preserves high level analysis used by other
@@ -873,13 +867,12 @@
// Remove all interfaces this pass implements, for which it is also
// listed as the available implementation.
- const PassInfo::InterfaceInfo *II = PI->getInterfacesImplemented();
- while (II) {
+ const std::vector<const PassInfo*> &II = PI->getInterfacesImplemented();
+ for (unsigned i = 0, e = II.size(); i != e; ++i) {
std::map<AnalysisID, Pass*>::iterator Pos =
- AvailableAnalysis.find(II->interface);
+ AvailableAnalysis.find(II[i]);
if (Pos != AvailableAnalysis.end() && Pos->second == P)
AvailableAnalysis.erase(Pos);
- II = II->next;
}
}
}
More information about the llvm-commits
mailing list