//
//===----------------------------------------------------------------------===//
//
-// This file the PassNameParser and FilteredPassNameParser<> classes, which are
-// used to add command line arguments to a utility for all of the passes that
-// have been registered into the system.
+// This file contains the PassNameParser and FilteredPassNameParser<> classes,
+// which are used to add command line arguments to a utility for all of the
+// passes that have been registered into the system.
//
// The PassNameParser class adds ALL passes linked into the system (that are
// creatable) as command line arguments to the tool (when instantiated with the
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_SUPPORT_PASS_NAME_PARSER_H
-#define LLVM_SUPPORT_PASS_NAME_PARSER_H
+#ifndef LLVM_SUPPORT_PASSNAMEPARSER_H
+#define LLVM_SUPPORT_PASSNAMEPARSER_H
+#include "llvm/ADT/STLExtras.h"
+#include "llvm/Pass.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/raw_ostream.h"
-#include "llvm/Pass.h"
-#include <algorithm>
#include <cstring>
namespace llvm {
public:
PassNameParser() : Opt(0) {}
virtual ~PassNameParser();
-
-
+
void initialize(cl::Option &O) {
Opt = &O;
cl::parser<const PassInfo*>::initialize(O);
// ignorablePassImpl - Can be overriden in subclasses to refine the list of
// which passes we want to include.
//
- virtual bool ignorablePassImpl(const StaticPassInfo *P) const {
- return false;
- }
+ virtual bool ignorablePassImpl(const PassInfo *P) const { return false; }
- inline bool ignorablePass(const StaticPassInfo *P) const {
+ inline bool ignorablePass(const PassInfo *P) const {
// Ignore non-selectable and non-constructible passes! Ignore
// non-optimizations.
return P->getPassArgument() == 0 || *P->getPassArgument() == 0 ||
// Implement the PassRegistrationListener callbacks used to populate our map
//
- virtual void passRegistered(const StaticPassInfo *P) {
+ virtual void passRegistered(const PassInfo *P) {
if (ignorablePass(P) || !Opt) return;
if (findOption(P->getPassArgument()) != getNumOptions()) {
errs() << "Two passes with the same argument (-"
}
addLiteralOption(P->getPassArgument(), P, P->getPassName());
}
- virtual void passEnumerate(const StaticPassInfo *P) { passRegistered(P); }
-
- // ValLessThan - Provide a sorting comparator for Values elements...
- typedef std::pair<const char*,
- std::pair<const PassInfo*, const char*> > ValType;
- static bool ValLessThan(const ValType &VT1, const ValType &VT2) {
- return std::string(VT1.first) < std::string(VT2.first);
- }
+ virtual void passEnumerate(const PassInfo *P) { passRegistered(P); }
// printOptionInfo - Print out information about this option. Override the
// default implementation to sort the table before we print...
virtual void printOptionInfo(const cl::Option &O, size_t GlobalWidth) const {
PassNameParser *PNP = const_cast<PassNameParser*>(this);
- std::sort(PNP->Values.begin(), PNP->Values.end(), ValLessThan);
+ array_pod_sort(PNP->Values.begin(), PNP->Values.end(), ValLessThan);
cl::parser<const PassInfo*>::printOptionInfo(O, GlobalWidth);
}
+
+private:
+ // ValLessThan - Provide a sorting comparator for Values elements...
+ static int ValLessThan(const PassNameParser::OptionInfo *VT1,
+ const PassNameParser::OptionInfo *VT2) {
+ return std::strcmp(VT1->Name, VT2->Name);
+ }
};
///===----------------------------------------------------------------------===//
Filter filter;
public:
- bool ignorablePassImpl(const StaticPassInfo *P) const { return !filter(*P); }
+ bool ignorablePassImpl(const PassInfo *P) const { return !filter(*P); }
};
///===----------------------------------------------------------------------===//